Viele Anwendungen müssen eine Hintergrundverarbeitung außerhalb des Kontexts einer Webanfrage ausführen. In dieser Anleitung wird eine Webanwendung erstellt, mit der Nutzer Text eingeben können, der übersetzt werden soll. Anschließend wird eine Liste früherer Übersetzungen angezeigt. Die Übersetzung erfolgt in einem Hintergrundprozess, um die Anfrage des Nutzers nicht zu blockieren.
Das folgende Diagramm veranschaulicht den Ablauf der Übersetzungsanfrage.
Wie die in dieser Anleitung verwendete Anwendung funktioniert, sehen Sie an der Abfolge der Ereignisse:
- Die Webseite wird aufgerufen, um eine Liste früherer Übersetzungen anzuzeigen, die in Firestore gespeichert sind.
- Die Übersetzung eines Textes wird angefordert. Dazu wird ein HTML-Formular ausgefüllt.
- Die Übersetzungsanfrage wird in Pub/Sub veröffentlicht.
- Eine Cloud Functions-Funktion, die dieses Pub/Sub-Thema abonniert hat, wird ausgelöst.
- Die Cloud Functions-Funktion verwendet Cloud Translation, um den Text zu übersetzen.
- Die Cloud Functions-Funktion speichert das Ergebnis in Firestore.
Diese Anleitung richtet sich an alle, die mehr über die Hintergrundverarbeitung mit Google Cloud erfahren möchten. Es sind keine Vorkenntnisse in Pub/Sub, Firestore, App Engine oder Cloud Functions erforderlich. Etwas Erfahrung mit Go, JavaScript und HTML ist allerdings hilfreich, um den gesamten Code zu verstehen.
Lernziele
- Cloud Functions-Funktion verstehen und bereitstellen
- App Engine-Anwendung verstehen und bereitstellen
- Anwendung testen
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Firestore, Cloud Functions, Pub/Sub, and Cloud Translation APIs aktivieren.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Firestore, Cloud Functions, Pub/Sub, and Cloud Translation APIs aktivieren.
-
Öffnen Sie die App in der Google Cloud Console über Cloud Shell.
Cloud Shell bietet Ihnen direkt über den Browser Befehlszeilenzugriff auf Ihre Cloud-Ressourcen. Öffnen Sie Cloud Shell im Browser und klicken Sie auf Fortfahren, um den Beispielcode herunterzuladen und ins Anwendungsverzeichnis zu wechseln.
-
Konfigurieren Sie in Cloud Shell das
gcloud
-Tool, um Ihr Google Cloud-Projekt zu verwenden:# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
Informationen zur Cloud Functions-Funktion
- Die Funktion beginnt mit dem Import mehrerer Abhängigkeiten wie Firestore und Translation. Sie bietet auch einige globale Variablen und Typen.
- Die globalen Firestore- und Translation-Clients werden initialisiert, damit sie zwischen Funktionsaufrufen wiederverwendet werden können. So müssen Sie nicht für jeden Funktionsaufruf neue Clients initialisieren, was die Ausführung verlangsamen würde.
- Die Translation API übersetzt den String in die ausgewählte Sprache.
-
Die Cloud Functions-Funktion beginnt mit der Initialisierung der Firestore- und Pub/Sub-Clients. Anschließend parst sie die Pub/Sub-Nachricht, um den zu übersetzenden Text und die gewünschte Zielsprache abzurufen.
Die Anwendung erstellt dann einen eindeutigen Namen für die Übersetzungsanfrage, damit keine doppelten Übersetzungen gespeichert werden. Anschließend wird die Datei in eine Firestore-Transaktion übersetzt, damit bei gleichzeitiger Ausführung nicht versehentlich dieselbe Übersetzung zweimal ausgeführt wird.
Cloud Functions-Funktion bereitstellen
Stellen Sie die Cloud Functions-Funktion in Cloud Shell im selben Verzeichnis wie die Datei
translate.go
mit einem Pub/Sub-Trigger bereit:gcloud functions deploy Translate --runtime go111 \ --trigger-topic=translate --set-env-vars GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_CLOUD_PROJECT
Dabei ist
YOUR_GOOGLE_CLOUD_PROJECT
Ihre Google Cloud-Projekt-ID.
Informationen zur Anwendung
Zur Webanwendung gehören zwei Hauptkomponenten:
-
Ein Go-HTTP-Server für Webanfragen Der Server hat die folgenden beiden Endpunkte:
-
/
: listet alle vorhandenen Übersetzungen auf und zeigt ein Formular an, das Nutzer senden können, um neue Übersetzungen anzufordern. -
/request-translation
: Formulareinreichungen werden an diesen Endpunkt gesendet, der die Anfrage zur asynchronen Übersetzung in Pub/Sub veröffentlicht.
-
- Eine HTML-Vorlage, die vom Go-Server mit den vorhandenen Übersetzungen ausgefüllt wird.
Der HTTP-Server
Im Verzeichnis
index
beginntmain.go
mit dem Einrichten der Anwendung und dem Registrieren von HTTP-Handlern:Der Index-Handler (
/
) ruft alle vorhandenen Übersetzungen aus Firestore ab und füllt eine HTML-Vorlage mit der Liste aus:Neue Übersetzungen werden durch Senden eines HTML-Formulars angefordert. Der Handler für Übersetzungsanfragen, der unter
/request-translation
registriert ist, parst das gesendete Formular, validiert die Anfrage und veröffentlicht eine Nachricht in Pub/Sub:
Die HTML-Vorlage
Die HTML-Vorlage ist die Grundlage für die HTML-Seite, die dem Nutzer angezeigt wird, damit er frühere Übersetzungen sehen und neue anfordern kann. Die Vorlage wird vom HTTP-Server mit der Liste der vorhandenen Übersetzungen ausgefüllt.
-
Das
<head>
-Element der HTML-Vorlage enthält Metadaten, Stylesheets und JavaScript für die Seite:Die Seite bindet CSS von Material Design Lite (MDL) und JavaScript-Assets ein. Mit MDL können Sie Ihren Websites einen Material Design-Look verleihen.
Mithilfe von JQuery wartet die Seite, bis das Dokument fertig geladen ist, und legt dann einen Handler für gesendete Formulare fest. Wenn das Formular zur Übersetzungsanfrage gesendet wird, bestätigt die Seite mithilfe einer minimalen Formularvalidierung, dass der Wert nicht leer ist, und sendet dann eine asynchrone Anfrage an den Endpunkt
/request-translation
.Schließlich wird an einer MDL-Snackbar angezeigt, ob die Anfrage erfolgreich war oder ob ein Fehler aufgetreten ist.
- Der HTML-Text der Seite verwendet ein MDL-Layout und mehrere MDL-Komponenten, um eine Liste der Übersetzungen und ein Formular zum Anfordern zusätzlicher Übersetzungen anzuzeigen:
App erstellen
-
Bevor Sie versuchen, die Webanwendung bereitzustellen, erstellen Sie die Anwendung, um sicherzustellen, dass sie kompiliert wird und alle Abhängigkeiten funktionieren.
go build -o start ./index
Der Build war erfolgreich, wenn nichts ausgegeben und eine
start
-Datei erstellt wurde.
Webanwendung bereitstellen
Mit der App Engine-Standardumgebung können Sie eine Anwendung erstellen und bereitstellen, die unter hoher Last und mit großen Datenmengen zuverlässig ausgeführt wird.
In dieser Anleitung wird das HTTP-Front-End in der App Engine-Standardumgebung bereitgestellt.
Die Datei app.yaml
konfiguriert die App Engine-Anwendung:
-
Stellen Sie Ihre Anwendung aus demselben Verzeichnis wie die Datei
app.yaml
in der App Engine-Standardumgebung bereit:gcloud app deploy
Anwendung testen
Fordern Sie nach dem Bereitstellen der Cloud Functions-Funktion und der App Engine-Anwendung eine Übersetzung an.
-
Geben Sie die folgende URL ein,um die App in Ihrem Browser aufzurufen:
https://PROJECT_ID.REGION_ID.r.appspot.com
Ersetzen Sie Folgendes:
PROJECT_ID
: Ihre Google Cloud-Projekt-IDREGION_ID
: Code, der Ihrer Anwendung von App Engine zugewiesen wird
Sie sehen eine Seite mit einer leeren Liste von Übersetzungen und einem Formular zum Anfordern neuer Übersetzungen.
-
Geben Sie im Feld Zu übersetzender Text einen Text ein, der übersetzt werden soll, z. B.
Hello, World
. - Wählen Sie in der Drop-down-Liste eine Sprache aus, in die Sie den Text übersetzen möchten.
- Klicken Sie auf Senden.
- Klicken Sie zum Aktualisieren der Seite auf Aktualisieren refresh. Die Übersetzungsliste enthält jetzt eine neue Zeile. Wenn Sie keine Übersetzung sehen, warten Sie einige Sekunden und versuchen es dann noch einmal. Ist immer noch keine Übersetzung zu sehen, lesen Sie den nächsten Abschnitt zum Debugging der Anwendung.
Fehler in der Anwendung beheben
Wenn Sie keine Verbindung zur App Engine-Anwendung herstellen können oder keine neuen Übersetzungen sehen, prüfen Sie Folgendes:
-
Prüfen Sie, ob die
gcloud
-Bereitstellungsbefehle erfolgreich ausgeführt wurden und keine Fehler ausgegeben haben. Wenn Fehler aufgetreten sind, beheben Sie sie, bevor Sie die Cloud Functions-Funktion und die App Engine-Anwendung noch einmal bereitstellen. -
Rufen Sie in der Google Cloud Console die Seite „Loganzeige“ auf.
Zur Seite „Loganzeige“- Klicken Sie in der Drop-down-Liste Kürzlich ausgewählte Ressourcen auf GAE-Anwendung und dann auf Alle Werte für module_id. Sie sehen eine Liste der Anfragen, die Sie beim Besuch Ihrer Anwendung gestellt haben. Wenn keine Anfragenliste angezeigt wird, bestätigen Sie, dass Sie Alle Werte für module_id aus der Drop-down-Liste ausgewählt haben. Wenn Fehlermeldungen in der Google Cloud Console angezeigt werden, prüfen Sie, ob der Code Ihrer Anwendung mit dem Code im Abschnitt zum Verständnis der Anwendung übereinstimmt.
-
Klicken Sie in der Drop-down-Liste Kürzlich ausgewählte Ressourcen auf Cloud Functions-Funktion und dann auf Alle Funktionsnamen. Daraufhin wird für jede angeforderte Übersetzung eine Funktion angezeigt. Wenn nicht, prüfen Sie, ob die Cloud Functions-Funktion und die App Engine-Anwendung dasselbe Pub/Sub-Thema verwenden:
- Prüfen Sie in der Datei
background/index/main.go
, ob dietopicName
-Konstante"translate"
lautet. - Geben Sie beim Bereitstellen der Cloud Functions-Funktion unbedingt das Flag
--trigger-topic=translate
an.
- Prüfen Sie in der Datei
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Google Cloud-Projekt löschen
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
App Engine-Instanz löschen
- Rufen Sie in der Google Cloud Console die Seite Versionen für App Engine auf.
- Klicken Sie auf das Kästchen für die nicht standardmäßige Anwendungsversion, die Sie löschen möchten.
- Klicken Sie zum Löschen der Anwendungsversion auf Löschen.
Cloud Functions-Funktion löschen
-
Löschen Sie die Cloud Functions-Funktion, die Sie in dieser Anleitung erstellt haben:
gcloud functions delete Translate
Nächste Schritte
- Weitere Cloud Functions-Anleitungen testen
- Mehr über App Engine erfahren
- Cloud Run testen, um zustandslose Container in einer vollständig verwalteten Umgebung oder im eigenen Google Kubernetes Engine-Cluster auszuführen.