Esegui il deployment di una versione di base di "Google Traduttore" App Express.js su App Engine, Cloud Functions e Cloud Run

1. Panoramica

Questa serie di codelab (tutorial pratici e autogestiti) mira ad aiutare gli sviluppatori a comprendere le varie opzioni a disposizione per il deployment delle loro applicazioni. Imparerai a utilizzare l'API Google Cloud Translation in una semplice applicazione web. L'app può essere eseguita localmente o sottoposta a deployment su una piattaforma di computing serverless Cloud (App Engine, Cloud Functions o Cloud Run).

Svolgerai questo tutorial JavaScript con Node.js utilizzando il framework web Express.js. Imparerai inoltre ad accedere alle API Google Cloud dalle nostre piattaforme serverless. Tutte le versioni di questa app provengono dal "nebulous serverless" un repository open source, che include una versione Python di questa app e codelab indipendenti. Il repository ospita anche app simili che mostrano agli sviluppatori come accedere alle API di Google non cloud dalle nostre piattaforme serverless.

Questo codelab è incentrato sul deployment di questa app nelle piattaforme in grassetto riportate sopra.

Imparerai a

Che cosa ti serve

  • Un progetto Google Cloud con un account di fatturazione Cloud attivo.
  • Un framework web installato per l'esecuzione in locale ( Flask per chi esegue il tutorial Python o Espresso per chi esegue il tutorial JavaScript/Node.js)
  • Almeno una piattaforma di computing serverless abilitata per i deployment di Google Cloud
  • Competenze di programmazione di base (Python o JavaScript/Node.js)
  • Conoscenza pratica dei comandi di base del sistema operativo

Sondaggio

Come utilizzerai questo tutorial?

Leggilo e completa gli esercizi Sola lettura

Come valuteresti la tua esperienza di sviluppo in Python o Node.js?

Principiante Livello intermedio Eccellente

Come giudichi la tua esperienza di utilizzo dei servizi Google Cloud?

Principiante Livello intermedio Eccellente

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata in qualsiasi momento.
  • L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto.
  • C'è un terzo valore, il numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

3. Abilita API Translation

In questa sezione scoprirai come abilitare le API di Google in generale. Per la nostra app di esempio, abiliterai l'API Cloud Translation. Abiliterai anche App Engine, Cloud Functions e/o Cloud Run (oltre a Cloud Artifact Registry), a seconda delle piattaforme su cui vuoi eseguire il deployment dell'app di esempio.

Abilitazione delle API di Google

Introduzione

Indipendentemente dall'API di Google che vuoi utilizzare nell'applicazione, queste devono essere abilitate. Le API possono essere abilitate dalla riga di comando o dalla console Cloud. Il processo di abilitazione delle API è identico, quindi una volta abilitata un'API, puoi eseguirne un'altra nello stesso modo.

Opzione 1: gcloud interfaccia a riga di comando (Cloud Shell o ambiente locale)

Sebbene l'abilitazione delle API dalla console Cloud sia più comune, alcuni sviluppatori preferiscono eseguire tutte le operazioni dalla riga di comando. Per farlo, devi cercare il "nome del servizio" di un'API. Sembra un URL: SERVICE_NAME.googleapis.com. Puoi trovarli nel grafico dei prodotti supportati oppure puoi eseguire query in modo programmatico con l'API Google Discovery.

Grazie a queste informazioni, utilizzando Cloud Shell (o il tuo ambiente di sviluppo locale in cui è installato lo strumento a riga di comando gcloud installato), puoi abilitare un'API nel seguente modo:

gcloud services enable SERVICE_NAME.googleapis.com

Esempio 1: abilita l'API Cloud Vision

gcloud services enable vision.googleapis.com

Esempio 2: abilita Google App Engine

gcloud services enable appengine.googleapis.com

Esempio 3: abilita più API con una singola richiesta. Ad esempio, se questo codelab prevede visualizzatori che eseguono il deployment di un'app in App Engine, Cloud Functions e Cloud Run utilizzando l'API Cloud Translation, la riga di comando sarà:

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

Questo comando abilita App Engine, Cloud Functions, Cloud Run e l'API Cloud Translation. Inoltre, abilita Cloud Artifact Registry perché è qui che le immagini container devono essere registrate dal sistema Cloud Build per poter eseguire il deployment in Cloud Run.

Opzione 2: console Cloud

Puoi anche abilitare le API di Google nel gestore API. Dalla console Cloud, vai a Gestore API e seleziona Libreria.

fb0f1d315f122d4a.png

Inizia a inserire il nome di un'API nella barra di ricerca per visualizzare i risultati corrispondenti:

2275786a24f8f204.png

Seleziona l'API che vuoi abilitare e fai clic sul pulsante Abilita:

7960a6752a1da767.png

Il processo di abilitazione di tutte le API è simile, indipendentemente dall'API di Google che intendi utilizzare.

Costo

Molte API di Google possono essere utilizzate senza costi; tuttavia, l'utilizzo della maggior parte dei prodotti e delle API Google Cloud comporta dei costi. Quando abiliti le API Cloud, ti potrebbe essere richiesto di creare un account di fatturazione attivo. Tuttavia, alcuni prodotti Google Cloud dispongono di un'opzione " Always Free" , che dovrai superare per sostenere i costi di fatturazione.

I nuovi utenti Google Cloud sono idonei alla prova senza costi, che al momento costa 300 $per i primi 90 giorni. In genere, i codelab non prevedono una gran o nessuna fatturazione, quindi ti consigliamo di aspettare il momento della prova senza costi, specialmente se si tratta di un'offerta una tantum. Le quote del Livello senza costi non scadono e si applicano indipendentemente dal fatto che utilizzi o meno la prova senza costi.

Gli utenti devono fare riferimento alle informazioni sui prezzi di qualsiasi API prima di abilitarla (ad esempio, la pagina Prezzi dell'API Cloud Vision ), soprattutto indicando se è disponibile un livello senza costi e, in tal caso, di cosa si tratta. Se rimani entro i limiti giornalieri o mensili specificati in forma aggregata, non ti verrà addebitato alcun costo. I prezzi e i livelli senza costi variano a seconda delle API dei gruppi di prodotti Google. Esempi:

I vari prodotti Google vengono fatturati in modo diverso, quindi assicurati di consultare la documentazione appropriata per queste informazioni.

Assicurarsi che i servizi desiderati siano abilitati

Assicurati che l'API Cloud Translation nel gestore API sia indicata sopra. Se non hai abilitato le piattaforme serverless dalla riga di comando, puoi farlo da ciascuna delle rispettive dashboard nella console Cloud: App Engine, Cloud Functions, Cloud Run.

Sebbene sia visivamente informativo per abilitare le API dalla console Cloud, è più veloce utilizzare lo strumento gcloud, che richiede pochi secondi per abilitare tutti i servizi:

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

Maggiori informazioni sui costi

La sezione precedente sui costi riguarda le API di Google. Vediamo maggiori dettagli per questo tutorial. Sebbene la sua quota mensile non figura nell'elenco complessivo di " Always Free" della pagina di riepilogo dei livelli, la pagina dei prezzi dell'API Translation indica che tutti gli utenti ricevono un numero fisso di caratteri tradotti al mese. Se rimani al di sotto di questa soglia, non dovresti ricevere alcun addebito dall'API. Per ulteriori informazioni sui costi relativi all'utilizzo delle piattaforme serverless di Google Cloud, consulta la sezione relativa ai costi del repository. L'opzione "Pulizia" alla fine illustra come interrompere la fatturazione dopo il completamento di questo codelab.

4. recupera il codice dell'app di esempio

Scarica ZIP o clona un repository

  • Scarica il file ZIP o clona il repository con git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git
  • Se non hai un ambiente di sviluppo locale e vuoi eseguire questo tutorial in Cloud Shell, puoi clonare il repository con lo stesso comando git clone qui.
  • Puoi anche accedere al file ZIP dal pulsante Codice verde, come mostrato nello screenshot seguente:

5cd6110c4414cf65.png

Ora che hai tutto, crea una copia completa della cartella per seguire questo specifico tutorial, perché probabilmente dovrai eliminare o modificare i file. Se vuoi eseguire un deployment diverso, puoi ricominciare copiando l'originale in modo da non doverlo clonare o scaricarlo di nuovo.

5. Conferma l'ambiente Node.js

Per configurare l'ambiente Node.js, segui questi passaggi:

  1. Assicurati di aver installato le versioni contemporanee di Node (>=10) e NPM (>=6)
  2. Vai alla posizione in cui hai clonato il repository (o hai decompresso il file ZIP), quindi vai alla cartella cloud/nodejs
  3. Conferma che package.json sia presente, quindi esegui npm install

Per il passaggio 1 riportato sopra, puoi verificare quali versioni sono presenti sulla riga di comando:

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

6. Tour dell'app di esempio

L'app di esempio è una semplice derivata di Google Traduttore che chiede agli utenti di inserire il testo in inglese e di ricevere la traduzione equivalente di quel testo in spagnolo.

Il file di configurazione package.json indica quali pacchetti di terze parti sono richiesti per l'applicazione (tieni presente che le versioni del pacchetto potrebbero essere aggiornate oltre a quanto elencato qui):

{
  "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"
  }
}

Ora apri il file index.js per vedere come funziona. Se ometti le righe commenti sulla licenza, l'aspetto avrà il seguente aspetto in alto e in basso:

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. Le require integrano le funzionalità di framework e modelli e la libreria client dell'API Cloud Translation.
  2. Le variabili globali rappresentano l'app web, l'ID progetto Cloud, il client API Translation, il "percorso posizione" padre per le chiamate API Translation e le lingue SOURCE e TARGET. In questo caso, la lingua è inglese (en) e spagnolo (es), ma puoi modificare questi valori in altri codici lingua supportati dall'API Cloud Translation.
  3. Il primo elemento di ogni coppia (SOURCE e TARGET) è il codice della lingua, mentre il secondo è il nome della lingua (e utilizzato solo a scopo di visualizzazione in quanto non è pertinente per l'API).
  4. Le poche righe nella parte inferiore consentono di inviare tutte le richieste HTTP a translate(), quindi esportare l'oggetto dell'applicazione app.

Infine, al centro di index.js c'è il cuore dell'applicazione, la funzione translate():

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);
}

La funzione principale si occupa di acquisire l'input dell'utente e chiamare l'API Translation per svolgere il lavoro pesante. Analizziamola nel dettaglio:

  1. Reimposta le variabili di base per il modulo. Ciò è principalmente per le richieste GET, poiché le richieste POST avranno dati che le sostituiranno.
  2. Se si tratta di un POST, recupera il testo da tradurre e, se non è vuoto, crea una struttura JSON che rappresenti il requisito dei metadati dell'API. quindi chiama l'API per il servizio.
  3. Non abbiamo passato SOURCE[0] all'API a una fonte inglese specifica. Se disattivi la lingua di origine, chiedi all'API di rilevare automaticamente la lingua di origine (vedi sourceLanguageCode nella documentazione).
  4. Indipendentemente da ciò, formatta i risultati effettivi (POST) o nessun dato (GET) nel contesto del modello ed eseguine il rendering.

La parte visiva dell'applicazione si trova nel file index.html modello. Mostra tutti i risultati tradotti in precedenza (altrimenti vuoti) seguiti dal modulo in cui viene chiesto qualcosa da tradurre:

<!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>

Nel resto del tutorial, puoi scegliere una o tutte le quattro opzioni per il deployment e l'esecuzione di questa app. Tutti i deployment sono facoltativi, il che significa che puoi eseguirne uno o tutti.

  1. Esegui il servizio in locale
  2. Eseguire il deployment in App Engine (ambiente standard)
  3. Esegui il deployment in Cloud Functions
  4. Esegui il deployment in Cloud Run

7. OPZIONE 1: esegui il servizio in locale

Questa sezione del codelab può essere eseguita solo in locale. Se esegui il deployment solo nel cloud, passa alla sezione successiva.

Per eseguire l'app di esempio in locale, devi seguire tre passaggi distinti:

  1. Crea un account di servizio
  2. Crea una coppia di chiavi pubbliche/private per un account di servizio
  3. Scarica il file delle credenziali e il bundle con il codice dell'applicazione
  4. Avvia il servizio

Scopri di più sugli account di servizio

Gli account di servizio sono il meccanismo di sicurezza per accedere alle API di Google per le applicazioni basate su cloud quando si accede a dati che non appartengono a utenti umani. Durante il deployment nel cloud, per ridurre i tempi di onboarding degli utenti nel cloud, tutte le piattaforme di computing Google Cloud (serverless e non) forniscono account di servizio predefiniti.

Gli account di servizio predefiniti dispongono di una vasta gamma di autorizzazioni per ma quando si preparano a lanciare un servizio di produzione, consigliamo vivamente agli utenti di seguire la best practice del "meno privilegi", ma creando account di servizio gestiti dall'utente con autorizzazioni solo sufficienti affinché l'app funzioni correttamente. Indipendentemente da ciò, non esistono account di servizio predefiniti per i deployment locali, quindi devi creare un account di servizio più una chiave dell'account di servizio (in realtà una coppia di chiavi pubblica/privata) e rendere queste credenziali disponibili per il codice dell'applicazione.

Creare una coppia di chiavi dell'account di servizio e scaricare il file delle credenziali

Segui le istruzioni in questa pagina per creare un account di servizio e una coppia di chiavi pubblica/privata per l'esecuzione locale. Quando crei la chiave dell'account di servizio, ti verrà chiesto di fornire le autorizzazioni desiderate. Assicurati di selezionare roles/cloudtranslate.user per poter accedere all'API.

Una volta creata la coppia di chiavi, ti verrà chiesto di scaricare il file della chiave dell'account di servizio. Denominalo credentials.json e spostalo nella cartella di primo livello dell'applicazione. Ora devi indicare a Cloud SDK di utilizzare queste credenziali: imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS in modo che punti a quel file. Ulteriori informazioni su questo processo sono disponibili anche in questa pagina per informazioni sull'utilizzo degli account di servizio.

Avviare il servizio

Quando è tutto pronto per proseguire, avvia il server Express localmente con il seguente comando:

$ npm start

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

Listening on port 8080

Vai al tuo browser web e connettiti all'indirizzo localhost:8080. Dovresti vedere un risultato simile al seguente:

adc6665b7ae13c40.png

Traduci qualcosa per vederlo funzionare.

fc154326080bf14f.png

Quando sei soddisfatto, chiudi il server con ^C (control-C) ed esci. Congratulazioni per aver eseguito un deployment locale. Ma c'è una buona notizia: il deployment nel cloud è molto più semplice.

Risoluzione dei problemi

Ricevi un errore come questo quando richiedi una traduzione?

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

SOLUZIONE: questo errore indica che la creazione di un account di servizio e il download del file della coppia di chiavi pubblica/privata credentials.json non sono stati completati. Torna a " OPZIONE 1: esegui il servizio in locale" e completa questo processo e installa le credenziali nella cartella principale prima di procedere.

8. OPZIONE 2: esegui il deployment in App Engine (ambiente standard)

Questa sezione del codelab riguarda solo il deployment in Node App Engine. Se non ti interessa, passa alla sezione successiva.

Questo deployment utilizza il file di configurazione app.yaml, che indica ad App Engine quale runtime utilizzare con una singola riga:

runtime: nodejs16

Il file app.yaml non viene utilizzato né da Cloud Functions né da Cloud Run. Se non prevedi di utilizzare App Engine, questo file può essere eliminato in modo sicuro. Quando è tutto pronto per il deployment in App Engine, esegui questo comando:

$ gcloud app deploy

Dopo aver selezionato una regione, l'output gcloud app deploy sarà molto meno dettagliato e dovrebbe avere il seguente aspetto:

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

Ora che la tua app è disponibile in tutto il mondo, dovresti essere in grado di raggiungerla all'URL contenente il tuo ID progetto e dovresti vedere un output simile alla versione Express locale, ma con la certezza che è in esecuzione nel cloud e disponibile in tutto il mondo:

da28f951c33a2c3d.png

Se invii una richiesta, noterai che funziona come tutti gli altri deployment.

9. OPZIONE 3: esegui il deployment in Cloud Functions

Questa sezione del codelab riguarda solo il deployment in Node Cloud Functions. Se non ti interessa, passa alla sezione successiva.

Non esistono file di configurazione con Cloud Functions, quindi quando è tutto pronto per il deployment in Cloud Functions, esegui questo comando:

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

Il tuo progetto Google Cloud potrebbe avere un valore REGION predefinito, ma puoi utilizzare il flag --region per eseguire il deployment della funzione in una regione specifica. Cloud Functions non richiede richieste come gli altri prodotti Cloud. Indipendentemente dalla regione scelta, l'output gcloud functions deploy dovrebbe avere il seguente aspetto:

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: '...'

Ora che la tua app è disponibile in tutto il mondo, dovresti essere in grado di raggiungerla all'URL contenente il tuo ID progetto, come mostrato nell'output del deployment (sotto "httpsTrigger/url"). L'URL dovrebbe essere simile a questo: https://REGION-PROJECT_ID.cloudfunctions.net/translate, che varia in base alla regione selezionata e all'ID progetto Cloud.

518f1c3165f2096d.png

10. OPZIONE 4: esegui il deployment in Cloud Run

Questa sezione del codelab è dedicata esclusivamente al deployment in Cloud Run. Se non ti interessa, passa alla sezione successiva.

Cloud Run non contiene file di configurazione, quindi quando è tutto pronto per il deployment in Cloud Run, segui le istruzioni riportate di seguito.

Ora è tutto pronto per il deployment del tuo servizio di traduzione in Cloud Run eseguendo questo comando:

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

L'output dovrebbe avere il seguente aspetto e fornire alcuni prompt per i passaggi successivi:

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 Buildpacker le tue app in Cloud Run in modo molto simile a come faresti se eseguissi l'app in locale. Per gli utenti Node.js, vengono eseguiti npm install e npm start. Per Python, esegue pip install -r requirements.txt e avvia l'app dalle istruzioni nel Procfile. Lo stesso vale per tutte le altre lingue supportate da Cloud Buildpacks. La tua app sarà pronta al termine del processo di compilazione.

Quindi l'app è (distribuita a livello regionale, ma) disponibile a livello globale e può essere raggiunta all'URL contenente il tuo ID progetto, come mostrato nell'output del deployment (nella sezione "Service URL:"

169f6edf5f7d2068.png

Traduci qualcosa per vederlo funzionare.

31554e71cb80f1b4.png

11. Conclusione

Complimenti! Hai imparato ad abilitare e utilizzare l'API Cloud Translation, ottenere le credenziali necessarie ed eseguire il deployment di una semplice app web su Express localmente su App Engine, Cloud Functions e/o Cloud Run. Controlla la cartella repository per scoprire di più o per accedere ad altre versioni dell'app e ad altri codelab.

Esegui la pulizia

L'API Cloud Translation consente di eseguire senza costi una quantità fissa di caratteri tradotti al mese. App Engine ha inoltre una quota senza costi, e lo stesso vale per Cloud Functions e Cloud Run. In caso di superamento di una delle due opzioni, ti vengono addebitati dei costi. Se prevedi di continuare con il codelab successivo, non dovrai chiudere la tua app.

Tuttavia, se non vuoi ancora andare al tutorial successivo o temi che internet rilevi l'app di cui hai appena eseguito il deployment, disattiva l'app di App Engine, elimina la funzione Cloud Functions o disabilita il servizio Cloud Run per evitare addebiti. Quando vuoi passare al codelab successivo, puoi riabilitarlo. Se invece non intendi continuare con questa applicazione o con altri codelab e vuoi eliminare completamente tutto, puoi chiudere il progetto.

Inoltre, il deployment su una piattaforma di serverless computing di Google Cloud comporta costi minori di creazione e archiviazione. Cloud Build e Cloud Storage hanno una quota senza costi specifica. Per una maggiore trasparenza, Cloud Build crea l'immagine della tua applicazione, che viene quindi archiviata in Cloud Container Registry o in Artifact Registry, il suo successore. L'archiviazione dell'immagine utilizza parte della quota, così come il traffico in uscita dalla rete durante il trasferimento dell'immagine al servizio. Tuttavia, potresti risiedere in una regione che non ha un livello senza costi, quindi tieni presente l'utilizzo dello spazio di archiviazione per ridurre al minimo i costi potenziali.

12. Risorse aggiuntive

Nelle sezioni che seguono troverai materiale di lettura aggiuntivo ed esercizi consigliati per migliorare le conoscenze acquisite con il completamento di questo tutorial.

Studio aggiuntivo

Ora che hai una certa esperienza con l'API Translation, eseguiamo alcuni esercizi aggiuntivi per sviluppare ulteriormente le tue competenze. Per continuare il tuo percorso di apprendimento, modifica la nostra app di esempio:

  1. Completa tutte le altre versioni di questo codelab per l'esecuzione locale o il deployment su piattaforme di serverless computing di Google Cloud (consulta README del repository).
  2. Completa questo tutorial utilizzando un altro linguaggio di programmazione.
  3. Cambia questa applicazione in modo che supporti lingue di origine o di destinazione diverse.
  4. Esegui l'upgrade di questa applicazione per poter tradurre il testo in più lingue. modifica il file del modello in modo da visualizzare un elenco a discesa delle lingue di destinazione supportate.

Scopri di più

Google App Engine

Google Cloud Functions

Google Cloud Run

Buildpack di Google Cloud, Container Registry, Artifact Registry

Google Cloud Translation e Google ML Kit

Altri prodotti/pagine Google Cloud

Licenza

Questo tutorial è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic, mentre il codice sorgente nel repository è concesso in licenza secondo Apache 2.