Auf dieser Seite wird beschrieben, wie Sie Cloud Run-Jobs mit 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 Berechtigungen zu erhalten, die Sie für die auf dieser Seite beschriebenen Vorgänge benötigen:
- 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 mit Cloud 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, erstellen Sie ein Dienstkonto. 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, um die Berechtigungen zu erhalten, die Ihr Dienstkonto zum Ausführen von Jobs benötigt. 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 das noch nicht getan haben.
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
main.py-Datei und 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 ein Job namens
test-jobjeden Tag um 2:00 Uhr ausgeführt. Alle Fehler beim Starten der Jobausführung werden in den Logs des Dienstes angezeigt.Wenn Sie mehrere Zeitpläne für mehrere Jobs erstellen möchten, aktualisieren Sie die
cron-Datei mit allen Jobs, die Sie ausführen möchten, sowie den zugehörigen Zeitplänen. 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 Jobplaner-Dienst bereit:
gcloud run deploy JOB_NAME \ --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-NAME: Der Name Ihres Cloud Run-Jobs.
- PROJECT_ID: Ihre Projekt-ID.
- REGION: Die Region für Ihren Cloud Run-Job, zum
Beispiel:
europe-west1.
Nächste Schritte
Nachdem Sie dieses Feature verwendet haben, können Sie Folgendes tun: