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:
- Yerel Flask sunucusu (Python 2)
- Yerel Flask sunucusu (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- Cloud Functions (Python 3)
- Cloud Run (Docker aracılığıyla Python 2)
- Cloud Run (Docker aracılığıyla Python 3)
- Cloud Run (Cloud Buildpacks aracılığıyla Python 3)
Bu codelab, bu uygulamayı yukarıdaki kalın platformlara dağıtmaya odaklanmaktadır.
Öğrenecekleriniz
- Google Cloud API'lerini, özellikle Cloud Translation API'yi (gelişmiş/v3) kullanma
- Temel bir web uygulamasını yerel olarak çalıştırın veya Cloud sunucusuz bilgi işlem platformuna dağıtın.
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?
Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve şartlar
Yönlendirmesiz ortam kurulumu
- 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.



- 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_IDolarak 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.
- 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
Bu bölümde, Google API'lerini genel olarak nasıl etkinleştireceğinizi öğreneceksiniz. Örnek uygulamamız için Cloud Translation API ve Cloud Functions hizmetini 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.

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:

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

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:
- Google Cloud/GCP: Her ürün farklı şekilde faturalandırılır ve genellikle vCPU döngüsü, depolama alanı tüketicisi, bellek kullanımı veya kullanıma göre ödeme üzerinden ücretlendirilir. Ücretsiz katman bilgilerini yukarıda bulabilirsiniz.
- Google Haritalar: Bir API paketi içerir ve kullanıcılara genel olarak aylık 200 ABD doları değerinde ücretsiz kredi sunar.
- Google Workspace (eski adıyla G Suite) API'leri: Workspace aylık abonelik ücreti kapsamında ücretsiz kullanım (belirli sınırlara kadar) sunar. Bu nedenle, Gmail, Google Drive, Takvim, Dokümanlar, E-Tablolar ve Slaytlar API'lerinin kullanımı için doğrudan faturalandırma yapılmaz.
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 Cloud Translation API ile Cloud Functions hizmetini (daha önce yapmadıysanız) etkinleştirin. İkincisi uygulamamız tarafından kullanılacağı için, birincisi ise Cloud Function dağıtacağınız için gereklidir. İsterseniz komut satırından da yapabilirsiniz. Bu durumda şu komutu verin:
gcloud services enable cloudfunctions.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:

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)))
- İçe aktarmalar, Flask işlevselliğini,
google.authmodülünü ve Cloud Translation API istemci kitaplığını getirir. - 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. - En alttaki büyük
ifbloğ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:
- İsteklerin
local_requestdeğ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. - Formun temel değişkenlerini sıfırlayın. Bu, öncelikle GET istekleri içindir. POST isteklerinde bu verilerin yerini alacak veriler bulunur.
- 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.
- 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
Çeviri hizmetinizi (Python 3) Cloud Functions'a dağıtmak için şu komutu çalıştırın:
gcloud functions deploy translate --runtime python37 --trigger-http --allow-unauthenticated
Çıkış aşağıdaki gibi görünmeli ve sonraki adımlar için bazı istemler sağlamalıdır:
$ gcloud functions deploy translate --runtime python37 --trigger-http --allow-unauthenticated Deploying function (may take a while - up to 2 minutes)...⠹ For Cloud Build Stackdriver Logs, visit: https://console.cloud.google.com/logs/viewer?project=PROJECT_ID&advancedFilter=resource.type%3Dbuild%0Aresource.labels.build_id%3D7e32429d-ec36-422c-8a8b-43c4d661a15c%0AlogName%3Dprojects%2FPROJECT_ID%2Flogs%2Fcloudbuild Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: 7e32429d-ec36-422c-8a8b-43c4d661a15 entryPoint: translate httpsTrigger: securityLevel: SECURE_OPTIONAL url: https://REGION-PROJECT_ID.cloudfunctions.net/translate ingressSettings: ALLOW_ALL labels: deployment-tool: cli-gcloud name: projects/PROJECT_ID/locations/REGION/functions/translate runtime: python37 serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-873f8448-838f-4eb2-beda-3e200a1420d/cb1cbdca-34eb-41d0-88d6-c276d5205fb.zip?GoogleAccessId=service-104690130103@gcf-admin-robot.iam.gserviceaccount.com&Expires=1619139674 status: ACTIVE timeout: 60s updateTime: '2021-04-23T00:32:58.065Z' versionId: '3'
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. URL, seçtiğiniz bölgeye ve Cloud proje kimliğinize göre değişen https://REGION-PROJECT_ID.cloudfunctions.net/translate gibi görünmelidir.

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

7. Sonuç
Tebrikler! Cloud Translation API'yi etkinleştirmeyi, gerekli kimlik bilgilerini almayı ve Cloud Functions'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:
- 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).
- Bu eğitimi başka bir programlama dili kullanarak tamamlayın.
- Bu uygulamayı farklı kaynak veya hedef dilleri destekleyecek şekilde değiştirin.
- 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
- App Engine ana sayfası
- App Engine belgeleri
- Python 3 App Engine hızlı başlangıç kılavuzu
- App Engine için varsayılan hizmet hesapları
- Python 2 App Engine (Standart) çalışma zamanı
- Python 3 App Engine (Standart) çalışma zamanı
- Python 2 ve 3 App Engine (Standart) çalışma zamanları arasındaki farklar
- Python 2'den 3'e App Engine (Standart) taşıma kılavuzu
Google Cloud Functions
- Cloud Functions ana sayfası
- Cloud Functions belgeleri
- Python Cloud Functions hızlı başlangıç kılavuzu
- Cloud Functions için varsayılan hizmet hesapları
Google Cloud Run
- Cloud Run ana sayfası
- Cloud Run belgeleri
- Python Cloud Run hızlı başlangıç kılavuzu
- Cloud Run için varsayılan hizmet hesapları
Google Cloud Buildpacks, Container Registry, Artifact Registry
- Cloud Buildpacks duyurusu
- Cloud Buildpacks deposu
- Cloud Artifact Registry ana sayfası
- Cloud Artifact Registry belgeleri
- Cloud Container Registry ana sayfası
- Cloud Container Registry belgeleri
Google Cloud Translation ve Google ML Kit
- Cloud Translation ana sayfası
- Cloud Translation belgeleri
- Translation API fiyatlandırması sayfası
- Tüm Cloud AI/ML "yapı taşı" API'leri
- Google ML Kit (Cloud AI/ML API'lerinin mobil cihazlar için alt kümesi)
- Google ML Kit Translation API
Diğer Google Cloud ürünleri/sayfaları
- Google Cloud Python desteği
- Google Cloud istemci kitaplıkları
- Google Cloud "Her Zaman Ücretsiz" katmanı
- Tüm Google Cloud belgeleri
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.