Einfache Bereitstellung von "Google Übersetzer" Express.js-Anwendung in der App Engine, Cloud Functions und Cloud Run

1. Übersicht

Diese Reihe von Codelabs (Tutorials zum Selbststudium, praxisorientierte Anleitungen) zielt darauf ab, Entwicklern die verschiedenen Optionen bei der Bereitstellung ihrer Anwendungen näherzubringen. Sie lernen, wie Sie die Google Cloud Translation API in einer einfachen Webanwendung verwenden. Diese Anwendung kann lokal ausgeführt oder auf einer serverlosen Cloud-Computing-Plattform (App Engine, Cloud Functions oder Cloud Run) bereitgestellt werden.

Für diese JavaScript-Anleitung verwenden Sie Node.js und das Express.js-Web-Framework. Außerdem erfahren Sie, wie Sie über unsere serverlosen Plattformen auf Google Cloud APIs zugreifen. Alle Versionen dieser Anwendung stammen vom „nebulous serverlosen“. Open-Source-Repository, das eine Python-Version dieser App und unabhängige Codelabs enthält. Das Repository hostet auch ähnliche Apps, die Entwicklern zeigen, wie sie über unsere serverlosen Plattformen auf Nicht-Cloud-APIs von Google zugreifen können.

In diesem Codelab geht es vorrangig um die Bereitstellung der App auf den oben fettgedruckten Plattformen.

Du lernst, wie du

Voraussetzungen

  • Ein Google Cloud-Projekt mit einem aktiven Cloud-Rechnungskonto
  • Ein für die lokale Ausführung installiertes Web-Framework. Für diejenigen, die die Python-Anleitung ausführen, Flask und für JavaScript/Node.js-Anleitungen Express
  • Mindestens eine serverlose Computing-Plattform, die für Google Cloud-Bereitstellungen aktiviert ist
  • Grundkenntnisse zur Programmierung (Python oder JavaScript/Node.js)
  • Erfahrung mit grundlegenden Betriebssystembefehlen

Umfrage

Wie möchten Sie diese Anleitung nutzen?

<ph type="x-smartling-placeholder"></ph> Lies sie dir durch und absolviere die Übungen Schreibgeschützt

Wie würden Sie Ihre Erfahrung bei der Entwicklung in Python oder Node.js bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

Wie würden Sie Ihre Erfahrungen im Umgang mit Google Cloud-Diensten bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird und jederzeit aktualisiert werden kann.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die in der Regel als PROJECT_ID identifiziert wird. Wenn es dir nicht gefällt, kannst du eine weitere zufällige Projekt-ID generieren. Du kannst aber auch selbst eine andere testen, um zu sehen, ob sie verfügbar ist. Dann ist es „eingefroren“ nachdem das Projekt erstellt wurde.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. Wenn Sie Ressourcen beenden möchten, damit über diese Anleitung hinaus keine Kosten anfallen, führen Sie eine Bereinigung durch am Ende des Codelabs. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.

3. Translation API aktivieren

In diesem Abschnitt erfahren Sie, wie Sie Google APIs allgemein aktivieren. Für unsere Beispielanwendung aktivieren Sie die Cloud Translation API. Außerdem aktivieren Sie App Engine, Cloud Functions und/oder Cloud Run (sowie Cloud Artifact Registry), je nachdem, auf welchen Plattformen Sie die Beispiel-App bereitstellen möchten.

Google APIs aktivieren

Einführung

Unabhängig davon, welche Google API Sie in Ihrer Anwendung verwenden möchten, müssen sie aktiviert sein. APIs können über die Befehlszeile oder die Cloud Console aktiviert werden. Die Vorgehensweise zum Aktivieren von APIs ist identisch. Sobald Sie also eine API aktiviert haben, können Sie eine andere API auf dieselbe Weise aktivieren.

Option 1: gcloud-Befehlszeile (Cloud Shell oder lokale Umgebung)

Das Aktivieren von APIs über die Cloud Console ist zwar üblicher, aber einige Entwickler bevorzugen es, alles über die Befehlszeile zu erledigen. Dazu müssen Sie den „Dienstnamen“ einer API suchen. Es sieht aus wie eine URL: SERVICE_NAME.googleapis.com. Sie finden diese Produkte im Diagramm der unterstützten Produkte. Alternativ können Sie sie mit der Google Discovery API programmatisch abfragen.

Ausgerüstet mit diesen Informationen können Sie eine API mithilfe von Cloud Shell (oder Ihrer lokalen Entwicklungsumgebung mit dem installierten gcloud-Befehlszeilentool) aktivieren:

gcloud services enable SERVICE_NAME.googleapis.com

Beispiel 1: Cloud Vision API aktivieren

gcloud services enable vision.googleapis.com

Beispiel 2: Google App Engine aktivieren

gcloud services enable appengine.googleapis.com

Beispiel 3: Mehrere APIs mit einer Anfrage aktivieren Wenn in diesem Codelab beispielsweise Betrachter eine Anwendung bereitstellen, die die Cloud Translation API in App Engine, Cloud Functions und Cloud Run verwendet, sieht die Befehlszeile so aus:

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

Dieser Befehl aktiviert App Engine, Cloud Functions, Cloud Run und die Cloud Translation API. Außerdem wird Cloud Artifact Registry aktiviert, da dort Container-Images vom Cloud Build-System registriert werden müssen, um sie in Cloud Run bereitzustellen.

Option 2: Cloud Console

Sie können die Google APIs auch im API Manager aktivieren. Rufen Sie in der Cloud Console den API-Manager auf und wählen Sie Bibliothek aus.

fb0f1d315f122d4a.png

Geben Sie den Namen einer API in die Suchleiste ein, um die passenden Ergebnisse zu sehen:

2275786a24f8f204.png

Wählen Sie die API aus, die Sie aktivieren möchten, und klicken Sie auf die Schaltfläche Aktivieren:

7960a6752a1da767.png

Das Aktivieren aller APIs ist ähnlich, unabhängig davon, welche Google API Sie verwenden möchten.

Kosten

Viele Google APIs können kostenlos genutzt werden. Bei den meisten Google Cloud-Produkten und -APIs fallen jedoch Kosten an. Beim Aktivieren von Cloud APIs werden Sie möglicherweise nach einem aktiven Rechnungskonto gefragt. Einige Google Cloud-Produkte bieten jedoch ein „Immer kostenlos“- , die Sie überschreiten müssen, damit Kosten anfallen.

Neue GCP-Nutzer können eine kostenlose Testversion nutzen, die in den ersten 90 Tagen derzeit 300 $beträgt. Für Codelabs wird in der Regel nichts berechnet und es fallen keine Kosten an. Daher empfehlen wir Ihnen, die kostenlose Testversion erst zu nutzen, wenn Sie wirklich bereit sind, sie zu testen. Das gilt insbesondere, da es sich um ein einmaliges Angebot handelt. Die Kontingente der kostenlosen Stufe laufen nicht ab und gelten unabhängig davon, ob Sie den kostenlosen Testzeitraum verwenden oder nicht.

Nutzer sollten sich vor der Aktivierung einer API auf die Preisinformationen beziehen (Beispiel: Cloud Vision API – Preise ) und darauf achten, ob sie eine kostenlose Stufe hat und wenn ja, um welche es sich handelt. Solange Sie insgesamt innerhalb der festgelegten Tages- oder Monatslimits bleiben, fallen keine Kosten an. Preise und kostenlose Stufen unterscheiden sich je nach Google-Produktgruppen-APIs. Beispiele:

Verschiedene Google-Produkte werden unterschiedlich abgerechnet. Lesen Sie daher die entsprechende Dokumentation.

Sicherstellen, dass die gewünschten Dienste aktiviert sind

Stellen Sie die Cloud Translation API wie oben beschrieben im API Manager sicher. Wenn Sie die serverlosen Plattformen nicht über die Befehlszeile aktiviert haben, können Sie dies über die jeweiligen Dashboards in der Cloud Console tun: App Engine, Cloud Functions oder Cloud Run.

Das Aktivieren von APIs über die Cloud Console ist zwar visuell informativ, aber mit dem gcloud-Tool geht es schneller, da alle Dienste in wenigen Sekunden aktiviert werden können:

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

Weitere Informationen zu Kosten

Der obige Abschnitt zu Kosten ist für alle Google APIs allgemein. Sehen wir uns diese Anleitung einmal genauer an. Das monatliche Kontingent ist zwar nicht in der Spalte "Immer kostenlos" insgesamt Stufenübersicht sehen Sie auf der Preisseite der Translation API, dass alle Nutzer monatlich eine feste Anzahl übersetzter Zeichen erhalten. Über die API werden Ihnen keine Kosten berechnet, wenn Sie unter diesem Grenzwert bleiben. Weitere Informationen zu den Kosten bei der Nutzung serverloser Plattformen von Google Cloud finden Sie im Abschnitt zu den Kosten des Repositorys. Die Funktion „Aufräumen“ am Ende erfahren Sie, wie Sie die Abrechnung nach Abschluss dieses Codelabs beenden.

4. Beispielcode der App abrufen

ZIP-Datei herunterladen oder Repository klonen

  • Laden Sie die ZIP-Datei herunter oder klonen Sie das Repository mit git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git.
  • Wenn Sie keine lokale Entwicklungsumgebung haben und diese Anleitung in Cloud Shell durchgehen möchten, können Sie das Repository mit demselben git clone-Befehl dort klonen.
  • Sie können auch über die grüne Schaltfläche Code auf die ZIP-Datei zugreifen, wie im folgenden Screenshot dargestellt:

5cd6110c4414cf65.png

Da Sie nun über alles verfügen, erstellen Sie für diese spezielle Anleitung eine vollständige Kopie des Ordners, da Sie wahrscheinlich die Dateien löschen oder ändern müssen. Wenn Sie eine andere Bereitstellung vornehmen möchten, können Sie von vorn beginnen, indem Sie das Original kopieren. So müssen Sie es nicht noch einmal klonen oder herunterladen.

5. Node.js-Umgebung bestätigen

So richten Sie Ihre Node.js-Umgebung ein:

  1. Achten Sie darauf, dass die aktuellen Versionen von Node (>=10) und NPM (>=6) installiert sind
  2. Öffnen Sie den Ordner, in dem Sie das Repository geklont oder die ZIP-Datei entpackt haben, und öffnen Sie dann den Ordner cloud/nodejs.
  3. Prüfen, ob package.json vorhanden ist, dann npm install ausführen

Für den ersten Schritt oben können Sie in der Befehlszeile überprüfen, welche Versionen Sie haben:

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

6. Einführung in die Beispiel-App

Die Beispiel-App ist eine einfache Ableitung von Google Übersetzer, die Nutzer auffordert, Text auf Englisch einzugeben und eine entsprechende Übersetzung des Textes auf Spanisch zu erhalten.

Die Konfigurationsdatei package.json gibt an, welche Drittanbieterpakete für die Anwendung erforderlich sind (beachten Sie, dass Paketversionen über die hier aufgeführten hinaus aktualisiert werden können):

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

Öffnen Sie jetzt die Datei index.js, um zu sehen, wie es funktioniert. Ohne die kommentierten Zeilen zur Lizenzierung sieht der Text oben und unten so aus:

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. Die requires beinhalten die Framework- und Vorlagenfunktionen sowie die Cloud Translation API-Clientbibliothek.
  2. Die globalen Variablen stehen für die Webanwendung, die Cloud-Projekt-ID, den Translation API-Client und den übergeordneten „Standortpfad“. für Translation API-Aufrufe und die Sprachen SOURCE und TARGET. In diesem Fall sind es Englisch (en) und Spanisch (es), aber Sie können diese Werte in andere Sprachcodes ändern, die von der Cloud Translation API unterstützt werden.
  3. Das erste Element jedes Paares (SOURCE und TARGET) ist der Sprachcode und das zweite der Name der Sprache. Es wird nur zu Anzeigezwecken verwendet, da er für die API nicht relevant ist.
  4. Über die Zeilen unten werden alle HTTP-Anfragen an translate() gesendet und dann das Anwendungsobjekt app exportiert.

Schließlich befindet sich in der Mitte von index.js das Herz der Anwendung, die Funktion 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);
}

Die primäre Funktion übernimmt die Nutzereingabe und ruft für den Großteil der Arbeit die Translation API auf. Sehen wir uns das einmal genauer an:

  1. Die grundlegenden Variablen für das Formular zurücksetzen Dies gilt hauptsächlich für GET-Anfragen, da POST-Anfragen Daten enthalten, die diese ersetzen.
  2. Wenn es sich um einen POST handelt, erfassen Sie den zu übersetzenden Text und erstellen Sie, falls nicht leer, eine JSON-Struktur, die die API-Metadatenanforderung darstellt. Rufen Sie dann die API für den Dienst auf.
  3. Wir haben SOURCE[0] nicht an die API an eine bestimmte englische Quelle übergeben. Wenn Sie die Ausgangssprache weglassen, fordern Sie die API zur automatischen Erkennung der Ausgangssprache an (siehe sourceLanguageCode in der Dokumentation).
  4. Unabhängig davon sollten Sie die tatsächlichen Ergebnisse (POST) oder keine Daten (GET) in den Vorlagenkontext formatieren und rendern.

Der visuelle Teil der Anwendung befindet sich in der Vorlagendatei index.html. Es werden alle zuvor übersetzten Ergebnisse (andernfalls leer) angezeigt, gefolgt von dem Formular, in dem nach etwas zu übersetzen ist:

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

Für den Rest der Anleitung können Sie eine oder alle der vier Optionen zum Bereitstellen und Ausführen dieser App auswählen. Alle Bereitstellungen sind optional, das heißt, Sie können eine oder alle Bereitstellungen ausführen.

  1. Dienst lokal ausführen
  2. In App Engine bereitstellen (Standardumgebung)
  3. In Cloud Functions bereitstellen
  4. In Cloud Run bereitstellen

7. OPTION 1: Dienst lokal ausführen

Dieser Abschnitt des Codelabs dient nur zur lokalen Ausführung. Wenn Sie die Bereitstellung nur in der Cloud vornehmen, fahren Sie mit dem nächsten Abschnitt fort.

Um die Beispielanwendung lokal auszuführen, müssen drei verschiedene Schritte ausgeführt werden:

  1. Dienstkonto erstellen
  2. Paar aus öffentlichem/privatem Dienstkonto für Dienstkonto erstellen
  3. Datei mit Anmeldedaten und Bundle mit Anwendungscode herunterladen
  4. Dienst starten

Informationen zu Dienstkonten

Dienstkonten sind der Sicherheitsmechanismus für den Zugriff auf Google APIs für cloudbasierte Anwendungen, wenn auf Daten zugegriffen wird, die nicht menschlichen Nutzern gehören. Um bei der Bereitstellung in der Cloud die Anlaufzeit für das Onboarding von Nutzern in der Cloud zu verkürzen, stellen alle Compute-Plattformen von Google Cloud (serverlos und anderweitig) Standarddienstkonten bereit.

Standarddienstkonten verfügen über eine Reihe von Berechtigungen, Zur Einführung eines Produktionsdienstes empfehlen wir Nutzern jedoch dringend, sich an die Best Practice der geringsten Berechtigung zu halten. Erstellen Sie jedoch nutzerverwaltete Dienstkonten, die nur so viele Berechtigungen haben, dass Ihre App ordnungsgemäß funktioniert. Unabhängig davon gibt es keine Standarddienstkonten für lokale Bereitstellungen. Daher müssen Sie ein Dienstkonto und einen Dienstkontoschlüssel (ein Paar aus öffentlichem/privatem Schlüssel) erstellen und diese Anmeldedaten für den Anwendungscode verfügbar machen.

Dienstkonto-Schlüsselpaar erstellen und Datei mit Anmeldedaten herunterladen

Folgen Sie der Anleitung auf dieser Seite, um ein Dienstkonto und ein Paar aus öffentlichem/privatem Schlüssel für die lokale Ausführung zu erstellen. Beim Erstellen des Dienstkontoschlüssels werden Sie aufgefordert, die gewünschten Berechtigungen zu erteilen. Wählen Sie roles/cloudtranslate.user aus, damit Sie erfolgreich auf die API zugreifen können.

Nachdem Ihr Schlüsselpaar erfolgreich erstellt wurde, werden Sie aufgefordert, die Schlüsseldatei des Dienstkontos herunterzuladen. Nennen Sie sie credentials.json und verschieben Sie sie in den Anwendungsordner auf oberster Ebene. Nun müssen Sie das Cloud SDK anweisen, diese Anmeldedaten zu verwenden: Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS so fest, dass sie auf diese Datei verweist. Weitere Informationen zur Nutzung von Dienstkonten

Dienst starten

Wenn Sie bereit sind, starten Sie den Express-Server lokal mit dem folgenden Befehl:

$ npm start

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

Listening on port 8080

Öffnen Sie Ihren Webbrowser und stellen Sie eine Verbindung unter localhost:8080 her. Sie sollten Folgendes sehen:

adc6665b7ae13c40.png

Übersetzen Sie etwas, damit es funktioniert!

fc154326080bf14f.png

Wenn Sie zufrieden sind, beenden Sie den Server mit ^C (control-C) und beenden Sie ihn. Herzlichen Glückwunsch zur Ausführung einer lokalen Bereitstellung. Die gute Nachricht: Die Bereitstellung in der Cloud ist viel einfacher.

Fehlerbehebung

Wird eine solche Fehlermeldung angezeigt, wenn Sie eine Übersetzung anfordern?

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

LÖSUNG: Dieser Fehler bedeutet, dass Sie die Erstellung eines Dienstkontos und das Herunterladen der Datei mit dem öffentlichen/privaten Schlüsselpaar credentials.json nicht abgeschlossen haben. Bitte gehen Sie zurück zu " OPTION 1: Dienst lokal ausführen und schließen Sie diesen Vorgang ab und installieren Sie CReds im Hauptordner, bevor Sie fortfahren.

8. OPTION 2: In App Engine (Standardumgebung) bereitstellen

Dieser Abschnitt des Codelabs dient nur der Bereitstellung in Node App Engine. Wenn Sie kein Interesse haben, fahren Sie mit dem nächsten Abschnitt fort.

Diese Bereitstellung verwendet die Konfigurationsdatei app.yaml, die App Engine mit einer einzelnen Zeile mitteilt, welche Laufzeit verwendet werden soll:

runtime: nodejs16

Die Datei app.yaml wird weder von Cloud Functions noch von Cloud Run verwendet. Wenn Sie App Engine nicht verwenden möchten, kann diese Datei sicher gelöscht werden. Wenn Sie bereit für die Bereitstellung in App Engine sind, führen Sie den folgenden Befehl aus:

$ gcloud app deploy

Sobald eine Region ausgewählt ist, ist die gcloud app deploy-Ausgabe viel weniger ausführlich und sollte so aussehen:

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

Jetzt, da Ihre Anwendung weltweit verfügbar ist, sollten Sie sie unter der URL erreichen können, die Ihre Projekt-ID enthält. Sie sollten eine Ausgabe sehen, die der lokalen Express-Version ähnelt, aber wissen, dass sie in der Cloud ausgeführt wird und weltweit verfügbar ist:

da28f951c33a2c3d.png

Wenn Sie eine Anfrage senden, werden Sie feststellen, dass sie genauso funktioniert wie alle anderen Bereitstellungen.

9. OPTION 3: In Cloud Functions bereitstellen

Dieser Abschnitt des Codelabs dient nur zur Bereitstellung in Node Cloud Functions. Wenn Sie kein Interesse haben, fahren Sie mit dem nächsten Abschnitt fort.

Bei Cloud Functions sind keine Konfigurationsdateien vorhanden. Führen Sie daher folgenden Befehl aus, um die Bereitstellung in Cloud Functions durchzuführen:

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

Ihr GCP-Projekt hat möglicherweise ein Standard-REGION. Sie können jedoch das Flag --region verwenden, um die Funktion in einer bestimmten Region bereitzustellen. Cloud Functions fordert Sie nicht wie andere Cloud-Produkte auf. Unabhängig von der ausgewählten Region sollte die gcloud functions deploy-Ausgabe so aussehen:

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

Da Ihre Anwendung jetzt weltweit verfügbar ist, sollten Sie sie unter der URL erreichen können, die Ihre Projekt-ID enthält, wie in der Bereitstellungsausgabe (unter „httpsTrigger/url“) dargestellt. Die URL sollte in etwa so aussehen: https://REGION-PROJECT_ID.cloudfunctions.net/translate, was je nach ausgewählter Region und Cloud-Projekt-ID variiert.

518f1c3165f2096d.png

10. OPTION 4: In Cloud Run bereitstellen

Dieser Abschnitt des Codelabs dient nur der Bereitstellung in Cloud Run. Wenn Sie kein Interesse haben, fahren Sie mit dem nächsten Abschnitt fort.

Bei Cloud Run gibt es keine Konfigurationsdateien. Wenn Sie für Cloud Run bereit sind, folgen Sie der Anleitung unten.

Jetzt können Sie den Übersetzungsdienst in Cloud Run bereitstellen. Führen Sie dazu den folgenden Befehl aus:

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

Die Ausgabe sollte so aussehen und einige Aufforderungen für die nächsten Schritte enthalten:

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-Buildpacks für Ihre Anwendungen in Cloud Run, ähnlich wie bei einer lokalen Ausführung Ihrer Anwendung. Für Nutzer von Node.js werden npm install und npm start ausgeführt. Bei Python wird pip install -r requirements.txt ausgeführt und die App gemäß der Anleitung in Ihrem Procfile gestartet. Dasselbe gilt für alle anderen von Cloud-Buildpacks unterstützten Sprachen. Ihre App ist einsatzbereit, sobald der Build-Prozess abgeschlossen ist.

Ihre Anwendung ist dann (regional, aber regional bereitgestellt) global verfügbar und kann über die URL aufgerufen werden, die Ihre Projekt-ID enthält, wie in der Bereitstellungsausgabe gezeigt (unter „Service URL:“):

169f6edf5f7d2068.png

Übersetzen Sie etwas, damit es funktioniert!

31554e71cb80f1b4.png

11. Fazit

Glückwunsch! Sie haben gelernt, wie Sie die Cloud Translation API aktivieren und verwenden, die erforderlichen Anmeldedaten abrufen und eine einfache Webanwendung für Express lokal, in der App Engine, in Cloud Functions und/oder in Cloud Run bereitstellen. Im Repository-Ordner findest du weitere Informationen und kannst auf andere Versionen dieser App und anderer Codelabs zugreifen.

Bereinigen

Mit der Cloud Translation API können Sie eine feste Anzahl übersetzter Zeichen pro Monat kostenlos ausführen. Für App Engine gibt es außerdem ein kostenloses Kontingent. Das gilt auch für Cloud Functions und Cloud Run. Wenn einer der beiden Werte überschritten wird, fallen Kosten an. Wenn Sie mit dem nächsten Codelab fortfahren möchten, müssen Sie Ihre App nicht beenden.

Wenn Sie jedoch noch nicht mit der nächsten Anleitung fortfahren möchten oder Bedenken haben, dass die gerade bereitgestellte App im Internet gefunden wird, deaktivieren Sie Ihre App Engine-Anwendung, löschen Sie die Cloud Functions-Funktion oder deaktivieren Sie den Cloud Run-Dienst, um Gebühren zu vermeiden. Wenn Sie bereit sind, mit dem nächsten Codelab fortzufahren, können Sie es wieder aktivieren. Wenn Sie jedoch nicht mit dieser Anwendung oder anderen Codelabs fortfahren und alles vollständig löschen möchten, können Sie Ihr Projekt beenden.

Die Bereitstellung auf einer serverlosen Computing-Plattform von Google Cloud verursacht außerdem geringfügige Build- und Speicherkosten. Für Cloud Build und Cloud Storage gibt es ein eigenes kostenloses Kontingent. Für mehr Transparenz erstellt Cloud Build Ihr Anwendungs-Image, das dann entweder in der Cloud Container Registry oder der Artifact Registry, der jeweils aktuellen Version, gespeichert wird. Die Speicherung dieses Images verbraucht einen Teil dieses Kontingents, ebenso wie der ausgehende Netzwerktraffic bei der Übertragung des Images an den Dienst. Möglicherweise leben Sie in einer Region, in der es keine solche kostenlose Stufe gibt. Achten Sie daher auf Ihre Speichernutzung, um potenzielle Kosten zu minimieren.

12. Zusätzliche Ressourcen

In den folgenden Abschnitten finden Sie zusätzliches Lesematerial sowie empfohlene Übungen, mit denen Sie Ihr Wissen erweitern können, das Sie durch die Ausführung dieses Tutorials gewonnen haben.

Weitere Studie

Sie haben sich nun mit der Translation API vertraut gemacht. Als Nächstes sehen wir uns an, wie Sie Ihre Fähigkeiten in den nächsten Übungen weiterentwickeln können. Um mit dem Lernpfad fortzufahren, passen Sie unsere Beispiel-App so an:

  1. Führen Sie alle anderen Versionen dieses Codelabs zur lokalen Ausführung oder Bereitstellung auf serverlosen Computing-Plattformen von Google Cloud durch (siehe Infodatei zum Repository).
  2. Schließen Sie diese Anleitung mit einer anderen Programmiersprache ab.
  3. Ändern Sie diese Anwendung, sodass andere Ausgangs- und Zielsprachen unterstützt werden.
  4. Aktualisieren Sie diese Anwendung, um Text in mehr als eine Sprache übersetzen zu können. Ändern Sie die Vorlagendatei so, dass sie ein Pulldown-Menü mit unterstützten Zielsprachen enthält.

Weitere Informationen

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation und Google ML Kit

Andere Google Cloud-Produkte/-Seiten

Lizenz

Diese Anleitung ist unter einer Creative-Commons-Lizenz „Namensnennung 2.0“ und der Quellcode im Repository unter „Apache 2“ lizenziert.