Pub/Sub-Anleitung für Terraform

In dieser Anleitung wird gezeigt, wie Sie eine Pub/Sub-Funktion bereitstellen. Dazu laden Sie eine ZIP-Datei mit dem Funktionsquellcode in einen Cloud Storage-Bucket hoch und verwenden Terraform zum Bereitstellen der Ressourcen. Terraform ist ein Open Source-Tool, mit dem Sie Ressourcen mit deklarativen Konfigurationsdateien bereitstellen können. Google Cloud

In dieser Anleitung wird als Beispiel eine Funktion von Node.js verwendet. Sie funktioniert jedoch auch mit Python-, Go- und Java-Funktionen. Die Anleitungen sind identisch, unabhängig davon, welche dieser Laufzeiten Sie verwenden. Weitere Informationen zur Verwendung von Terraform mit der Cloud Functions v2 API finden Sie auf den Referenzseiten von HashiCorp.

Ziele

  • Erfahren Sie, wie Sie mit Terraform eine Pub/Sub-Funktion bereitstellen.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

For details, see Cloud Run functions pricing.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Verwenden Sie den Preisrechner.

Neuen Nutzern von Google Cloud steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Google Cloud-Nutzer sind, erstellen Sie ein Konto, um zu sehen, wie sich unsere Produkte in realen Szenarien schlagen. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Installieren Sie die Google Cloud CLI.

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

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

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Installieren Sie die Google Cloud CLI.

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

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

    gcloud init
  14. Wenn Sie die gcloud CLI bereits installiert haben, aktualisieren Sie sie mit dem folgenden Befehl:

    gcloud components update
  15. Weisen Sie dem Standarddienstkonto für Compute roles/run.invoker und die roles/cloudbuild.builds.builder zu.
  16. Bereiten Sie die Entwicklungsumgebung vor.

    Einrichtungsleitfaden für Node.js aufrufen

Umgebung einrichten

In dieser Anleitung führen Sie Befehle in Cloud Shell aus. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI einschließlich der Google Cloud-Befehlszeile vorinstalliert ist. Auch die Werte für Ihr aktuelles Projekt sind bereits festgelegt. Die Initialisierung von Cloud Shell kann mehrere Minuten dauern:

Cloud Shell öffnen

Anwendung vorbereiten

Führen Sie in Cloud Shell folgende Schritte aus:

  1. Klonen Sie das Repository der Beispielanwendung in Ihre Cloud Shell-Instanz:

    git clone https://github.com/terraform-google-modules/terraform-docs-samples.git
  2. Wechseln Sie in das Verzeichnis, das den Beispielcode für Cloud Run-Funktionen enthält:

    cd terraform-docs-samples/functions/pubsub

    Das in dieser Anleitung verwendete Node.js-Beispiel ist eine grundlegende Pub/Sub-Funktion "Hello World". Hier ist die Datei main.tf:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = ">= 4.34.0"
        }
      }
    }
    
    resource "random_id" "bucket_prefix" {
      byte_length = 8
    }
    
    
    resource "google_service_account" "default" {
      account_id   = "test-gcf-sa"
      display_name = "Test Service Account"
    }
    
    resource "google_pubsub_topic" "default" {
      name = "functions2-topic"
    }
    
    resource "google_storage_bucket" "default" {
      name                        = "${random_id.bucket_prefix.hex}-gcf-source" # Every bucket name must be globally unique
      location                    = "US"
      uniform_bucket_level_access = true
    }
    
    data "archive_file" "default" {
      type        = "zip"
      output_path = "/tmp/function-source.zip"
      source_dir  = "function-source/"
    }
    
    resource "google_storage_bucket_object" "default" {
      name   = "function-source.zip"
      bucket = google_storage_bucket.default.name
      source = data.archive_file.default.output_path # Path to the zipped function source code
    }
    
    resource "google_cloudfunctions2_function" "default" {
      name        = "function"
      location    = "us-central1"
      description = "a new function"
    
      build_config {
        runtime     = "nodejs22"
        entry_point = "helloPubSub" # Set the entry point
        environment_variables = {
          BUILD_CONFIG_TEST = "build_test"
        }
        source {
          storage_source {
            bucket = google_storage_bucket.default.name
            object = google_storage_bucket_object.default.name
          }
        }
      }
    
      service_config {
        max_instance_count = 3
        min_instance_count = 1
        available_memory   = "256M"
        timeout_seconds    = 60
        environment_variables = {
          SERVICE_CONFIG_TEST = "config_test"
        }
        ingress_settings               = "ALLOW_INTERNAL_ONLY"
        all_traffic_on_latest_revision = true
        service_account_email          = google_service_account.default.email
      }
    
      event_trigger {
        trigger_region = "us-central1"
        event_type     = "google.cloud.pubsub.topic.v1.messagePublished"
        pubsub_topic   = google_pubsub_topic.default.id
        retry_policy   = "RETRY_POLICY_RETRY"
      }
    }

Terraform initialisieren

Führen Sie im Verzeichnis terraform-docs-samples/functions/pubsub mit der Datei main.tf diesen Befehl aus, um die erforderlichen Plug-ins hinzuzufügen und das Verzeichnis .terraform zu erstellen:

terraform init

Terraform-Konfiguration validieren

Sehen Sie sich eine Vorschau der Terraform-Konfiguration an. Dieser Schritt ist optional, aber Sie können prüfen, ob die Syntax von main.tf korrekt ist. Dieser Befehl zeigt eine Vorschau der erstellten Ressourcen an:

terraform plan

Wenden Sie die Terraform-Konfiguration an:

Stellen Sie die Funktion bereit, indem Sie die Konfiguration anwenden. Geben Sie bei Aufforderung yes ein.

terraform apply

Funktion auslösen

So testen Sie die Pub/Sub-Funktion:

  1. Veröffentlichen Sie eine Nachricht zum Thema (in diesem Beispiel lautet der Themenname functions2-topic):

    gcloud pubsub topics publish TOPIC_NAME --message="Friend"
  2. Lesen Sie die Funktionslogs, um das Ergebnis anzuzeigen. FUNCTION_NAME ist der Name Ihrer Funktion (in diesem Beispiel lautet der Funktionsname function):

    gcloud functions logs read FUNCTION_NAME

    Die Logging-Ausgabe sollte die neue Nachricht "Friend" enthalten.

Bereinigen

Nachdem Sie die Anleitung abgeschlossen haben, können Sie alle erstellten Elemente löschen, sodass keine weiteren Kosten anfallen.

Mit Terraform können Sie alle in der Konfigurationsdatei definierten Ressourcen mit dem Befehl terraform destroy entfernen:

terraform destroy

Geben Sie yes ein, damit Terraform Ihre Ressourcen löschen kann.