Temel bir "Google Çeviri" dağıtın Python 2 Cloud Run'da (Docker) 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

Cloud API'lerini etkinleştirme

Bu bölümde, Google API'lerini genel olarak nasıl etkinleştireceğinizi öğreneceksiniz. Örnek uygulamamız için Cloud Translation API, Cloud Run ve Cloud Artifact Registry'yi etkinleştireceksiniz.

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 API Yöneticisi'ne gidin ve Cloud Translation API, Cloud Run ve Cloud Artifact Registry'yi (daha önce yapmadıysanız) etkinleştirin. Uygulamamız bu özelliği kullandığı için etkinleştirmeniz gerekir. Cloud Run hizmetinizi başlatmak için dağıtılmadan önce kapsayıcı görüntülerimiz burada depolandığından ikincisini etkinleştirirsiniz. Bu nedenle bunu etkinleştirmeniz gerekir. Bunların hepsini gcloud aracıyla etkinleştirmeyi tercih ederseniz terminalinizden bunun yerine aşağıdaki komutu verin:

gcloud services enable artifactregistry.googleapis.com run.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. Hizmeti dağıtma

Artık şu komutu çalıştırarak çeviri hizmetinizi Cloud Run'a dağıtmaya hazırsınız:

gcloud run deploy translate --source . --allow-unauthenticated --platform managed

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

$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed
Please specify a region:
 [1] asia-east1
 [2] asia-east2
. . . (other regions) . . .
 [28] us-west4
 [29] cancel
Please enter your numeric choice:  REGION_CHOICE

To make this the default region, run `gcloud config set run/region REGION`.

Deploying from source requires an Artifact Registry repository to
store build artifacts. A repository named [cloud-run-source-deploy] in
 region [REGION] will be created.

Do you want to continue (Y/n)?

This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]"

Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION]
✓ Building and deploying... Done.
  ✓ Creating Container Repository...
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b
  9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER].
  ✓ Creating Revision...
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic.
Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app

Uygulamanız artık dünya genelinde kullanılabildiğinden, dağıtım çıktısında gösterildiği gibi proje kimliğinizi içeren URL'den erişebilirsiniz:

169f6edf5f7d2068.png

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

31554e71cb80f1b4.png

7. Sonuç

Tebrikler! Cloud Translation API'yi etkinleştirmeyi, gerekli kimlik bilgilerini almayı ve Python 2 Cloud Run'a basit bir web uygulaması 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.

8. 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.