Auf dieser Seite wird beschrieben, wie Sie Cloud Run-Jobs mit einem crontab nach einem Zeitplan ausführen.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen eine der folgenden IAM-Rollen für Ihren Cloud Run-Job zuzuweisen, um die für die auf dieser Seite beschriebenen Vorgänge erforderlichen Berechtigungen zu erhalten:
- So führen Sie Jobs mit der Google Cloud CLI aus: Cloud Run-Invoker (
roles/run.invoker) für den Cloud Run-Job. - So führen Sie Jobs mit der Cloud de Confiance Console aus, überschreiben Jobkonfigurationen oder brechen Jobausführungen ab: Cloud Run-Entwickler (
roles/run.developer) für den Cloud Run-Job.
Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihr Cloud Run-Job mitCloud de Confiance APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.
Dienstkonto Zugriff auf Ihr Projekt gewähren
Wenn Sie noch kein Dienstkonto für Ihren Cloud Run-Job erstellt haben, tun Sie dies jetzt. Beispiel:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ersetzen Sie SERVICE_ACCOUNT_NAME durch den Namen Ihres Dienstkontos, z. B. job-scheduler.
Bitten Sie Ihren Administrator, Ihrem Dienstkonto die Rolle Jobs Executor (roles/run.jobsExecutor) für Ihr Projekt zuzuweisen, damit Ihr Dienstkonto die Berechtigungen erhält, die zum Ausführen von Jobs erforderlich sind. Beispiel:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:job-scheduler@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role roles/run.jobsExecutor
Ersetzen Sie PROJECT_ID durch den Namen Ihrer Projekt-ID.
Hinweis
- Erstellen Sie einen Cloud Run-Job, falls Sie noch keinen erstellt haben.
Aktivieren Sie die Cloud Scheduler API für Ihr Projekt:
gcloud services enable cloudscheduler.googleapis.com
Cloud Run-Job für die zeitgesteuerte Ausführung konfigurieren
So führen Sie einen Cloud Run-Job nach einem Zeitplan aus:
Erstellen Sie ein neues Verzeichnis mit dem Namen
cloud-run-jobs-schedund ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
Erstellen Sie eine
Dockerfile-Datei und fügen Sie die folgenden Zeilen ein:FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:536.0.1 RUN apt-get update -y && \ apt-get install -y python3-dev python3-pip python3-venv && \ apt-get install -y cron ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ ENV VIRTUAL_ENV=/opt/venv RUN python3 -m venv $VIRTUAL_ENV ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN pip install --no-cache-dir -r requirements.txt # Set up the cron schedule. RUN crontab /app/cron CMD /app/entrypoint.sh
Erstellen Sie eine
entrypoint.sh-Datei und fügen Sie die folgenden Zeilen ein:gcloud config set project $PROJECT gcloud config set run/region $REGION cron gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Erstellen Sie eine Datei mit dem Namen
main.pyund fügen Sie den folgenden Python-Code ein:import os from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello World!" if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Erstellen Sie eine
requirements.txt-Datei und fügen Sie die folgenden Abhängigkeiten ein:Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
Erstellen Sie eine
cron-Datei in Ihrem Verzeichnis und fügen Sie einen Cron-Zeitplan hinzu, um den Job auszuführen. Beispiel:0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1
Mit diesem Befehl wird der Job
test-jobjeden Tag um 2:00 Uhr ausgeführt. Alle Fehler, die beim Starten der Jobausführung auftreten, werden in den Logs des Dienstes angezeigt.Wenn Sie mehrere Zeitpläne für mehrere Jobs erstellen möchten, aktualisieren Sie die Datei
cronmit allen Jobs, die Sie ausführen möchten, sowie dem zugehörigen Zeitplan. Beispiel:${cron_schedule} gcloud run jobs execute --async ${job_1} > /proc/1/fd/1 2>&1 ${cron_schedule} gcloud run jobs execute --async ${job_2} > /proc/1/fd/1 2>&1 ...
Stellen Sie den Job Scheduler-Dienst bereit:
gcloud run deploy JOB \ --source . \ --region REGION \ --set-env-vars PROJECT=PROJECT_ID,REGION=REGION \ --service-account SERVICE_ACCOUNT \ --no-allow-unauthenticated \ --min-instances=1 \ --no-cpu-throttling
Ersetzen Sie Folgendes:
JOB: Der Name Ihres Cloud Run-Jobs.REGION: Die Region für Ihren Cloud Run-Job, z. B.europe-west1.PROJECT_ID: Ihre Projekt-ID.SERVICE_ACCOUNT: Ihr Dienstkonto.
Nächste Schritte
Nachdem Sie dieses Feature verwendet haben, können Sie Folgendes tun: