Cronjob mit Terraform planen und ausführen

In dieser Kurzanleitung erfahren Sie, wie Sie mit Terraform einen Cloud Scheduler-Cron-Job erstellen. Terraform ist ein IaC-Tool (Infrastructure as Code), mit dem Sie Ihre Cloud-Infrastruktur mithilfe von Code vorhersehbar erstellen, ändern und verbessern können. Weitere Informationen zur Verwendung von Terraform zum Bereitstellen von Infrastruktur auf Google Cloud

Cloud Scheduler hat ein kostenloses Kontingent. Die Ausführung dieser Kurzanleitung sollte daher keine Kosten verursachen. Weitere Informationen finden Sie unter Preise.

In dieser Kurzanleitung werden folgende Schritte erläutert:

  1. Mit Terraform einen Cronjob für Cloud Scheduler erstellen
  2. Legen Sie einen wiederkehrenden Zeitplan für den Job fest.
  3. ein Pub/Sub-Thema als Jobziel angeben
  4. Führen Sie den Job aus.
  5. prüfen, ob der Job erfolgreich ausgeführt wurde

Hinweise

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Install the Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Install the Google Cloud CLI.

  7. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  8. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  9. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Cloud Shell ist in Terraform bereits integriert. Wenn Sie Terraform installieren müssen, lesen Sie die HashiCorp Terraform-Dokumentation.
  11. Terraform-Konfigurationsdatei erstellen

    Wenn Sie Terraform mit Cloud Scheduler verwenden möchten, müssen Sie eine Konfigurationsdatei erstellen, um Ihre Infrastruktur zu beschreiben und einen Ausführungsplan zu erstellen. Anschließend wenden Sie die Konfigurationsdatei auf Ihre Plattform oder Ihren Dienst an, um Vorgänge zur Bereitstellung Ihrer Infrastruktur auszuführen.

    Führen Sie die folgenden Schritte aus, um eine Terraform-Konfigurationsdatei namens main.tf zu erstellen:

    1. Öffnen Sie ein Terminal und erstellen Sie ein Verzeichnis:

      mkdir terraform
    2. Wechseln Sie in das Verzeichnis terraform:

      cd terraform
    3. Fügen Sie dem Verzeichnis die neue Datei main.tf hinzu:

      nano main.tf
    4. Fügen Sie der Datei main.tf die folgenden Terraform-Provider für Google Cloud-Ressourcen hinzu:

      1. Aktivieren Sie die Cloud Scheduler API und die Pub/Sub API:

        # Enable Cloud Scheduler API
        resource "google_project_service" "scheduler" {
          service            = "cloudscheduler.googleapis.com"
          disable_on_destroy = false
        }
        # Enable Pub/Sub API
        resource "google_project_service" "pubsub" {
          service            = "pubsub.googleapis.com"
          disable_on_destroy = false
        }
      2. Erstellen Sie ein Pub/Sub-Thema als Ressource, an die Nachrichten von Publishern gesendet werden können:

        # Create Pub/Sub topic
        resource "google_pubsub_topic" "default" {
          name = "pubsub_topic"
        }

        Dadurch wird ein Thema namens pubsub_topic erstellt.

      3. Erstellen Sie ein Abo, um Nachrichten zu empfangen, die im Pub/Sub-Thema veröffentlicht werden:

        # Create Pub/Sub subscription
        resource "google_pubsub_subscription" "default" {
          name  = "pubsub_subscription"
          topic = google_pubsub_topic.default.name
        }
      4. Erstellen Sie einen Cronjob mit der Ressource google_cloud_scheduler_job:

        # Create a cron job using Cloud Scheduler
        resource "google_cloud_scheduler_job" "default" {
          name        = "test-job"
          description = "test job"
          schedule    = "30 16 * * 7"
          region      = "us-central1"
        
          pubsub_target {
            topic_name = google_pubsub_topic.default.id
            data       = base64encode("Hello world!")
          }
        }

        Im Beispiel werden die folgenden Argumente verwendet:

        • name: Der Name des Jobs.
        • description: Eine Beschreibung des Jobs.
        • schedule: Die Häufigkeit für den Job in einem Format, das auf Unix-Cron basiert.

          In diesem Beispiel bedeutet 30 16 * * 7, dass der Job sonntags um 16:30 Uhr ausgeführt wird. Weitere Informationen finden Sie unter Cronjob-Format und Zeitzone.

        • region: Die Region, in der sich der Job befindet.

        • pubsub_target: Das Pub/Sub-Thema als Ziel, einschließlich des vollständigen Ressourcennamens des Themas (topic_name), in dem die Nutzlast der Nachricht (data) veröffentlicht wird, wenn der Job ausgeführt wird.

        Andere Argumente werden unterstützt. Weitere Informationen finden Sie in der Argumentreferenz für die Terraform-Registry.

    Cronjob erstellen

    Stellen Sie Ihre Terraform-Ressourcen bereit, um den Cron-Job zu erstellen.

    1. Öffnen Sie ein Terminal und initialisieren Sie Terraform im Verzeichnis terraform:

      terraform init
    2. Prüfen Sie, ob die vorgeschlagenen Änderungen mit Terraform dem erwarteten Plan entsprechen:

      terraform plan

      Sie können die Notiz zum Verwenden der Option -out ignorieren.

    3. Cronjob erstellen:

      terraform apply
    4. Geben Sie bei der Eingabeaufforderung Wert eingeben yes ein, um mit dem Erstellen der Ressourcen fortzufahren.

    5. Prüfen Sie, ob ein Job erstellt wurde:

      gcloud scheduler jobs describe test-job --location=us-central1

      Die Ausgabe sollte in etwa so aussehen:

      description: test job
      lastAttemptTime: '2024-04-04T13:56:00.669530Z'
      name: projects/PROJECT_ID/locations/us-central1/jobs/test-job
      pubsubTarget:
      data: dGVzdA==
      topicName: projects/PROJECT_ID/topics/pubsub_topic
      schedule: '30 16 * * 7'
      scheduleTime: '2024-04-04T13:58:00.737907Z'
      state: ENABLED

    Sie haben einen Job erstellt, der sonntags um 16:30 Uhr eine Nachricht an ein Pub/Sub-Thema sendet. Sie können den Job jetzt ausführen.

    Job ausführen

    Sie können Ihren Job nicht nur gemäß dem angegebenen Zeitplan ausführen, sondern auch sofort ausführen lassen, indem Sie den folgenden Befehl ausführen.

    gcloud scheduler jobs run test-job --location=us-central1

    Aufgrund der Erstkonfiguration kann es einige Minuten dauern, bis der erste Job, der in einem Projekt erstellt wurde, ausgeführt wird.

    Die Ergebnisse prüfen

    Prüfen Sie, ob Ihr Pub/Sub-Thema Nachrichten von Ihrem Job empfängt.

    1. Rufen Sie mit dem folgenden Befehl Pub/Sub-Nachrichten aus einem Abo ab:

      gcloud pubsub subscriptions pull pubsub_subscription --limit 5
      

      Wenn keine Nachrichten abgerufen werden, führen Sie den Befehl noch einmal aus.

    2. Sehen Sie sich die Ergebnisse des ausgeführten Jobs an. Die Ausgabe sollte ungefähr so aussehen:

      DATA: Hello world!
      MESSAGE_ID: 5028933846601543
      ORDERING_KEY:
      ATTRIBUTES:
      DELIVERY_ATTEMPT:
      ACK_ID: RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQAgVPAihdeTFXLkFacGhRDRlyfWB9[...]
      

    Bereinigen

    Löschen Sie das Google Cloud -Projekt zusammen mit den Ressourcen, damit Ihrem Google Cloud -Konto die auf dieser Seite verwendeten Ressourcen nicht in Rechnung gestellt werden.

    1. Wenn Sie Ihr Google Cloud -Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet. Standardmäßig bleiben alle Dateien in Ihrem Cloud Shell-Basisverzeichnis (z. B. alle Terraform-Dateien) zwischen den Sitzungen erhalten.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID
    2. Alternativ können Sie alle Ressourcen löschen, die Sie mit Terraform erstellt haben.

      Mit dem Befehl terraform destroy werden alle Ressourcen beendet, die in Ihrem Terraform-Zustand angegeben sind. Es werden keine Ressourcen zerstört, die nicht vom aktuellen Terraform-Projekt verwaltet werden. Ihre Terraform-Konfigurationsdatei wird nicht gelöscht. Weitere Informationen finden Sie unter Infrastruktur zerstören.

      terraform destroy

    Nächste Schritte