Dienste nach Zeitplan ausführen

Mit Cloud Scheduler können Sie einen Cloud Run-Dienst sicher nach Zeitplan starten. Der Vorgang ähnelt einem Cronjob.

Mögliche Anwendungsfälle sind:

  • Daten in regelmäßigen Zeitabständen sichern
  • Wiederkehrende Verwaltungsaufgaben durchführen, wie:
    • Sitemap noch einmal erstellen
    • Alte Daten, Inhalte, Konfigurationen oder Überarbeitungen löschen
    • Inhalte zwischen Datensystemen synchronisieren
    • Tägliche E-Mail-Benachrichtigungen verarbeiten
    • Zugriff auf nachgelagerte Dienste verifizieren und entsprechende Berichte erstellen
  • Dokumente generieren, z. B. Rechnungen

In dieser Anleitung wird gezeigt, wie Cloud Scheduler mit Cloud Run sicher im selben Google Cloud-Projekt verwendet werden kann.

Hinweis

Aktivieren Sie die Cloud Scheduler API für das Projekt, das Sie verwenden.

Dienst erstellen und bereitstellen

So erstellen Sie Dienste und stellen sie bereit:

  1. Implementieren Sie in Ihrem Dienst den Job, den Sie nach einem Zeitplan ausführen möchten.

  2. Notieren Sie sich, von welchem Anfragetyp der Dienst die Jobanfragen erwartet, z. B. von GET oder POST. Wenn Sie den geplanten Job erstellen, der Ihren Dienst aufruft, müssen Sie die entsprechende HTTP-Methode angeben.

  3. Achten Sie beim Bereitstellen des Dienstes, den Sie mit Cloud Scheduler verwenden, darauf, keine nicht authentifizierten Aufrufe zuzulassen.

Dienstkonto für Cloud Scheduler erstellen

Sie müssen ein Dienstkonto erstellen, das mit Cloud Scheduler verknüpft werden soll, und diesem Dienstkonto die Berechtigung zum Aufrufen Ihres Cloud Run-Dienstes erteilen. Sie können ein vorhandenes Dienstkonto verwenden, um Cloud Scheduler darzustellen, oder ein neues erstellen.

So erstellen Sie ein Dienstkonto und erteilen ihm die Berechtigung zum Aufrufen des Cloud Run-Dienstes:

Console

  1. Rufen Sie in der Cloud Console die Seite Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

  3. Geben Sie einen Dienstkontonamen ein, der in der Cloud Console angezeigt werden soll.

    Die Cloud Console generiert anhand dieses Namens eine Dienstkonto-ID. Bearbeiten Sie gegebenenfalls die ID. Sie können die ID später nicht mehr ändern.

  4. Optional: Geben Sie eine Beschreibung für das Dienstkonto ein.

  5. Klicken Sie auf Erstellen.

  6. Klicken Sie auf das Feld Rolle auswählen.

  7. Wählen Sie unter Alle Rollen die Option Cloud Run > Cloud Run Invoker aus.

  8. Klicken Sie auf Fertig.

Befehlszeile

  1. Erstellen Sie das Dienstkonto:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
       --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"

    Ersetzen Sie

    • SERVICE_ACCOUNT_NAME durch einen Namen in Kleinbuchstaben, der in Ihrem Google Cloud-Projekt eindeutig ist, z. B. my-invoker-service-account-name.
    • DISPLAYED_SERVICE_ACCOUNT_NAME durch den Namen, den Sie für dieses Dienstkonto anzeigen möchten, z. B. in der Konsole wie etwa My Invoker Service Account.
  2. Erteilen Sie Ihrem Dienstkonto für Cloud Run die Berechtigung, den Dienst aufzurufen:

    gcloud run services add-iam-policy-binding SERVICE \
       --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --role=roles/run.invoker

    Ersetzen Sie:

    • SERVICE durch den Namen des Dienstes, der von Cloud Scheduler aufgerufen werden soll.
    • SERVICE_ACCOUNT_NAME durch den Namen des Dienstkontos.
    • PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

Cloud Scheduler-Job erstellen

Sie müssen einen Job erstellen, der Ihren Dienst zu bestimmten Zeiten aufruft. Sie können entweder die Konsole oder die Befehlszeile verwenden:

Jobs werden entweder in der Konsole oder in der gcloud-Befehlszeile erstellt. Klicken Sie auf den entsprechenden Tab:

Konsole

  1. Gehen Sie in der Konsole zur Cloud Scheduler-Seite.

    Zu Cloud Scheduler

  2. Klicken Sie auf Job erstellen.

    Screenshot

  3. Geben Sie einen Namen für den Job an.

  4. Geben Sie an, mit welcher Häufigkeit bzw. in welchem Intervall der Job ausgeführt werden soll. Verwenden Sie dafür einen Konfigurationsstring. Beispiel: Bei Angabe des Strings 0 */3 * * * wird der Job alle 3 Stunden ausgeführt. Hier kann jeder beliebige mit Crontab kompatible String angegeben werden.

    Weitere Informationen finden Sie unter Jobzeitpläne konfigurieren.

  5. Wählen Sie aus der Drop-down-Liste die Zeitzone für die Jobhäufigkeit aus.

  6. Geben Sie HTTP als Ziel an:

    1. Geben Sie die voll qualifizierte URL Ihres Dienstes an, z. B. https://myservice-abcdef-uc.a.run.app. Der Job sendet Anfragen an diese URL.

    2. Geben Sie die HTTP-Methode an: Die Methode muss mit dem übereinstimmen, was der zuvor bereitgestellte Cloud Run-Dienst erwartet. Der Standardwert ist POST.

    3. Geben Sie optional die Daten an, die an das Ziel gesendet werden sollen. Die Daten werden im Anfragetext gesendet, wenn die HTTP-Methode POST oder PUT ausgewählt wurde.

    4. Klicken Sie auf Mehr, um die Authentifizierungseinstellungen anzuzeigen.

    5. Wählen Sie im Drop-down-Menü die Option OIDC-Token hinzufügen aus.

    6. Kopieren Sie im Feld Dienstkonto die E-Mail-Adresse des zuvor erstellten Dienstkontos.

    7. Kopieren Sie im Feld Zielgruppe die vollständige URL Ihres Dienstes.

  7. Klicken Sie auf Erstellen, um den Job zu erstellen und zu speichern.

Befehlszeile

  1. Erstellen Sie den Job:

    gcloud scheduler jobs create http test-job --schedule "5 * * * *" \
       --http-method=HTTP-METHOD \
       --uri=SERVICE-URL \
       --oidc-service-account-email=SERVICE-ACCOUNT-EMAIL   \
       --oidc-token-audience=SERVICE-URL

    Ersetzen Sie:

    • HTTP-METHOD durch die HTTP-Methode, z. B. GET, POST, PUT usw.
    • SERVICE-URL durch Ihre Dienst-URL.
    • SERVICE-ACCOUNT-EMAIL durch die E-Mail-Adresse Ihres Dienstkontos.

Ihr Cloud Run-Dienst wird durch eine Anfrage des Cloud Scheduler-Jobs in der von Ihnen definierten Häufigkeit ausgelöst. Sie können dies in den Logs für diesen Dienst prüfen und überwachen.

Nächste Schritte