1. Übersicht
In diesem Lab erstellen Sie einen Cloud Run-Job und richten einen Cloud Scheduler-Job ein. Sie stellen den Menüdienst von Cymbal Eats mit dem Einrichtungsskript bereit. Sie erstellen einen Cloud Run-Job, der API-Aufrufe an den Cymbal Eats-Menüdienst sendet. Sie führen den Job mit der Google Cloud CLI aus und legen einen Zeitplan für den Job fest. Sie prüfen die Ausführung, indem Sie Logs prüfen und API-Aufrufe an den Menüdienst senden, um zu bestätigen, dass Menüpunkte gelöscht wurden.
Was sind Cloud Run-Jobs?
In einem Cloud Run-Job wird ein Container ausgeführt, der keine Webanfragen verarbeitet, sondern betriebliche Aufgaben oder die Datenverarbeitung ausführt. Der Container führt die Aufgabe aus und wird nach Abschluss beendet.
Bereinigungsauftrag
Der Job des Bereinigungsdienstes ruft Menüpunkte mit dem Status „Fehlgeschlagen“ ab und löscht sie. Wenn neue Menüpunkte erstellt werden, werden die Bilder mit der Vision API analysiert, um zu erkennen, ob es sich um ein Lebensmittel handelt oder nicht. Bei Bildern, die diese Validierung nicht bestehen, wird der Status der Menüelemente auf „Fehlgeschlagen“ aktualisiert und anschließend durch den Bereinigungsjob gelöscht.
Lerninhalte
In diesem Lab lernen Sie Folgendes:
- Cloud Run-Jobs erstellen
- Cloud Run-Jobs ausführen
- Cloud Scheduler-Jobs erstellen
- Jobausführung prüfen
Vorbereitung
- Für dieses Lab wird davon ausgegangen, dass Sie mit der Cloud Console und mit Shell-Umgebungen vertraut sind.
- Vorkenntnisse mit Cloud Run und Cloud Scheduler sind hilfreich, aber nicht erforderlich.
2. Einrichtung und Anforderungen
Cloud-Projekt einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie ein Konto erstellen.
- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es ist ein Zeichenstring, der von Google APIs nicht verwendet wird. Sie können ihn jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und kann nach der Festlegung nicht mehr geändert werden. In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise spielt es keine Rolle, wie er lautet. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (normalerweise als
PROJECT_ID
gekennzeichnet). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige generieren. Alternativ können Sie Ihr eigenes Gerät testen, um zu sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Ausführung dieses Codelabs sollte nur wenige Kosten verursachen, wenn überhaupt. Wenn Sie die Ressourcen deaktivieren möchten, damit keine Kosten über diese Anleitung hinaus anfallen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neuen Nutzern der Google Cloud Platform steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.
Umgebung einrichten
Klicken Sie zum Aktivieren von Cloud Shell auf das Symbol rechts neben der Suchleiste.
Führen Sie in Cloud Shell den folgenden Befehl aus, um den Anwendungscode aus diesem Repository zu klonen und zum Verzeichnis mit dem Menüdienst zu wechseln:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
Stellen Sie den Menüdienst mit dem Einrichtungsskript in Cloud Run bereit. Der Menüdienst ist ein Java-basierter Microservice, der mit dem Quarkus-Framework erstellt wurde und die Cloud SQL Postgres-Datenbank als Back-End verwendet. Der Menüdienst ist eine Laufzeitabhängigkeit für den Cloud Run-Job, den Sie in den folgenden Schritten erstellen.
./setup.sh
Die Bereitstellung dauert etwa 10 Minuten, bis alle erforderlichen Komponenten erstellt sind.
Fahren Sie nach Ausführung des Befehls oben mit den nächsten Schritten fort.
3. Cloud Run-Jobcode
Öffnen Sie einen neuen Tab in Cloud Shell, indem Sie auf das Pluszeichen klicken.
Rufen Sie das Verzeichnis mit dem Bereinigungsdienst auf und prüfen Sie die Dateien, aus denen der Job besteht:
cd ~/cymbal-eats/cleanup-service
Der Cleanup-Dienst in diesem Verzeichnis enthält eine Dockerfile
, die das Container-Image für den Cleanup-Dienstjob mit den erforderlichen Abhängigkeiten(httpie, jq) definiert.
Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
Das unten aufgeführte Bereinigungsskript enthält Befehle, mit denen eine Liste der Menüelemente mit dem Status „Fehlgeschlagen“ abgerufen und durch API-Aufrufe an den Menüdienst gelöscht werden kann.
script.sh
echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
Beachten Sie Folgendes:
- Die Umgebungsvariablen
FAILED_ITEM_AGE
undMENU_SERVICE_URL
werden während der Bereitstellung festgelegt und vom Cloud Run-Job übergeben. FAILED_ITEM_AGE
– Anzahl der Minuten, nach denen das fehlgeschlagene Element gelöscht wird.MENU_SERVICE_URL
: URL des Cymbal Eats-Speisekartendienstes.
4. Cloud Run-Job erstellen
Als Nächstes erstellen Sie ein Container-Image und veröffentlichen es in der Artifact Registry.
Dieses Container-Image wird verwendet, um einen Cloud Run-Job zu erstellen.
APIs für Dienste aktivieren:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudscheduler.googleapis.com \
--quiet
Legen Sie Umgebungsvariablen fest:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
Erstellen Sie ein neues Artifact Registry-Repository zum Speichern von Docker-Images für den Bereinigungsjob:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
Mit einem Befehl ein Container-Image mit Cloud Build erstellen und in die Artifact Registry verschieben:
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest
Beispielausgabe:
DURATION: 35S SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more) STATUS: SUCCESS
Rufen Sie nach der Veröffentlichung Artifact Registry auf und prüfen Sie das veröffentlichte Image:
Wechseln Sie zurück zum zweiten Cloud Shell-Tab. Führen Sie den folgenden Befehl aus, um den Menüdienst zu beschreiben und die URL in einer Umgebungsvariablen zu speichern. Mit dieser Umgebungsvariablen wird der Cloud Run-Job konfiguriert.
MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
Erstellen Sie einen Cloud Run-Job, um fehlgeschlagene Menüelemente zu bereinigen, die älter als 1 Minute sind [von FAILED_ITEM_AGE
festgelegt].
gcloud beta run jobs create cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Beispielausgabe:
Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1] OK Creating job... Done. Done. Job [cleanup-service] has successfully been created.
Rufen Sie in der Console den Bereich „JOBS“ für Cloud Run auf und sehen Sie sich den erstellten Job an.
Klicken Sie auf den Job und sehen Sie sich die verfügbaren Tabs an: VERLÄUF, LOGS, Konfiguration und YAML.
Prüfen Sie in der Console im Abschnitt KONFIGURATION des Jobs, ob die Umgebungsvariablen festgelegt wurden:
Optional: Wenn Sie die Variablen „Failed Item Age“ oder „Menu Service URL“ ändern möchten, nachdem der Cloud Run-Job erstellt wurde, können Sie den Befehl „update“ verwenden:
gcloud beta run jobs update cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Führen Sie den Cloud Run-Job mit dem folgenden Befehl aus, um ihn zu validieren:
gcloud beta run jobs execute cleanup-service --region=$REGION
Beispielausgabe:
OK Creating execution... Done. OK Provisioning resources... Done. Execution [cleanup-service-rlxs4] has successfully started running. View details about this execution by running: gcloud beta run jobs executions describe cleanup-service-rlxs4
Wechseln Sie zum Tab LOGS, um die Ausgabe des Jobs zu überprüfen. In den Protokollen sollten das Alter des fehlgeschlagenen Artikels und die URL des Menüdienstes angezeigt werden.
5. Zeitplan für Cloud Run-Job einrichten
Cloud Scheduler ist ein vollständig verwalteter Cronjob-Planer für Unternehmen. Sie können damit praktisch jeden Job planen, einschließlich Batchjobs, Big-Data-Jobs, Cloudinfrastrukturvorgängen usw.
Eine Sicherheitsbest Practice bei der Arbeit mit einem Cloud Scheduler-Job besteht darin, jeden Job mit separaten Anmeldedaten auszuführen. Erstellen Sie in diesem Schritt ein Dienstkonto, das vom Job zum Bereinigen des Zeitplaners verwendet werden soll.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
Der Cloud Scheduler-Job benötigt Berechtigungen, um Cloud Run-Jobs aufzurufen.
Weisen Sie dem Dienstkonto, das im Cloud Scheduler-Job verwendet wird, die Rolle Cloud Run Invoker
zu:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Als Nächstes richten Sie einen Zeitplan für die Ausführung des Jobs für den Bereinigungsdienst ein.
Cloud Scheduler unterstützt mehrere Zieltypen.
- HTTP
- Pub/Sub
- App Engine HTTP
Sie erstellen einen Scheduler-Job mit dem HTTP-Zieltyp.
Zu Demonstrationszwecken legen Sie fest, dass er alle 5 Minuten ausgeführt werden soll.
gcloud scheduler jobs create http cleanup-schedule \
--location $REGION \
--schedule="*/5 * * * *" \
--uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
--http-method POST \
--oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
Parameter uri
, der zum Aufrufen des Cloud Run-Jobs verwendet wird:
REGION
undPROJECT_ID
: Cloud Run-Region und Projekt-ID, in der der Job für den Bereinigungsdienst bereitgestellt wirdcleanup-service
– Name des Cloud Run-Jobs
Rufen Sie in der Console Cloud Scheduler auf, um den erstellten Scheduler-Job zu überprüfen:
Im Menü „Aktionen“ findest du die verfügbaren Optionen.
6. Cloud Run-Job testen
Über die Endpunkte des Menüdienstes können Sie vorhandene Menüpunkte und ihren Status prüfen:
curl ${MENU_SERVICE_URL}/menu | jq
Ausgabe:
Sie sehen drei Menüpunkte mit dem Status Ready
.
Status des Menüpunkts 1 in Failed
ändern:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
Warten Sie eine Minute. Damit der Menüpunkt gelöscht werden kann, muss er gemäß dem Parameter FAILED_ITEM_AGE
eine Minute alt sein.
Sie können auf die nächste geplante Ausführung warten oder die Jobausführung über die Console erzwingen.
Es gibt mehrere Möglichkeiten, einen Job auszulösen: über die Benutzeroberfläche oder über die Befehlszeile.
Führen Sie in diesem Beispiel einen Befehl in Cloud Shell(Option 3) aus, um den Job auszulösen.
- In Cloud Scheduler können Sie im Menü „Aktionen“ die Option „Jobausführung erzwingen“ auswählen.
- Klicken Sie unter Cloud Run-Job auf die Schaltfläche „EXECUTE“ (AUSFÜHREN).
- Führen Sie in Cloud Shell den folgenden Befehl aus:
gcloud beta run jobs execute cleanup-service --region=$REGION
Rufen Sie den Bereich „Cloud Run JOBS“ auf, öffnen Sie den Tab LOGS und prüfen Sie, ob der Menüpunkt gelöscht wurde.
Filtern Sie die Protokolle nach dem Keyword „deleting“, um die entsprechenden Protokolle zu finden.
Verwenden Sie die Endpunkte des Menüdienstes, um vorhandene Menüpunkte über den REST-Endpunkt zu prüfen.
curl ${MENU_SERVICE_URL}/menu | jq
Ausgabe:
Sie sehen zwei Menüpunkte mit dem Status Ready
.
7. Glückwunsch!
Herzlichen Glückwunsch, Sie haben das Codelab abgeschlossen.
Behandelte Themen:
- Cloud Run-Jobs erstellen
- Cloud Run-Jobs ausführen
- Cloud Scheduler-Jobs erstellen
- Jobausführung prüfen
Nächste Schritte:
Weitere Cymbal Eats-Codelabs:
- Cloud-Workflows mit Eventarc auslösen
- Ereignisverarbeitung über Cloud Storage auslösen
- Verbindung von Cloud Run zu Private CloudSQL herstellen
- Verbindung von Cloud Run zu vollständig verwalteten Datenbanken herstellen
- Serverlose Anwendung mit Identity-Aware Proxy (IAP) sichern
- Sichere Bereitstellung in Cloud Run
- Cloud Run-Eingangstraffic sichern
- Verbindung von GKE Autopilot zu privatem AlloyDB herstellen
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.