1. Übersicht
In diesem Lab erstellen Sie einen Cloud Run-Job und richten einen Cloud Scheduler-Job ein. Sie stellen Cymbal Eats Menu Service mithilfe des Setupskripts bereit. Sie erstellen einen Cloud Run-Job, der API-Aufrufe an den Cymbal Eats Menu Service sendet. 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 Protokolle prüfen und API-Aufrufe an den Menu Service senden, um zu bestätigen, dass die Menüpunkte 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 sie abgeschlossen ist.
Dienst bereinigen
Der Bereinigungsdienstjob ruft Menüelemente mit dem Status „Fehlgeschlagen“ ab und löscht sie. Beim Erstellen neuer Speisen und Getränke werden die Bilder mit der Vision API analysiert, um festzustellen, ob es sich um eine Speise handelt oder nicht. Bei Images, die diese Validierung nicht bestehen, wird der Status der Menüpunkte 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
- Ausführung von Jobs prüfen
Vorbereitung
- Für dieses Lab wird davon ausgegangen, dass Sie mit der Cloud Console und mit Shell-Umgebungen vertraut sind.
- Frühere Erfahrungen 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 Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
- Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und 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 dich auf die Projekt-ID beziehen, die üblicherweise als
PROJECT_ID
gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen 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. Dieses Codelab sollte ohne großen Aufwand betrieben werden. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion von 300$.
Umgebung einrichten
Aktivieren Sie Cloud Shell, indem Sie auf das Symbol rechts neben der Suchleiste 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 mithilfe des Setupskripts für Cloud Run bereit. Der Menüdienst ist ein Java-basierter Mikrodienst, der mit dem Quarkus-Framework erstellt wurde und als Back-End die Postgres-Datenbank von Cloud SQL verwendet. Der Menüdienst ist eine Laufzeitabhängigkeit für den Cloud Run-Job, den Sie in den folgenden Schritten erstellen.
./setup.sh
Es dauert etwa 10 Minuten, bis alle erforderlichen Komponenten erstellt sind.
Nachdem Sie den obigen Befehl ausgeführt haben, fahren Sie mit den nächsten Schritten fort.
3. Cloud Run-Jobcode kennenlernen
Klicken Sie auf das Pluszeichen, um einen neuen Tab in Cloud Shell zu öffnen.
Wechseln Sie in das Verzeichnis, das den Bereinigungsdienst enthält, und überprü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 Bereinigungsdienstjob 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 eigentliche Bereinigungsskript, das unten aufgeführt ist, 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 für das Skript:
- 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, bis Elemente mit Fehlern gelöscht werden.MENU_SERVICE_URL
– URL des Speiseangebots von Cymbal Eats
4. Cloud Run-Job erstellen
Als Nächstes erstellen Sie ein Container-Image und veröffentlichen es in Artifact Registry.
Dieses Container-Image wird zum Erstellen eines Cloud Run-Jobs verwendet.
Aktivieren Sie Dienst-APIs:
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, um Docker-Images für den Bereinigungsjob zu speichern:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
Erstellen Sie das Container-Image mit Cloud Build und übertragen Sie es mit einem einzigen Befehl an Artifact Registry:
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 der 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 [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 Abschnitt JOBS von Cloud Run auf und prüfen Sie den erstellten Job.
Klicken Sie auf den Job und sehen Sie sich die verfügbaren Tabs an: HISTORY, LOGS, CONFIGURATION und YAML.
Überprüfen Sie, ob die Umgebungsvariablen festgelegt wurden. Sehen Sie sich dazu in der Konsole den Abschnitt CONFIGURATION des Jobs an:
Optional: Wenn Sie die URL-Variablen für das Attribut „Alter fehlgeschlagen“ oder den Menüdienst ä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 den Job 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 dann das Alter des Artikels und die URL für die Speisekartenservice-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 Arbeit mit einem Cloud Scheduler-Job besteht darin, jeden Job mit separaten Anmeldedaten auszuführen. Erstellen Sie in diesem Schritt ein Dienstkonto, das vom Bereinigungsplaner verwendet wird.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
Der Cloud Scheduler-Job benötigt Berechtigungen zum Aufrufen von Cloud Run-Jobs.
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 Planerjob mit dem HTTP-Zieltyp.
Zu Demonstrationszwecken planen Sie eine 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:
REGION
undPROJECT_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 Planerjob zu überprüfen:
Sehen Sie sich die verfügbaren Optionen im Menü „Aktionen“ an.
6. Cloud Run-Job testen
Prüfen Sie die vorhandenen Menüpunkte und ihren Status mithilfe der Menu Service-Endpunkte:
curl ${MENU_SERVICE_URL}/menu | jq
Ausgabe:
Sie sehen 3 Menüpunkte im Status „Ready
“.
Ändere den Status von Menüpunkt Nr. 1 zu Failed
:
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äß den Einstellungen des FAILED_ITEM_AGE
-Parameters 1 Minute alt sein.
Sie können die nächste geplante Ausführung abwarten oder die Jobausführung über die Console erzwingen.
Es gibt mehrere Möglichkeiten, einen Job über die Benutzeroberfläche oder die Befehlszeile auszulösen.
In diesem Beispiel führen Sie den Befehl in Cloud Shell aus(Option 3), um den Job auszulösen.
- Wählen Sie in Cloud Scheduler die Option „Jobausführung erzwingen“ aus. aus dem Menü „Aktionen“ aus.
- Klicken Sie in Cloud Run Job auf „AUSFÜHREN“. Schaltfläche.
- In Cloud Shell mit dem folgenden Befehl:
gcloud beta run jobs execute cleanup-service --region=$REGION
Gehen Sie zum Abschnitt „Cloud Run-JOBS“, öffnen Sie den Tab LOGS und prüfen Sie, ob der Menüpunkt gelöscht wurde.
Logs nach „Löschen“ filtern um die Protokolle zu finden.
Verwenden Sie die Menu Service-Endpunkte, um vorhandene Menüpunkte über den REST-Endpunkt zu prüfen.
curl ${MENU_SERVICE_URL}/menu | jq
Ausgabe:
Sie sehen zwei Menüpunkte im Status „Ready
“.
7. Glückwunsch!
Glückwunsch, du hast das Codelab abgeschlossen.
Behandelte Themen:
- Cloud Run-Jobs erstellen
- Cloud Run-Jobs ausführen
- Cloud Scheduler-Jobs erstellen
- So prüfen Sie die Ausführung von Jobs
Nächste Schritte:
Weitere Codelabs von Cymbal Eats:
- Cloud Workflows mit Eventarc auslösen
- Ereignisverarbeitung aus Cloud Storage auslösen
- Verbindung zu Private CloudSQL über Cloud Run herstellen
- Verbindung zu vollständig verwalteten Datenbanken über Cloud Run herstellen
- Sichere serverlose Anwendung mit Identity-Aware Proxy (IAP)
- Sichere Bereitstellung in Cloud Run
- Eingehenden Cloud Run-Traffic sichern
- Verbindung zu privater AlloyDB über 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.