1. Übersicht
In diesem Lab erstellen Sie einen Cloud Run-Job und richten einen Cloud Scheduler-Job ein. Sie stellen den Cymbal Eats Menu Service mit dem Einrichtungs-Script bereit. Sie erstellen einen Cloud Run-Job, mit dem API-Aufrufe an den Cymbal Eats Menu Service gesendet werden. Sie führen den Job mit der Google Cloud CLI aus und richten einen Zeitplan für den Job ein. Sie überprüfen die Ausführung, indem Sie Logs prüfen und API-Aufrufe an den Menüdienst senden, um zu bestätigen, dass Menüelemente gelöscht wurden.
Was sind Cloud Run-Jobs?
Ein Cloud Run-Job führt einen Container aus, der keine Webanfragen verarbeitet, sondern operative Aufgaben oder die Datenverarbeitung ausführt. Der Container führt die Aufgabe aus und wird beendet, wenn er fertig ist.
Job für Bereinigungsservice
Der Bereinigungsdienst ruft Menüelemente mit dem Status „Fehlgeschlagen“ ab und löscht sie. Wenn neue Menüpunkte erstellt werden, werden Bilder mit der Vision API analysiert, um festzustellen, ob es sich um ein Lebensmittel handelt. Bei Bildern, für die diese Validierung fehlschlägt, wird der Status der Menüelemente auf „Fehlgeschlagen“ aktualisiert und sie werden anschließend vom 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 in 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 eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als
PROJECT_IDangegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und 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
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.
Umgebung einrichten
Aktivieren Sie Cloud Shell, indem Sie rechts neben der Suchleiste auf das Symbol klicken.

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 Einrichtungs-Script in Cloud Run bereit. Der Menü-Dienst ist ein Java-basierter Microservice, der mit dem Quarkus-Framework und einer Cloud SQL Postgres-Datenbank als Backend erstellt wurde. 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, da alle erforderlichen Komponenten erstellt werden müssen.
Fahren Sie nach dem Ausführen des oben genannten Befehls mit den nächsten Schritten fort.
3. Cloud Run-Jobcode ansehen
Öffnen Sie einen neuen Tab in Cloud Shell, indem Sie auf das Pluszeichen klicken.

Rufen Sie das Verzeichnis mit dem Bereinigungsdienst auf und sehen Sie sich die Dateien an, aus denen der Job besteht:
cd ~/cymbal-eats/cleanup-service
Der Cleanup-Service in diesem Verzeichnis enthält eine Dockerfile, die das Container-Image für den Cleanup-Service-Job 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üpunkte mit dem Status „Fehler“ abgerufen und gelöscht wird. Dazu werden API-Aufrufe an den Menüdienst gesendet.
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 zum Skript:
- Die Umgebungsvariablen
FAILED_ITEM_AGEundMENU_SERVICE_URLwerden während der Bereitstellung festgelegt und vom Cloud Run-Job übergeben. FAILED_ITEM_AGE– Anzahl der Minuten, bevor ein fehlgeschlagenes Element gelöscht wird.MENU_SERVICE_URL: Die Dienst-URL für das Cymbal Eats-Menü.
4. Cloud Run-Job erstellen
Als Nächstes erstellen Sie ein Container-Image und veröffentlichen es in Artifact Registry.
Dieses Container-Image wird verwendet, um einen Cloud Run-Job zu erstellen.
Dienst-APIs 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
Container-Image mit Cloud Build erstellen und mit einem Befehl in Artifact Registry übertragen:
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
Nach der Veröffentlichung rufen Sie 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. Diese Umgebungsvariable wird zum Konfigurieren des Cloud Run-Jobs verwendet.
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 [festgelegt durch FAILED_ITEM_AGE].
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 JOBS-Bereich von 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: „HISTORY“ (VERLAUF), „LOGS“ (LOGS), „CONFIGURATION“ (KONFIGURATION) und „YAML“.

Prüfen Sie, ob Umgebungsvariablen festgelegt wurden. Sehen Sie sich dazu in der Console den Abschnitt KONFIGURATION des Jobs an:

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 Update-Befehl 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 prüfen. In den Logs sollten das Alter des fehlgeschlagenen Elements und die Menüdienst-URL 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 Best Practice für die Sicherheit bei der Verwendung von Cloud Scheduler-Jobs besteht darin, jeden Job mit separaten Anmeldedaten auszuführen. In diesem Schritt erstellen Sie ein Dienstkonto, das vom Bereinigungsplanerjob 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 Bereinigungsdienstjobs ein.
Cloud Scheduler unterstützt mehrere Zieltypen.
- HTTP
- Pub/Sub
- App Engine HTTP
Sie erstellen einen Scheduler-Job mit dem HTTP-Zieltyp.
Zu Demonstrationszwecken planen Sie die Ausführung alle 5 Minuten.
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
Prüfen Sie den Parameter uri, der zum Aufrufen des Cloud Run-Jobs verwendet wird:
REGIONundPROJECT_ID: Cloud Run-Region und Projekt-ID, in der der Bereinigungsdienstjob bereitgestellt wirdcleanup-service: Name des Cloud Run-Jobs
Rufen Sie in der Console Cloud Scheduler auf, um den erstellten Scheduler-Job zu prüfen:

Sehen Sie sich die verfügbaren Optionen im Menü „Aktionen“ an.

6. Cloud Run-Job testen
Mit den Menu Service-Endpunkten können Sie vorhandene Speisekartenpositionen und ihren Status prüfen:
curl ${MENU_SERVICE_URL}/menu | jq
Ausgabe:
Sie sehen drei Menüpunkte im Status Ready.
Ändere den Status von Menüpunkt 1 in Failed:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
Warte eine Minute. Damit das Menüelement gelöscht werden kann, muss es mindestens 1 Minute alt sein. Das wird durch den Parameter FAILED_ITEM_AGE festgelegt.
Sie können auf die nächste geplante Ausführung warten oder die Jobausführung über die Konsole erzwingen.
Es gibt mehrere Möglichkeiten, einen Job auszulösen, entweder über die Benutzeroberfläche oder über die Befehlszeile.
In diesem Beispiel wird der Befehl in Cloud Shell(Option 3) ausgeführt, um den Job auszulösen.
- Über Cloud Scheduler, indem Sie im Menü „Aktionen“ die Option „Jobausführung erzwingen“ auswählen.

- Klicken Sie unter Cloud Run-Job auf die Schaltfläche „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 (LOGS) und prüfen Sie, ob das Menüelement gelöscht wurde.

Filtern Sie die Logs nach dem Keyword „deleting“, um die Logs zu finden.

Mit den Menu Service-Endpunkten können Sie vorhandene Menüpunkte über den REST-Endpunkt prüfen.
curl ${MENU_SERVICE_URL}/menu | jq
Ausgabe:
Im Ready-Status werden zwei Menüelemente angezeigt.
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 Codelabs zu Cymbal Eats:
- Cloud Workflows mit Eventarc auslösen
- Ereignisverarbeitung über Cloud Storage auslösen
- Verbindung von Cloud Run zu privatem Cloud SQL herstellen
- Verbindung zu vollständig verwalteten Datenbanken über Cloud Run herstellen
- Serverlose Anwendung mit Identity-Aware Proxy (IAP) sichern
- Sichere Bereitstellung in Cloud Run
- Cloud Run-Ingress-Traffic sichern
- Verbindung zu privaten AlloyDB-Instanzen von GKE Autopilot 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.