Temel bir "Google Çeviri" dağıtın Python 2 App Engine'deki uygulama

1. Genel Bakış

Bu Codelabs serisi (kendi hızınızda ilerleyebileceğiniz, uygulamalı eğitici içerikler), geliştiricilerin uygulamalarını dağıtırken kullanabilecekleri çeşitli seçenekleri anlamalarına yardımcı olmayı amaçlamaktadır. Bu codelab'de, Google Cloud Translation API'yi Python ile nasıl kullanacağınızı ve yerel olarak çalıştırmayı veya bir Cloud sunucusuz bilgi işlem platformuna (App Engine, Cloud Functions veya Cloud Run) dağıtmayı öğreneceksiniz. Bu eğitimdeki depoda bulunan örnek uygulama, yalnızca küçük yapılandırma değişiklikleriyle (en az) sekiz farklı şekilde dağıtılabilir:

  1. Yerel Flask sunucusu (Python 2)
  2. Yerel Flask sunucusu (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. Cloud Functions (Python 3)
  6. Cloud Run (Docker üzerinden Python 2)
  7. Cloud Run (Docker üzerinden Python 3)
  8. Cloud Run (Cloud Buildpacks aracılığıyla Python 3)

Bu codelab, bu uygulamayı yukarıdaki kalın yazılmış platformlara dağıtmaya odaklanır.

Aşağıdaki işlemleri yapmayı öğreneceksiniz:

Gerekenler

  • Etkin bir Cloud Faturalandırma hesabı olan Google Cloud projesi
  • Yerel olarak çalıştırılmak üzere yüklenmiş Flask veya bulut tabanlı dağıtımlar için etkinleştirilmiş bir Cloud sunucusuz bilgi işlem platformu
  • Temel Python becerileri
  • Temel işletim sistemi komutları hakkında bilgi sahibi olma

Anket

Bu eğitimi nasıl kullanacaksınız?

İçeriği okuyup alıştırmaları tamamlayın Yalnızca içeriği okuyun

Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Uzman

Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Seviye Uzman

2. Kurulum ve şartlar

Kendine ait tempoda ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Proje adı, bu projenin katılımcılarının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) referans vermeniz gerekir. Bu kimliği beğenmezseniz rastgele başka bir kimlik oluşturun veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını kontrol edin. Proje oluşturulduktan sonra ise "dondurulur".
  • Bazı API'lerin kullandığı üçüncü bir değer de vardır: Proje Numarası. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı olmayacaktır. Bu eğiticinin dışında faturalandırılmamak için kaynakları kapatmak üzere codelab'in sonundaki "temizlik" talimatlarını uygulayın. Google Cloud'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.

3. Translation API'yi etkinleştirme

Örnek uygulamamızda, aşağıda verilen benzer talimatları kullanarak Cloud Translation API ve App Engine hizmetini etkinleştireceksiniz.

Cloud API'leri etkinleştirme

Giriş

Uygulamanızda kullanmak istediğiniz Google API'si etkinleştirilmiş olmalıdır. Aşağıdaki örnekte, Cloud Vision API'yi etkinleştirmenin iki yolu gösterilmektedir. Bir Cloud API'yi nasıl etkinleştireceğinizi öğrendikten sonra, benzer bir süreç izleyerek diğer API'leri de etkinleştirebilirsiniz.

1. Seçenek: Cloud Shell'den veya komut satırı arayüzünüzden

API'leri Cloud Console'dan etkinleştirmek daha yaygın olsa da bazı geliştiriciler her şeyi komut satırından yapmayı tercih eder. Bunun için API'nin "hizmet adını" aramanız gerekir. URL gibi görünür: SERVICE_NAME.googleapis.com. Bu ürünleri Desteklenen ürünler grafiğinde bulabilir veya Google Discovery API ile programatik olarak sorgulayabilirsiniz.

Bu bilgilerle Cloud Shell'i (veya gcloud komut satırı aracının yüklü olduğu yerel geliştirme ortamınızı) kullanarak bir API'yi aşağıdaki gibi etkinleştirebilirsiniz:

gcloud services enable SERVICE_NAME.googleapis.com

Örneğin, aşağıdaki komut Cloud Vision API'yi etkinleştirir:

gcloud services enable vision.googleapis.com

Bu komut, App Engine'i etkinleştirir:

gcloud services enable appengine.googleapis.com

Tek bir istekle birden fazla API'yi de etkinleştirebilirsiniz. Örneğin, bu komut satırı Cloud Run, Cloud Artifact Registry ve Cloud Translation API'yi etkinleştirir:

gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

2. seçenek: Cloud Console'dan

Vision API'yi API Yöneticisi'nden de etkinleştirebilirsiniz. Cloud Console'da API Yöneticisi'ne gidin ve Kitaplık'ı seçin.

fb0f1d315f122d4a.png

Cloud Vision API'yi etkinleştirmek istiyorsanız arama çubuğuna"vision" yazmaya başlayın. Bu durumda, girdiğiniz terimlerle eşleşen tüm sonuçlar gösterilir:

2275786a24f8f204.png

Etkinleştirmek istediğiniz API'yi seçin ve Etkinleştir'i tıklayın:

2556f923b628e31.png

Maliyet

Birçok Google API'si ücretsiz olarak kullanılabilir ancak Google Cloud ürünleri ve API'lerinin kullanımı ücretlidir. Cloud API'leri etkinleştirirken etkin bir faturalandırma hesabı girmeniz istenebilir. Ancak bazı Google Cloud ürünlerinin "Her Zaman Ücretsiz" (günlük/aylık) bir katmana sahip olduğunu ve faturalandırma ücretlerine tabi olmak için bu katmanı aşmanız gerektiğini unutmayın. Aksi takdirde kredi kartınızdan (veya belirtilen faturalandırma aracından) ödeme alınmaz.

Kullanıcılar, etkinleştirmeden önce API'nin fiyatlandırma bilgilerini incelemelidir. Özellikle de ücretsiz bir katmanının olup olmadığını ve varsa ne olduğunu kontrol etmelidir. Cloud Vision API'yi etkinleştiriyorsanız fiyatlandırma bilgilerini kontrol etmeniz gerekir. Cloud Vision'un ücretsiz kotası vardır ve toplamda (her ay) kota sınırları içinde kaldığınızda herhangi bir ücret ödemeniz gerekmez.

Fiyatlandırma ve ücretsiz katmanlar, Google API'leri arasında değişiklik gösterir. Örnekler:

Farklı Google ürünleri farklı şekilde faturalandırılır. Bu nedenle, bu bilgiler için API'nizin belgelerine başvurduğunuzdan emin olun.

Özet

Google API'lerini genel olarak nasıl etkinleştireceğinizi öğrendiğinize göre lütfen API Yöneticisi'ne gidip hem Cloud Translation API'yi hem de App Engine hizmetini etkinleştirin (henüz etkinleştirmediyseniz). İlkini uygulamamız kullanacağı, ikincisini ise bir App Engine uygulaması dağıttığınız için etkinleştirmeniz gerekir. Bunu komut satırından yapmayı tercih ederseniz bunun yerine şu komutu verin:

gcloud services enable appengine.googleapis.com translate.googleapis.com

Aylık kotası genel "Her Zaman Ücretsiz" katmanı özet sayfasında listelenmese de Translation API'nin fiyatlandırma sayfasında tüm kullanıcıların aylık olarak sabit bir miktarda çevrilmiş karakter aldığı belirtilmektedir. Bu eşiğin altında kalırsanız API'den herhangi bir ödeme alınmaz. Google Cloud ile ilgili başka ödemeler varsa bunlar "Temizleme" bölümünde açıklanır.

4. Örnek uygulama kodunu alma

Kodu depoda yerel olarak veya Cloud Shell'de (git clone komutunu kullanarak) klonlayın ya da aşağıdaki ekran görüntüsünde gösterildiği gibi yeşil Kod düğmesinden ZIP dosyasını indirin:

5cd6110c4414cf65.png

Tüm hazırlıkları tamamladığınıza göre, bu eğitimde dosyaların silinmesi veya değiştirilmesi gerekeceğinden, klasörün tam bir kopyasını oluşturun. Farklı bir dağıtım yapmak istiyorsanız orijinali kopyalayarak baştan başlayabilirsiniz. Böylece, klonlamanız veya tekrar indirmeniz gerekmez.

5. Örnek uygulama turu

Örnek uygulama, kullanıcılardan İngilizce metin girmesini ve bu metnin İspanyolca eşdeğer çevirisini almasını isteyen basit bir Google Çeviri türevidir. Şimdi, nasıl çalıştığını görebilmemiz için main.py dosyasını açın. Lisanslamayla ilgili yorumlanmış satırlar hariç tutularak üst ve alt kısım şu şekilde görünür:

from flask import Flask, render_template, request
import google.auth
from google.cloud import translate

app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')

# . . . [translate() function definition] . . .

if __name__ == '__main__':
    import os
    app.run(debug=True, threaded=True, host='0.0.0.0',
            port=int(os.environ.get('PORT', 8080)))
  1. İçe aktarma işlemleri Flask işlevini, google.auth modülünü ve Cloud Translation API istemci kitaplığını getirir.
  2. Global değişkenler; Flask uygulamasını, Cloud proje kimliğini, Translation API istemcisini, Translation API çağrıları için üst "konum yolunu" ve kaynak ile hedef dilleri temsil eder. Bu örnekte İngilizce (en) ve İspanyolca (es) kullanılmaktadır ancak bu değerleri Cloud Translation API tarafından desteklenen diğer dil kodlarıyla değiştirebilirsiniz.
  3. Alt kısımdaki büyük if bloğu, bu uygulamayı yerel olarak çalıştırma konulu eğitimde kullanılır. Bu blok, uygulamamızı sunmak için Flask geliştirme sunucusunu kullanır. Bu bölüm, web sunucusunun kapsayıcıya dahil edilmemesi durumunda Cloud Run dağıtımı konulu eğitimler için de buradadır. Sunucunun kapsayıcıda paketlenmesini etkinleştirmeniz istenir. Bunu gözden kaçırırsanız uygulama kodu, Flask geliştirme sunucusunu kullanmaya geri döner. (Bu, kaynak tabanlı platformlar olduğu için App Engine veya Cloud Functions ile ilgili bir sorun değildir. Yani Google Cloud varsayılan bir web sunucusu sağlar ve çalıştırır.)

Son olarak, main.py işlevinin ortasında uygulamanın kalbi olan translate() işlevi yer alır:

@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
    """
    main handler - show form and possibly previous translation
    """

    # Flask Request object passed in for Cloud Functions
    # (use gcf_request for GCF but flask.request otherwise)
    local_request = gcf_request if gcf_request else request

    # reset all variables (GET)
    text = translated = None

    # if there is data to process (POST)
    if local_request.method == 'POST':
        text = local_request.form['text']
        data = {
            'contents': [text],
            'parent': PARENT,
            'target_language_code': TARGET[0],
        }
        # handle older call for backwards-compatibility
        try:
            rsp = TRANSLATE.translate_text(request=data)
        except TypeError:
            rsp = TRANSLATE.translate_text(**data)
        translated = rsp.translations[0].translated_text

    # create context & render template
    context = {
        'orig':  {'text': text, 'lc': SOURCE},
        'trans': {'text': translated, 'lc': TARGET},
    }
    return render_template('index.html', **context)

Birincil işlev, kullanıcı girişini alma ve ağır işleri yapmak için Translation API'yi çağırma işini yapar. Bu süreci ayrıntılı olarak inceleyelim:

  1. local_request değişkenini kullanarak isteklerin Cloud Functions'dan gelip gelmediğini kontrol edin. Cloud Functions kendi Flask istek nesnesini gönderirken diğer tüm platformlar (yerel olarak çalışan veya App Engine ya da Cloud Run'a dağıtılan) istek nesnesini doğrudan Flask'tan alır.
  2. Formun temel değişkenlerini sıfırlayın. POST isteklerinde bu değerlerin yerini alacak veriler olacağından bu, öncelikle GET istekleri içindir.
  3. POST ise çevrilecek metni alın ve API meta veri şartını temsil eden bir JSON yapısı oluşturun. Ardından, kullanıcı eski bir kitaplık kullanıyorsa API'nin önceki bir sürümüne geri dönerek API'yi çağırın.
  4. Bununla birlikte, gerçek sonuçları (POST) veya veri yok (GET) şablon bağlamında biçimlendirin ve oluşturun.

Uygulamanın görsel kısmı index.html şablon dosyasındadır. Önceden çevrilmiş sonuçları (boş değilse) ve ardından çevrilecek bir metin isteyen formu gösterir:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>

{% if trans['text'] %}
    <h4>Previous translation</h4>
    <li><b>Original</b>:   {{ orig['text'] }}  (<i>{{ orig['lc'][0] }}</i>)</li>
    <li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}

<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>

6. Yerel paketleri/bağımlıkları yükleme (lib içine)

Daha önce de belirtildiği gibi örnek uygulamada Flask mikro web çerçevesi ve Python için Google Cloud Translation API istemci kitaplığı kullanılmaktadır. pip'yi ve bu paket çiftini şu pip (veya pip3) komutuyla yükleyip güncelleyin:

pip install -t lib -r requirements.txt

Yukarıdaki yorumu çalıştırdıktan sonra, aşağıdaki gibi görünebilecek yükleme çıkışını görürsünüz:

$ pip install -t lib -r requirements.txt
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting flask>=1.1.2
  Using cached Flask-1.1.4-py2.py3-none-any.whl (94 kB)
Collecting google-cloud-translate>=2.0.1
  Using cached google_cloud_translate-2.0.2-py2.py3-none-any.whl (91 kB)
Collecting click<8.0,>=5.1
  Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Jinja2<3.0,>=2.10.1
  Using cached Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
Collecting Werkzeug<2.0,>=0.15
  Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Collecting itsdangerous<2.0,>=0.24
  Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting google-api-core[grpc]<2.0.0dev,>=1.15.0
  Downloading google_api_core-1.29.0-py2.py3-none-any.whl (93 kB)
     |████████████████████████████████| 93 kB 2.1 MB/s
Collecting google-cloud-core<2.0dev,>=1.1.0
  Using cached google_cloud_core-1.6.0-py2.py3-none-any.whl (28 kB)
Collecting MarkupSafe>=0.23
  Using cached MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl (17 kB)
Collecting protobuf>=3.12.0
  Downloading protobuf-3.17.2-cp27-cp27m-macosx_10_9_x86_64.whl (958 kB)
     |████████████████████████████████| 958 kB 21.6 MB/s
Collecting futures>=3.2.0; python_version < "3.2"
  Using cached futures-3.3.0-py2-none-any.whl (16 kB)
Collecting six>=1.13.0
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting packaging>=14.3
  Using cached packaging-20.9-py2.py3-none-any.whl (40 kB)
Collecting googleapis-common-protos<2.0dev,>=1.6.0
  Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB)
Collecting requests<3.0.0dev,>=2.18.0
  Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting google-auth<2.0dev,>=1.25.0
  Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB)
Collecting pytz
  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Collecting setuptools>=40.3.0
  Using cached setuptools-44.1.1-py2.py3-none-any.whl (583 kB)
Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc"
  Using cached grpcio-1.38.0-cp27-cp27m-macosx_10_10_x86_64.whl (3.8 MB)
Collecting pyparsing>=2.0.2
  Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Collecting chardet<5,>=3.0.2
  Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB)
     |████████████████████████████████| 145 kB 61.1 MB/s
Collecting pyasn1-modules>=0.2.1
  Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting rsa<4.6; python_version < "3.6"
  Using cached rsa-4.5-py2.py3-none-any.whl (36 kB)
Collecting cachetools<5.0,>=2.0.0
  Using cached cachetools-3.1.1-py2.py3-none-any.whl (11 kB)
Collecting enum34>=1.0.4; python_version < "3.4"
  Using cached enum34-1.1.10-py2-none-any.whl (11 kB)
Collecting pyasn1<0.5.0,>=0.4.6
  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, six, protobuf, futures, pyparsing, packaging, googleapis-common-protos, chardet, urllib3, idna, certifi, requests, pyasn1, pyasn1-modules, rsa, cachetools, setuptools, google-auth, pytz, enum34, grpcio, google-api-core, google-cloud-core, google-cloud-translate
ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
matplotlib 1.3.1 requires nose, which is not installed.
matplotlib 1.3.1 requires tornado, which is not installed.
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 cachetools-3.1.1 certifi-2021.5.30 chardet-4.0.0 click-7.1.2 enum34-1.1.10 flask-1.1.4 futures-3.3.0 google-api-core-1.29.0 google-auth-1.30.1 google-cloud-core-1.6.0 google-cloud-translate-2.0.2 googleapis-common-protos-1.52.0 grpcio-1.38.0 idna-2.10 itsdangerous-1.1.0 packaging-20.9 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 requests-2.25.1 rsa-4.5 setuptools-44.1.1 six-1.16.0 urllib3-1.26.5

7. Hizmeti dağıtma

Çeviri hizmetinizi Python 2 App Engine'e dağıtmak için şu komutu çalıştırın:

gcloud app deploy

Çıkış aşağıdaki gibi görünecek ve sonraki adımlar için bazı istemler sağlayacaktır:

$ gcloud app deploy
Services to deploy:

descriptor:      [/private/tmp/nebulous-serverless-python/app.yaml]
source:          [/private/tmp/nebulous-serverless-python]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [20210422t161025]
target url:      [https://PROJECT_ID.appspot.com]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 1290 files to Google Cloud Storage                       ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

Uygulamanız artık dünya genelinde kullanıma sunulduğundan uygulamanıza dağıtım çıkışınızda sağlanan URL'den (proje kimliğinizi içerir) erişebilirsiniz:

da28f951c33a2c3d.png

Nasıl çalıştığını görmek için bir metni çevirin.

d911984d15dd5ef9.png

8. Sonuç

Tebrikler! Cloud Translation API'yi nasıl etkinleştireceğinizi, gerekli kimlik bilgilerini nasıl edineceğinizi ve basit bir web uygulamasını Python 2 App Engine'e nasıl dağıtacağınızı öğrendiniz. Bu dağıtım hakkında daha fazla bilgiyi depodaki bu tabloda bulabilirsiniz.

Temizleme

Cloud Translation API, aylık sabit bir miktarda çeviri karakterini ücretsiz olarak gerçekleştirmenize olanak tanır. App Engine'in de ücretsiz kotası vardır. Cloud Functions ve Cloud Run için de aynı durum geçerlidir. Bu sınırlardan herhangi biri aşıldığında sizden ödeme alınır. Bir sonraki kod laboratuvarına devam etmeyi planlıyorsanız uygulamanızı kapatmanız gerekmez.

Ancak henüz bir sonraki eğitime geçmeye hazır değilseniz veya yeni dağıttığınız uygulamanın internette keşfedilmesinden endişeleniyorsanız ücret ödememek için App Engine uygulamanızı devre dışı bırakın, Cloud Functions'inizi silin veya Cloud Run hizmetinizi devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda bu özelliği yeniden etkinleştirebilirsiniz. Öte yandan, bu uygulamaya veya diğer kod laboratuvarlarına devam etmeyecekseniz ve her şeyi tamamen silmek istiyorsanız projenizi kapatabilirsiniz.

Ayrıca, Google Cloud sunucusuz bilgi işlem platformuna dağıtma işlemi az miktarda derleme ve depolama maliyeti gerektirir. Cloud Build'in, Cloud Storage'ınkine benzer şekilde kendi ücretsiz kotası vardır. Cloud Build, daha fazla şeffaflık için uygulama görüntünüzü oluşturur. Bu görüntü daha sonra Cloud Container Registry'de veya ardılı olan Artifact Registry'de depolanır. Bu görselin depolanması, kotanın bir kısmını tüketir. Bu görsel hizmete aktarılırken ağ çıkışı da kotadan pay alır. Ancak böyle bir ücretsiz katmanın bulunmadığı bir bölgede yaşıyor olabilirsiniz. Bu nedenle, olası maliyetleri en aza indirmek için depolama alanı kullanımınıza dikkat edin.

9. Ek kaynaklar

Aşağıdaki bölümlerde, bu eğitimden edindiğiniz bilgileri geliştirmek için ek okuma materyallerinin yanı sıra önerilen alıştırmaları bulabilirsiniz.

Ek çalışma

Translation API ile ilgili biraz deneyime sahip olduğunuza göre, becerilerinizi daha da geliştirmek için bazı ek alıştırmalar yapalım. Öğrenim rotanıza devam etmek için örnek uygulamamızı aşağıdaki işlemleri yapacak şekilde değiştirin:

  1. Yerel olarak çalıştırmak veya Google Cloud sunucusuz bilgi işlem platformlarına dağıtmak için bu kod laboratuvarının diğer tüm sürümlerini tamamlayın (repo README bölümüne bakın).
  2. Bu eğitimi başka bir programlama dili kullanarak tamamlayın.
  3. Bu uygulamayı farklı kaynak veya hedef dilleri destekleyecek şekilde değiştirin.
  4. Metni birden fazla dile çevirebilmek için bu uygulamayı yükseltin; şablon dosyasını, desteklenen hedef dillerin açılır menüsüne sahip olacak şekilde değiştirin.

Daha fazla bilgi

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation ve Google ML Kit

Diğer Google Cloud ürünleri/sayfaları

Python ve Flask

Lisans

Bu eğitim, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisanslanmıştır. Depodaki kaynak kod ise Apache 2 ile lisanslanmıştır.