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

1. Genel Bakış

Bu kod laboratuvarı serisi (kendi hızınızda ilerleyebileceğiniz, uygulamalı eğitimler), geliştiricilerin uygulamalarını dağıtırken sahip oldukları ç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 nasıl çalıştıracağınızı ya da bir Cloud sunucusuz bilgi işlem platformuna (App Engine, Cloud Functions veya Cloud Run) nasıl dağıtacağınızı öğreneceksiniz. Bu eğitimin deposunda 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 aracılığıyla Python 2)
  7. Cloud Run (Docker aracılığıyla Python 3)
  8. Cloud Run (Cloud Buildpacks aracılığıyla Python 3)

Bu codelab, bu uygulamayı yukarıdaki kalın platformlara dağıtmaya odaklanmaktadır.

Öğrenecekleriniz

Gerekenler

  • Etkin bir Cloud Faturalandırma Hesabı'na sahip bir Google Cloud projesi
  • Yerel olarak çalıştırmak için Flask'in yüklü olması 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 çalışma bilgisi

Anket

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

Okuyun ve alıştırmaları tamamlayın Yalnızca okuyun

Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Yeni başlayan Orta düzey Uzman

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

Başlangıç Orta İleri

2. Kurulum ve şartlar

Yönlendirmesiz 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ı için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizisidir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Bu nedenle, beğenmezseniz başka bir rastgele kimlik oluşturabilir veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını görebilirsiniz. Proje oluşturulduktan sonra bu değer "dondurulur".
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere codelab'in sonunda bulunan "temizleme" talimatlarını uygulayın. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

3. Translation API'yi etkinleştirme

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

Cloud API'lerini etkinleştirme

Giriş

Uygulamanızda hangi Google API'sini kullanmak istediğinizden bağımsız olarak, API'lerin etkinleştirilmesi gerekir. Aşağıdaki örnekte Cloud Vision API'yi etkinleştirmenin iki yolu gösterilmektedir. Bir Cloud API'yi etkinleştirmeyi öğrendikten sonra, işlem benzer olduğu için 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 bir API'nin "hizmet adını" aramanız gerekir. URL'ye benziyor: SERVICE_NAME.googleapis.com. Bu ürünleri Desteklenen ürünler tablosunda bulabilir veya Google Discovery API ile programatik olarak sorgulayabilirsiniz.

Bu bilgilerle donanmış olarak Cloud Shell'i (veya gcloud komut satırı aracı yüklü 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, bu 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

Ayrıca, tek bir istekle birden fazla API'yi etkinleştirebilirsiniz. Örneğin, aşağıdaki 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 gidip Kitaplık'ı seçin.

fb0f1d315f122d4a.png

Cloud Vision API'yi etkinleştirmek istiyorsanız arama çubuğuna"vision" yazmaya başlayın. Şimdiye kadar girdiğinizle eşleşen her şey görünür:

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ılabilirken Google Cloud ürünleri ve API'lerinin kullanımı ücretsiz değildir. Cloud API'lerini etkinleştirirken etkin bir faturalandırma hesabı istenebilir. Ancak bazı Google Cloud ürünlerinde "Her Zaman Ücretsiz" katmanı (günlük/aylık) bulunduğunu ve faturalandırma ücreti alınması için bu katmanı aşmanız gerektiğini unutmayın. Aksi takdirde kredi kartınızdan (veya belirtilen faturalandırma aracından) ücret alınmaz.

Kullanıcılar, etkinleştirmeden önce herhangi bir API'nin fiyatlandırma bilgilerine başvurmalı, özellikle ücretsiz katmanının olup olmadığını ve varsa ne olduğunu belirtmelidir. Cloud Vision API'yi etkinleştiriyorsanız fiyatlandırma bilgileri sayfasını kontrol etmeniz gerekir. Cloud Vision'ın ücretsiz bir kotası vardır. Toplamda (her ay içinde) bu sınırlar dahilinde kaldığınız sürece herhangi bir ücret ödemezsiniz.

Fiyatlandırma ve ücretsiz katmanlar Google API'leri arasında farklılık gösterir. Örnekler:

Farklı Google ürünleri için farklı şekilde faturalandırma yapılır. Bu nedenle, ilgili bilgileri API'nizin belgelerinde bulabilirsiniz.

Özet

Google API'lerini genel olarak nasıl etkinleştireceğinizi öğrendiğinize göre lütfen API Yöneticisi'ne gidin ve hem Cloud Translation API'yi hem de App Engine hizmetini etkinleştirin (daha önce yapmadıysanız). Birincisi uygulamamız tarafından kullanılacağı için, ikincisi ise bir App Engine uygulaması dağıtacağınız için gereklidir. Bu işlemi 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 miktarda çevrilmiş karakter aldığı belirtilir. Bu eşiğin altında kalırsanız API'den herhangi bir ücret alınmaz. Google Cloud ile ilgili başka ücretler varsa bunlar en sonda "Temizleme" bölümünde ele alınır.

4. Örnek uygulama kodunu alma

Depodaki kodu 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 Code (Kod) düğmesinden ZIP dosyasını indirin:

5cd6110c4414cf65.png

Artık her şeye sahip olduğunuza göre, bu özel eğitimi uygulamak için klasörün tam bir kopyasını oluşturun. Çünkü bu eğitimde dosyaların silinmesi veya değiştirilmesi gerekebilir. Farklı bir dağıtım yapmak istiyorsanız orijinali kopyalayarak baştan başlayabilirsiniz. Böylece orijinali tekrar klonlamanız veya indirmeniz gerekmez.

5. Örnek uygulamada gezinme

Örnek uygulama, kullanıcıların İngilizce metin girmesini ve bu metnin İspanyolca çevirisini almasını isteyen basit bir Google Çeviri türevidir. Şimdi main.py dosyasını açarak nasıl çalıştığını görelim. Lisanslama ile ilgili yorum satırları çıkarıldığında, üst ve alt kısımlar aşağıdaki gibi 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 aktarmalar, Flask işlevselliğini, 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ılmıştır ancak bu değerleri Cloud Translation API tarafından desteklenen diğer dil kodlarıyla değiştirebilirsiniz.
  3. En alttaki büyük if bloğu, bu uygulamayı yerel olarak çalıştırma eğitiminde kullanılır. Uygulamamızı sunmak için Flask geliştirme sunucusunu kullanır. Bu bölüm, web sunucusu kapsayıcıya dahil edilmediyse Cloud Run dağıtımı eğitimleri için de buradadır. Sunucunun kapsayıcıda paketlenmesini etkinleştirmeniz istenir ancak bunu gözden kaçırmanız durumunda uygulama kodu, Flask geliştirme sunucusunu kullanmaya geri döner. (Bunlar kaynak tabanlı platformlar olduğundan, yani Google Cloud varsayılan bir web sunucusu sağlayıp çalıştırdığından App Engine veya Cloud Functions ile ilgili bir sorun değildir.)

Son olarak, main.py'nın 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 görevini yerine getirir. Her birini ayrı ayrı inceleyelim:

  1. İsteklerin local_request değişkeni kullanılarak Cloud Functions'tan gelip gelmediğini kontrol edin. Cloud Functions kendi Flask Request nesnesini gönderirken diğer tüm işlevler (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. Bu, öncelikle GET istekleri içindir. POST isteklerinde bu verilerin yerini alacak veriler bulunur.
  3. POST isteği 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'yi çağırın ve API'nin önceki bir sürümüne geri dönün.
  4. Her durumda, gerçek sonuçları (POST) veya verileri (GET) şablon bağlamında biçimlendirin ve oluşturun.

Uygulamanın görsel kısmı index.html şablon dosyasında yer alır. Daha önce çevrilmiş sonuçları (aksi takdirde boş) ve ardından çevrilmesini istediğiniz metni girmenizi 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ılıkları yükleme (lib'e)

Daha önce belirtildiği gibi, örnek uygulama Flask mikro web çerçevesini ve Python için Google Cloud Translation API istemci kitaplığını kullanır. pip 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ünmeli ve sonraki adımlar için bazı istemler sağlamalıdı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ılabildiğinden, dağıtım çıktınızda sağlanan URL'den (proje kimliğinizi içerir) erişebilirsiniz:

da28f951c33a2c3d.png

Çalıştığını görmek için bir şeyi çevirin.

d911984d15dd5ef9.png

8. Sonuç

Tebrikler! Cloud Translation API'yi etkinleştirmeyi, gerekli kimlik bilgilerini almayı ve basit bir web uygulamasını Python 2 App Engine'e dağıtmayı öğrendiniz. Bu dağıtım hakkında daha fazla bilgiyi depodaki bu tablodan edinebilirsiniz.

Temizleme

Cloud Translation API, ayda belirli bir sayıda çevrilmiş karakteri ücretsiz olarak kullanmanıza olanak tanır. App Engine'in ücretsiz kotası vardır. Aynı durum Cloud Functions ve Cloud Run için de geçerlidir. Bu sınırlardan herhangi birinin aşılması durumunda sizden ücret alınır. Bir sonraki codelab'e geçmeyi planlıyorsanız uygulamanızı kapatmanız gerekmez.

Ancak henüz bir sonraki eğitime geçmeye hazır değilseniz veya internetin yeni dağıttığınız uygulamayı keşfetmesinden endişeleniyorsanız ücretlendirilmemek için App Engine uygulamanızı devre dışı bırakın, Cloud Function'ınızı silin veya Cloud Run hizmetinizi devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda yeniden etkinleştirebilirsiniz. Öte yandan, bu uygulamaya veya diğer codelab'lere devam etmeyecek ve her şeyi tamamen silmek istiyorsanız projenizi kapatabilirsiniz.

Ayrıca, Google Cloud sunucusuz bilgi işlem platformuna dağıtım yapıldığında küçük derleme ve depolama maliyetleri oluşur. Cloud Build ve Cloud Storage'ın kendi ücretsiz kotaları vardır. Daha fazla şeffaflık için Cloud Build, uygulama görüntünüzü oluşturur. Bu görüntü daha sonra Cloud Container Registry'de veya onun halefi olan Artifact Registry'de depolanır. Bu görselin depolanması ve hizmete aktarılması için ağ çıkışı, bu kotanın bir kısmını kullanır. Ancak, böyle bir ücretsiz katmanın olmadığı 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ğitimi tamamlayarak edindiğiniz bilgileri artırmak için ek okuma materyallerinin yanı sıra önerilen alıştırmaları bulabilirsiniz.

Ek çalışma

Translation API ile ilgili biraz deneyim kazandığınıza göre, becerilerinizi daha da geliştirmek için ek alıştırmalar yapalım. Öğrenme rotanıza devam etmek için örnek uygulamamızı aşağıdaki şekilde değiştirin:

  1. Yerel olarak çalıştırmak veya Google Cloud sunucusuz bilgi işlem platformlarına dağıtmak için bu codelab'in diğer tüm sürümlerini tamamlayın (repo README'ye 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 listesini içerecek ş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 kodu ise Apache 2 lisansı ile lisanslanmıştır.