Temel bir "Google Çeviri" dağıtın App Engine, Cloud Functions ve Cloud Run'da Express.js uygulaması

1. Genel Bakış

Bu codelab serisi (kendi kendine hızlandırılabilen, uygulamalı eğiticiler), geliştiricilerin uygulamalarını dağıtırken sahip oldukları çeşitli seçenekleri anlamalarına yardımcı olmayı amaçlar. Google Cloud Translation API'yi basit bir web uygulamasında nasıl kullanacağınızı öğreneceksiniz. Bu uygulama yerel olarak çalıştırılabilir veya Cloud sunucusuz bir bilgi işlem platformuna (App Engine, Cloud Functions ya da Cloud Run) dağıtılabilir.

Bu JavaScript eğitimini Ekspres.js web çerçevesini kullanarak Node.js ile yapacaksınız. Ayrıca sunucusuz platformlarımızdan Google Cloud API'lerine nasıl erişeceğinizi öğreneceksiniz. Bu uygulamanın tüm sürümleri "nebulous sunucusuz"dan alınmıştır açık kaynak kod deposu, bu uygulamanın Python sürümünü ve bağımsız codelab'leri içerir. Depo, geliştiricilere sunucusuz platformlarımızdan bulut dışı Google API'lerine nasıl erişeceklerini gösteren benzer uygulamalar da barındırır.

Bu codelab'de, bu uygulamanın yukarıdaki kalın yazı tipi platformlara dağıtımına odaklanılmaktadır.

Neler öğreneceksiniz?

Gerekenler

  • Etkin bir Cloud Faturalandırma hesabı olan bir Google Cloud projesi
  • Yerel olarak çalıştırmak için yüklenmiş bir web çerçevesi ( Python eğiticisini hazırlayanlar için Flask, JavaScript/Node.js eğitimini yapanlar için Express)
  • Google Cloud dağıtımları için etkinleştirilen en az bir sunucusuz işlem platformu
  • Temel programlama becerileri (Python veya JavaScript/Node.js)
  • Temel işletim sistemi komutlarını çalışma bilgisi

Anket

Bu eğiticiden nasıl yararlanacaksınız?

Okuyun ve alıştırmaları tamamlayın Salt okuma

Python veya Node.js geliştirme deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

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

Acemi Orta Yeterli

2. Kurulum ve şartlar

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp 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 dizesidir ve bunu istediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de, Proje Kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" takip etmeniz gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü 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 çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmayla karşılaşmamak için kaynakları kapatmak istiyorsanız tüm "temizleme" işlemlerini uygulayın buradaki talimatları uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

3. Translation API'yi etkinleştir

Bu bölümde, Google API'lerinin genel olarak nasıl etkinleştirileceğini öğreneceksiniz. Örnek uygulamamız için Cloud Translation API'yi etkinleştirirsiniz. Örnek uygulamayı hangi platformlara dağıtmak istediğinize bağlı olarak App Engine, Cloud Functions ve/veya Cloud Run'ı (ve Cloud Artifact Registry'yi) de etkinleştireceksiniz.

Google API'lerini etkinleştirme

Giriş

Uygulamanızda kullanmak istediğiniz Google API'sinden bağımsız olarak, bunların etkinleştirilmesi gerekir. API'ler komut satırından veya Cloud Console'dan etkinleştirilebilir. API'leri etkinleştirme süreci aynıdır. Bu nedenle, bir API'yi etkinleştirdikten sonra aynı şekilde başka bir API de yapabilirsiniz.

1. Seçenek: gcloud komut satırı arayüzü (Cloud Shell veya yerel ortam)

API'leri Cloud Console'dan etkinleştirmek daha yaygın olsa da bazı geliştiriciler her şeyi komut satırından yapmayı tercih eder. Bunu yapmak için bir API'nin "hizmet adını" aramanız gerekir. Bu URL şuna benziyor: SERVICE_NAME.googleapis.com. Bunları Desteklenen ürünler grafiğinde bulabilir veya Google Discovery API ile programlı bir şekilde sorgulayabilirsiniz.

Bu bilgilere sahip olduğunuzda, 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 şekilde etkinleştirebilirsiniz:

gcloud services enable SERVICE_NAME.googleapis.com

1. Örnek: Cloud Vision API'yi etkinleştirme

gcloud services enable vision.googleapis.com

2. Örnek: Google App Engine'i etkinleştirme

gcloud services enable appengine.googleapis.com

3. Örnek: Tek bir istekle birden çok API'yi etkinleştirme. Örneğin, bu codelab'de Cloud Translation API'yi kullanarak bir uygulamayı App Engine, Cloud Functions ve Cloud Run'a dağıtan görüntüleyiciler varsa komut satırı şöyle olur:

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

Bu komut App Engine, Cloud Functions, Cloud Run ve Cloud Translation API'yi etkinleştirir. Ayrıca Cloud Artifact Registry'yi etkinleştirir çünkü container görüntülerinin Cloud Run'a dağıtılabilmesi için Cloud Build sistemi tarafından kaydedilmesi gerekir.

2. seçenek: Cloud Console

Google API'lerini API Yöneticisi'nden de etkinleştirebilirsiniz. Cloud Console'da API Yöneticisi'ne gidip Kitaplık'ı seçin.

fb0f1d315f122d4a.png

Eşleşen sonuçları görmek için arama çubuğuna bir API'nin adını yazmaya başlayın:

2275786a24f8f204.png

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

7960a6752a1da767.png

Hangi Google API'sini kullanmak istediğinize bakılmaksızın, tüm API'leri etkinleştirme süreci benzerdir.

Maliyet

Birçok Google API'si ücretsiz olarak kullanılabilir. Ancak Google Cloud ürünlerinin ve API'lerinin çoğunun kullanımı için ücret ödemeniz gerekir. Cloud APIs'i etkinleştirirken, etkin bir faturalandırma hesabı girmeniz istenebilir. Ancak bazı Google Cloud ürünlerinde "Daima Ücretsiz" katmanını kullanın.

Yeni GCP kullanıcıları Ücretsiz Deneme'den yararlanabilir. Şu anda ilk 90 gün için 300 ABD doları geçerlidir. Codelab'ler genellikle herhangi bir ücret ödemez veya herhangi bir ücret ödemez. Bu nedenle, özellikle tek seferlik bir teklif olduğundan, test sürüşü yapmaya hazır olana kadar Ücretsiz Deneme'yi ertelemenizi öneririz. Ücretsiz Katman kotalarının süresi dolmaz ve bu kotalar, Ücretsiz Deneme'yi kullanıp kullanmadığınıza bakılmaksızın uygulanır.

Kullanıcılar, etkinleştirmeden önce API'lerin fiyatlandırma bilgilerine (ör. Cloud Vision API fiyatlandırma sayfası) başvurmalıdır. Özellikle API'nin ücretsiz katmanı olup olmadığını ve varsa ne olduğunu belirtmesi gerekir. Toplamda belirtilen günlük veya aylık sınırları aşmadığınız sürece herhangi bir ücret ödemezsiniz. Fiyatlandırma ve ücretsiz katmanlar, Google ürün grubu API'leri arasında farklılık gösterir. Örnekler:

Farklı Google ürünleri farklı şekilde faturalandırılır. Bu nedenle, bu bilgiler için uygun dokümanlara başvurduğunuzdan emin olun.

İstenen hizmetlerin etkinleştirildiğinden emin olma

API Yöneticisi'nde, yukarıda belirtildiği şekilde Cloud Translation API'yi kullanın. Sunucusuz platformları komut satırından etkinleştirmediyseniz bu işlemi Cloud Console'daki ilgili kontrol panellerinin her birinden yapabilirsiniz: App Engine, Cloud Functions, Cloud Run.

API'leri Cloud Console'dan etkinleştirmek görsel olarak bilgilendirici olsa da, tüm hizmetlerin etkinleştirilmesi birkaç saniye süren gcloud aracını kullanmak daha hızlıdır:

$ gcloud services enable appengine.googleapis.com \
cloudfunctions.googleapis.com artifactregistry.googleapis.com \
run.googleapis.com translate.googleapis.com
Operation "operations/acf.p2-xxxxxx035451-704918f2-5470-4436-9bdd-c3b204yyyyyy" finished successfully.

Maliyetler hakkında daha fazla bilgi

Maliyetlerle ilgili yukarıdaki bölüm, Google API'leri genelinde geneldir. Bu eğitimde biraz daha ayrıntıya değinelim. Aylık kotası, genel olarak "Daima Ücretsiz" sekmesinde gösterilmese de katman özeti sayfasındaki Translation API'nin fiyatlandırma sayfasında tüm kullanıcıların aylık olarak sabit miktarda çevrilmiş karakter alacağı belirtilir. Bu eşiğin altında kalırsanız API sizden herhangi bir ücret almaz. Google Cloud sunucusuz platformlarının kullanımıyla ilgili maliyetler hakkında daha fazla bilgi için Deponun Maliyetler bölümüne göz atın. "Temizlik" bölümünde, bu codelab tamamlandıktan sonra faturalandırmanın nasıl durdurulacağı açıklanacaktır.

4. Örnek uygulama kodunu alma

ZIP'i indir veya depoyu klonla

  • ZIP dosyasını indirin veya git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git ile depoyu klonlayın
  • Yerel bir geliştirme ortamınız yoksa ve bu eğiticiyi Cloud Shell'de yapmak istiyorsanız depoyu aynı git clone komutuyla klonlayabilirsiniz.
  • ZIP dosyasına aşağıdaki ekran görüntüsünde gösterildiği gibi yeşil Kod düğmesinden de erişebilirsiniz:

5cd6110c4414cf65.png

Artık her şeye sahip olduğunuza göre, bu özel eğiticiyi uygulamak için klasörün tam bir kopyasını oluşturun. Çünkü bu işlem büyük olasılıkla dosyaların silinmesini veya değiştirilmesini gerektirecektir. Farklı bir dağıtım yapmak istiyorsanız orijinali kopyalayarak en baştan başlayabilirsiniz. Böylece, tekrar klonlamak veya indirmek zorunda kalmazsınız.

5. Node.js ortamını onaylayın

Node.js ortamınızı ayarlamak için aşağıdakileri yapın:

  1. Düğüm (>=10) ve NPM (>=6) güncel sürümlerinin yüklü olduğundan emin olun
  2. Depo'yu klonladığınız (veya ZIP dosyasını açtığınız) yere gidip cloud/nodejs klasörüne gidin
  3. package.json adlı cihazın mevcut olduğunu onaylayın ve ardından npm install uygulamasını çalıştırın

Yukarıdaki 1. adımda, komut satırında hangi sürümlerin olduğunu doğrulayabilirsiniz:

$ node -v
v17.0.1
$ npm -v
8.1.0

6. Örnek uygulama turu

Örnek uygulama, kullanıcılardan İngilizce metin girmelerini ve söz konusu metnin İspanyolca karşılığını almalarını isteyen basit bir Google Çeviri türevidir.

package.json yapılandırma dosyası, uygulama için hangi üçüncü taraf paketlerin gerekli olduğunu gösterir (paket sürümlerinin burada listelenenlerin ötesinde güncellenebileceğini unutmayın):

{
  "name": "cloud-nebulous-serverless-nodejs",
  "version": "0.0.1",
  "description": "Nebulous Serverless sample app",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test/test_neb.js"
  },
  "author": "Google LLC",
  "license": "Apache-2.0",
  "dependencies": {
    "@google-cloud/translate": "^6.3.1",
    "express": "^4.17.1",
    "nunjucks": "^3.2.3"
  },
  "devDependencies": {
    "mocha": "^9.1.3",
    "supertest": "^6.1.6"
  }
}

Şimdi index.js dosyasını açın, böylece işleyiş şeklini görebiliriz. Lisanslamayla ilgili yorum yapılan satırlar atlanırsa, üstte ve altta şu şekilde görünür:

const express = require('express');
const nunjucks = require('nunjucks');
const {TranslationServiceClient} = require('@google-cloud/translate');

const app = express();
app.use(express.urlencoded({extended: true}));
nunjucks.configure('templates', {autoescape: true, express: app});
const TRANSLATE = new TranslationServiceClient();

const PORT = process.env.PORT || 8080;
const SOURCE = ['en', 'English'];
const TARGET = ['es', 'Spanish'];
let parent;
TRANSLATE.getProjectId().then(result => {
    parent = `projects/${result}`;
});


if (!process.env.FUNCTION_TARGET) {
    app.listen(PORT, () =>
        console.log(`Listening on port ${PORT}`)
    );
}

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

app.all('/', translate);
module.exports = {
    app
};
  1. require, çerçeve ve şablon oluşturma işlevleri ile Cloud Translation API istemci kitaplığını sağlar.
  2. Genel değişkenler web uygulamasını, Cloud projesi kimliğini, Translation API istemcisini ve üst "konum yolunu" temsil eder. Translation API çağrıları ve SOURCE ile TARGET dilleri için geçerlidir. Bu durumda, dil İngilizce (en) ve İspanyolcadır (es) ancak bu değerleri Cloud Translation API tarafından desteklenen diğer dil kodlarıyla değiştirebilirsiniz.
  3. Her bir çiftin ilk öğesi (SOURCE ve TARGET) dil kodu, ikincisi ise dil adıdır (ve API ile ilgisi olmadığından yalnızca görüntüleme amacıyla kullanılır).
  4. Alttaki birkaç satır, tüm HTTP isteklerini translate() hedefine göndermek ve ardından app uygulama nesnesini dışa aktarmak içindir.

Son olarak, index.js öğesinin ortasında, uygulamanın merkezinde yer alan translate() işlevi yer alır:

async function translate(req, rsp) {
    let text = null;
    let translated = null;
    if (req.method === 'POST') {
        text = req.body.text.trim();
        if (text) {
            const data = {
                contents: [text],
                parent: parent,
                targetLanguageCode: TARGET[0]
            };
            const [response] = await TRANSLATE.translateText(data);
            translated = response.translations[0].translatedText;
        }
    }
    const context = {
        orig:  {text: text, lc: SOURCE},
        trans: {text: translated, lc: TARGET}
    };
    rsp.render('index.html', context);
}

Birincil işlev, kullanıcı girişini alıp işin zor kısmını yapması için Translation API'yi çağırma görevini üstlenir. Bunları ayrıntılı şekilde inceleyelim:

  1. Formun temel değişkenlerini sıfırlayın. POST isteklerinde bunların yerini alan veriler olacağı için bu, öncelikle GET istekleri içindir.
  2. Bu bir POST ise çevrilecek metni alın ve boş değilse API meta veri gereksinimini temsil eden bir JSON yapısı oluşturun. Ardından hizmet için API'yi çağırın.
  3. SOURCE[0] dilini API'ye belirli bir İngilizce kaynağa iletmedik. Kaynak dili bırakmadığınızda API'nin kaynak dili otomatik olarak algılamasını istersiniz (Dokümanlardaki sourceLanguageCode bölümüne bakın).
  4. Yine de, gerçek sonuçları (POST) veya veri yok (GET) şablon bağlamına göre biçimlendirin ve oluşturun.

Uygulamanın görsel kısmı, index.html şablonunun içindedir. Daha önce çevrilen sonuçları (aksi takdirde boş) ve ardından çevrilecek şeyi isteyen formu gösterir:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<style>
body {
  font-family: Verdana, Helvetica, sans-serif;
  background-color: #DDDDDD;
}
</style>
<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>

Eğiticinin geri kalanında, bu uygulamayı dağıtmak ve çalıştırmak için dört seçenekten birini veya tümünü belirleyebilirsiniz. Tüm dağıtımlar isteğe bağlıdır, yani herhangi birini veya hepsini yapabilirsiniz.

  1. Hizmeti yerel olarak çalıştırma
  2. App Engine'e dağıtma (standart ortam)
  3. Cloud Functions'a dağıtma
  4. Cloud Run'a dağıt

7. 1. SEÇENEK: Hizmeti yerel olarak çalıştırın

Codelab'in bu bölümü yalnızca yerel olarak çalıştırma içindir. Yalnızca buluta dağıtım yapıyorsanız sonraki bölüme geçin.

Örnek uygulamayı yerel olarak çalıştırmak için uygulanması gereken üç ayrı adım vardır:

  1. Hizmet hesabı oluşturma
  2. Hizmet hesabı ortak/özel anahtar çifti oluşturma
  3. Kimlik bilgileri dosyasını ve uygulama koduyla paketi indir
  4. Hizmeti başlat

Hizmet hesapları hakkında bilgi

Hizmet hesapları, kullanıcılara ait olmayan verilere erişirken bulut tabanlı uygulamalarda Google API'lerine erişmek için kullanılan güvenlik mekanizmasıdır. Buluta dağıtım yaparken, kullanıcıların Cloud'a ilk katılım süresini kısaltmak için tüm Google Cloud işlem platformları (sunucusuz ve aksi takdirde) varsayılan hizmet hesapları sağlar.

Varsayılan hizmet hesapları, "bütünlemeleri önlemek" için çok çeşitli izinlere sahiptir. Ancak bir üretim hizmetini kullanıma sunmaya hazırlanırken kullanıcılara "en az ayrıcalık" en iyi uygulamasını kesinlikle öneririz. Ancak uygulamanızın düzgün çalışması için yalnızca yeterli izinlere sahip kullanıcı tarafından yönetilen hizmet hesapları oluşturmak. Buna bakılmaksızın, yerel dağıtımlar için varsayılan hizmet hesabı yoktur. Bu nedenle, bir hizmet hesabı ile birlikte bir hizmet hesabı anahtarı (aslında bir ortak/özel anahtar çifti) oluşturmanız ve bu kimlik bilgilerini uygulama kodunda kullanılabilir hale getirmeniz gerekir.

Hizmet hesabı anahtar çifti oluşturma ve kimlik bilgileri dosyasını indirme

Yerel olarak çalıştırmak üzere bir hizmet hesabı ve ortak/özel anahtar çifti oluşturmak için bu sayfadaki talimatları uygulayın. Hizmet hesabı anahtarını oluştururken istenen izinleri vermeniz istenir. API'ye başarıyla erişebilmek için roles/cloudtranslate.user seçeneğini belirlediğinizden emin olun.

Anahtar çiftiniz başarıyla oluşturulduktan sonra hizmet hesabı anahtar dosyasını indirmeniz istenir. Dosyayı credentials.json olarak adlandırın ve uygulamanın üst düzey klasörüne taşıyın. Şimdi Google Cloud SDK'ya bu kimlik bilgilerini kullanmasını söyleyin: GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini bu dosyayı işaret edecek şekilde ayarlayın. Bu işlemle ilgili daha fazla bilgiyi, hizmet hesaplarının kullanımını kapsayan bu sayfada da bulabilirsiniz.

Hizmeti başlatma

Devam etmeye hazır olduğunuzda aşağıdaki komutla Express sunucuyu yerel olarak başlatın:

$ npm start

> cloud-nebulous-serverless-nodejs@0.0.1 start
> node index.js

Listening on port 8080

localhost:8080 adresinden bağlanmak için web tarayıcınıza gidin. Aşağıdakine benzer bir sonuç görürsünüz:

adc6665b7ae13c40.png

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

fc154326080bf14f.png

İstediğiniz gibi olduğunda, ^C (control-C) ile sunucudan çıkın ve çıkış yapın. Tebrikler, bir yerel dağıtımı çalıştırın. İyi haberlerimiz var: Buluta dağıtım çok daha kolay.

Sorun giderme

Çeviri isteğinde bulunurken böyle bir hata mı alıyorsunuz?

node:fs:2486
      handleErrorFromBinding(ctx);
      ^

Error: The file at credentials.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/tmp/nodejs/credentials.json'
    . . .

ÇÖZÜM: Bu hata, hizmet hesabı oluşturma ve credentials.json ortak/özel anahtar çifti dosyasını indirmediğiniz anlamına gelir. Lütfen şuraya geri dönün: " 1. SEÇENEK: Hizmeti yerel olarak çalıştırın" ve devam etmeden önce bu işlemi tamamlayıp cred'leri ana klasöre yükleyin.

8. 2. SEÇENEK: App Engine'e dağıtın (standart ortam)

Codelab'in bu bölümü yalnızca Node App Engine'e dağıtım yapmak içindir. Bu içerikler ilginizi çekmiyorsa bir sonraki bölüme geçin.

Bu dağıtım, App Engine'e tek satırla hangi çalışma zamanının kullanılacağını bildiren app.yaml yapılandırma dosyasını kullanır:

runtime: nodejs16

app.yaml dosyası, Cloud Functions veya Cloud Run tarafından kullanılmaz. App Engine'i kullanmayı düşünmüyorsanız bu dosya güvenli bir şekilde silinebilir. App Engine'e dağıtıma hazır olduğunuzda şu komutu çalıştırın:

$ gcloud app deploy

Bölge seçildikten sonra gcloud app deploy çıkışı çok daha az ayrıntılı olur ve şu şekilde görünmelidir:

Services to deploy:

descriptor:                  [/private/tmp/nodejs/app.yaml]
source:                      [/private/tmp/nodejs]
target project:              [PROJECT_ID]
target service:              [default]
target version:              [2021...]
target url:                  [https://PROJECT_ID.REG_ABBR.appspot.com]
target service account:      [App Engine default service account]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 2 files to Google Cloud Storage                          ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...⠏WARNING: *** Improve build performance by generating and committing package-lock.json.

Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REG_ABBR.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

To take a quick anonymous survey, run:
  $ gcloud survey

Uygulamanız artık dünyanın her yerinde kullanılabilir. Buna göre, proje kimliğinizi içeren URL'den de erişebilirsiniz. Ayrıca, yerel Express sürümüne benzer bir çıkış görürsünüz. Ancak uygulamanızın bulutta çalıştığını ve tüm dünyada kullanıma sunulduğunu bilmeniz gerekir:

da28f951c33a2c3d.png

İstek gönderirseniz diğer tüm dağıtımlarla aynı şekilde çalıştığını görürsünüz.

9. 3. SEÇENEK: Cloud Functions'a dağıtma

Codelab'in bu bölümü yalnızca Node Cloud Functions'a dağıtım yapmak içindir. Bu içerikler ilginizi çekmiyorsa bir sonraki bölüme geçin.

Cloud Functions'da yapılandırma dosyası bulunmaz. Bu nedenle, Cloud Functions'a dağıtım yapmaya hazır olduğunuzda şu komutu çalıştırın:

$ gcloud functions deploy translate \
  --runtime nodejs16 \
  --entry-point app \
  --trigger-http \
  --region REGION \
  --allow-unauthenticated

GCP projenizde varsayılan bir REGION olabilir ancak işlevinizi belirli bir bölgeye dağıtmak için --region işaretini kullanabilirsiniz. Cloud Functions, diğer Cloud ürünlerini kullanmanızı istemez. Seçtiğiniz bölgeden bağımsız olarak gcloud functions deploy çıkışı aşağıdaki gibi görünmelidir:

Deploying function (may take a while - up to 2 minutes)...⠛
For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/15ac7fc1-731d-4f3b-bc15-8f2614xxxxxx?project=062269xxxxxx
Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
buildId: aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
buildName: projects/062269xxxxxx/locations/REGION/builds/aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
entryPoint: app
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: nodejs16
serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-01de94c2-6eb4-4c49-aaff-09276cdb7ae9/a1db9f2d-3511-414b-aeeb-de6042xxxxxx.zip
status: ACTIVE
timeout: 60s
updateTime: '2021...'
versionId: '...'

Uygulamanız artık tüm dünyada kullanıma sunulduğuna göre, dağıtım çıktısında ("httpsTrigger/url" altında) gösterildiği gibi, proje kimliğinizi içeren URL'den erişebilirsiniz. URL şuna benzer: https://REGION-PROJECT_ID.cloudfunctions.net/translate. Bu değer, seçtiğiniz bölgeye ve Cloud proje kimliğinize göre değişir.

518f1c3165f2096d.png

10. 4. SEÇENEK: Cloud Run'a dağıtma

Codelab'in bu bölümü yalnızca Cloud Run'a dağıtım yapmak içindir. Bu içerikler ilginizi çekmiyorsa bir sonraki bölüme geçin.

Cloud Run'da yapılandırma dosyası bulunmadığından Cloud Run'a dağıtım yapmaya hazır olduğunuzda aşağıdaki talimatları uygulayın.

Ş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:

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

Cloud Build, uygulamanızı yerel olarak çalıştırırken kullandığınıza benzer şekilde uygulamalarınızı Cloud Run'a paketler. Node.js kullanıcıları için npm install ve npm start çalıştırır. Python için pip install -r requirements.txt çalıştırır ve uygulamayı, Procfile içindeki talimatlar doğrultusunda başlatır. (Aynı durum Cloud Buildpacks tarafından desteklenen diğer tüm diller için de geçerlidir.) Derleme işlemi tamamlandığında uygulamanız kullanıma hazır hale gelir.

Uygulamanız bunun ardından (bölgesel olarak dağıtılır ancak) genel olarak kullanıma sunulur ve uygulamaya, dağıtım çıkışında gösterildiği gibi proje kimliğinizi içeren URL'den ("Service URL" altında) erişilebilir.

169f6edf5f7d2068.png

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

31554e71cb80f1b4.png

11. Sonuç

Tebrikler! Cloud Translation API'yi etkinleştirmeyi ve kullanmayı, gerekli kimlik bilgilerini almayı ve basit bir web uygulamasını App Engine, Cloud Functions ve/veya Cloud Run'a yerel olarak ifade etmek için nasıl dağıtacağınızı öğrendiniz. Daha fazla bilgi edinmek veya bu uygulamanın diğer sürümlerinin yanı sıra diğer codelab'lere erişmek için lütfen depo klasörüne göz atın.

Temizleme

Cloud Translation API, aylık sabit sayıda karakter çevirisini ücretsiz olarak yapmanıza olanak tanır. App Engine'de ücretsiz kota da vardır. Aynı durum Cloud Functions ve Cloud Run için de geçerlidir. Bu iki sınır aşılırsa ücret ödemeniz gerekir. Bir sonraki codelab'e geçmeyi planlıyorsanız uygulamanızı kapatmanız gerekmez.

Ancak bir sonraki eğitime henüz geçmeye hazır değilseniz veya internetin yakın zamanda dağıttığınız uygulamayı bulduğundan endişeleniyorsanız ücret alınmaması için App Engine uygulamanızı devre dışı bırakın, Cloud Functions işlevinizi silin veya Cloud Run hizmetinizi devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda projeyi yeniden etkinleştirebilirsiniz. Öte yandan, bu uygulamayı veya diğer codelab'leri kullanmaya devam etmeyecekseniz ve her şeyi tamamen silmek istiyorsanız projenizi kapatabilirsiniz.

Ayrıca Google Cloud sunucusuz bilgi işlem platformuna dağıtım yapmak küçük derleme ve depolama maliyetleri gerektirir. Cloud Build'in ve Cloud Storage'ın kendi ücretsiz kotası vardır. Cloud Build, daha fazla şeffaflık için uygulama görüntünüzü derler. Bu görüntü daha sonra Cloud Container Registry veya Artifact Registry'nin yerine geçer. O görüntünün depolanması, bu görüntünün hizmete aktarılması sırasında ağ çıkışının yanı sıra bu kotanın bir kısmını kullanır. Ancak, bu kadar ücretsiz katmanın olmadığı bir bölgede yaşıyor olabilirsiniz. Bu nedenle, olası maliyetleri en aza indirmek için depolama alanı kullanımınız konusunda dikkatli olun.

12. Ek kaynaklar

İlerleyen bölümlerde, bu eğitimi tamamladıktan sonra edindiğiniz bilgileri artırmak için önerilen alıştırmaların yanı sıra ek okuma materyalleri bulabilirsiniz.

Ek çalışma

Artık Translation API'yi tecrübe ettiğinize göre becerilerinizi daha da geliştirmek için ek alıştırmalar yapalım. Öğrenme rotanıza devam etmek için örnek uygulamamızda değişiklik yaparak aşağıdakileri yapabilirsiniz:

  1. Yerel olarak çalıştırmak veya Google Cloud sunucusuz bilgi işlem platformlarına dağıtım yapmak için bu codelab'in diğer tüm sürümlerini tamamlayın (depo README'yi inceleyin).
  2. Başka bir programlama dili kullanarak bu eğiticiyi tamamlayın.
  3. Farklı kaynak veya hedef dilleri desteklemek için bu uygulamayı 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ı

Lisans

Bu eğitim, Creative Commons Attribution 2.0 Genel Lisansı ile, kod deposundaki kaynak kodu ise Apache 2 ile lisanslanmıştır.