Jobs nach Zeitplan ausführen

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:

  1. Erstellen Sie ein neues Verzeichnis mit dem Namen cloud-run-jobs-sched und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:

    mkdir cloud-run-jobs-sched
    cd cloud-run-jobs-sched
  2. 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
  3. 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
  4. 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)))
  5. 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
  6. 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-job jeden 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
    ...
  7. 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: