1. Einführung
Übersicht
Wenn sich Ihr GCP-Projekt in einem VPC SC-Perimeter befindet, müssen Sie zusätzliche Schritte ausführen, um geplante Jobs einzurichten. Da Cloud Scheduler Jobs innerhalb von VPC SC-Perimetern nicht direkt auslösen kann, müssen Sie die Anfrage über eine andere Komponente weiterleiten. Wir empfehlen, einen Cloud Run-Dienst als Proxy zu verwenden.
Die Architektur sieht so aus:
Aufgaben in diesem Lab
- Cloud Run-Job nach Zeitplan innerhalb eines VPC SC-Perimeters ausführen
- Cloud Run-Dienst erstellen, der mithilfe der Cloud Run-Clientbibliotheken einen Cloud Run-Job auslöst
- Cloud Scheduler so konfigurieren, dass ein Cloud Run-Dienst nach Zeitplan aufgerufen wird
2. Hinweis
Prüfen Sie zuerst, ob Sie die Schritte zur Einrichtung von Cloud Run für VPC Service Controls ausgeführt haben.
Legen Sie als Nächstes Umgebungsvariablen fest, die in diesem Codelab verwendet werden.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION> AR_REPO=sample-job-repo CLOUD_RUN_SERVICE=job-runner-service CLOUD_RUN_JOB=sample-job CLOUD_SCHEDULER=job-scheduler SERVICE_ACCOUNT="cloud-run-invoker-sa" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com NETWORK=default SUBNET=default
3. Cloud Run-Job erstellen
In diesem Codelab wird der Beispielcontainer für Cloud Run-Jobs verwendet.
Erstellen Sie zuerst ein Artifact Registry-Repository für Ihren Cloud Run-Jobcontainer.
gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"
Kopieren Sie als Nächstes den Beispielcontainer für Cloud Run-Jobs in eine Artifact Registry in Ihrem mit VPC SC konfigurierten Projekt. Sie können dazu das gcrane-Tool verwenden. Folgen Sie dazu dieser Installationsanleitung. Weitere Informationen zu gcrane finden Sie in der Dokumentation zum Kopieren von Images zwischen Repositories.
gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest
Zweitens: Stellen Sie Ihren Cloud Run-Job bereit, der VPC Service Controls entspricht.
gcloud run jobs create $CLOUD_RUN_JOB --region $REGION \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest \ --network=$NETWORK \ --subnet=$SUBNET \ --vpc-egress=all-traffic
Weitere Informationen zum Erstellen von Jobs finden Sie in der Dokumentation zu Cloud Run-Jobs.
4. Dienstkonto erstellen
Dieses Dienstkonto wird von Cloud Run zum Aufrufen des Cloud Run-Jobs verwendet.
Erstellen Sie zuerst das Dienstkonto mit dem folgenden Befehl:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run to run a Cloud Run job"
Zweitens gewähren Sie dem Dienstkonto die Rolle „Cloud Run-Aufrufer“ und die Rolle „Cloud Run-Betrachter“.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.viewer
5. Cloud Run-Dienst erstellen
In diesem Schritt stellen Sie einen Cloud Run-Dienst bereit, der als Proxy dient.
mkdir job-runner-service && cd $_
Erstellen Sie eine Datei mit dem Namen main.py
und folgendem Code.
import os from flask import Flask app = Flask(__name__) # pip install google-cloud-run from google.cloud import run_v2 @app.route('/') def hello(): client = run_v2.JobsClient() # UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME' print("Triggering job...") request = run_v2.RunJobRequest(name=job_name) operation = client.run_job(request=request) response = operation.result() print(response) return "Done!" if __name__ == '__main__': app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Erstellen Sie eine Datei mit dem Namen requirements.txt
und folgendem Code.
google-cloud-run flask
Erstellen Sie zum Schluss eine Dockerfile
.
FROM python:3.9-slim-buster # for logging purposes ENV PYTHONUNBUFFERED=True WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["python3", "main.py"]
Erstellen Sie den Container mit den folgenden Docker-Befehlen. Quellbasierte Bereitstellungen können in einer VPC SC-Umgebung schwierig einzurichten sein. Wenn Sie bereits eine Build- und Bereitstellungspipeline haben, verwenden Sie diese, um den Quellcode in einem Container zu erstellen und den Container als Cloud Run-Dienst bereitzustellen.
docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE
Stellen Sie nun Ihren Cloud Run-Dienst bereit, der VPC Service Controls entspricht.
gcloud run deploy $CLOUD_RUN_SERVICE --region $REGION \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --network=$NETWORK \ --subnet=$SUBNET \ --vpc-egress=all-traffic \ --no-allow-unauthenticated \ --ingress internal
Speichern Sie die Dienstendpunkt-URL mit dem folgenden Befehl:
SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')
6. Cloud Scheduler-Job zum Auslösen des Dienstes erstellen
# create the Cloud Scheduler job gcloud scheduler jobs create http $CLOUD_SCHEDULER \ --location=$REGION \ --schedule="0 0 1 * *" \ --uri=$SERVICE_URL \ --http-method=GET \ --oidc-service-account-email=$SERVICE_ACCOUNT_ADDRESS
Nachdem der Cloud Scheduler-Job erstellt wurde, können Sie den folgenden Befehl ausführen, um ihn sofort zu Testzwecken auszuführen:
gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION
HINWEIS:
Es kann einige Minuten dauern, bis die Jobausführung abgeschlossen ist. Sie können den Status auf der Seite „Cloud Run Scheduler“ verfolgen.
Prüfen Sie mit den folgenden Befehlen, ob der Cloud Run-Job erfolgreich ausgeführt wurde:
EXECUTION_NAME=$(gcloud run jobs describe $CLOUD_RUN_JOB --region $REGION --format 'value(status.latestCreatedExecution.name)') gcloud run jobs executions describe $EXECUTION_NAME --region $REGION
Die Ausgabe sollte in etwa so aussehen:
✔ Execution sample-job-w6hrj in region us-central1 1 task completed successfully Elapsed time: 28 seconds
7. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs!
Behandelte Themen
- Cloud Run-Job nach Zeitplan innerhalb eines VPC SC-Perimeters ausführen
- Cloud Run-Dienst erstellen, der mithilfe der Cloud Run-Clientbibliotheken einen Cloud Run-Job auslöst
- Cloud Scheduler so konfigurieren, dass ein Cloud Run-Dienst nach Zeitplan aufgerufen wird
8. Bereinigen
Wenn Sie versehentliche Kosten vermeiden möchten, z. B. wenn die Cloud Run-Dienste versehentlich häufiger aufgerufen werden als Ihre monatliche Cloud Run-Aufrufzuweisung im kostenlosen Tarif, können Sie entweder die GCP-Dienste oder das in Schritt 2 erstellte Projekt löschen.
Wenn Sie den Cloud Run-Dienst und den Cloud Run-Job löschen möchten, rufen Sie die Cloud Run-Cloud Console unter https://console.cloud.google.com/run auf und löschen Sie den Dienst.
Wenn Sie das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das in Schritt 2 erstellte Projekt aus und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie die Projekte in Ihrem Cloud SDK ändern. Sie können eine Liste aller verfügbaren Projekte aufrufen, indem Sie gcloud projects list
ausführen.