Creare un trigger utilizzando Terraform

Questo documento descrive come utilizzare Terraform e la risorsa google_eventarc_trigger per creare attivatori Eventarc per le seguenti destinazioni: Google Cloud

Per ulteriori informazioni sull'utilizzo di Terraform, consulta la documentazione di Terraform su Google Cloud.

Gli esempi di codice in questa guida indirizzano gli eventi diretti da Cloud Storage, ma possono essere adattati a qualsiasi provider di eventi. Ad esempio, per scoprire come instradare gli eventi diretti da Pub/Sub a Cloud Run, consulta la guida introduttiva di Terraform.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.

    Enable the APIs

  7. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  8. Terraform è integrato nell'ambiente Cloud Shell e puoi utilizzare Cloud Shell per eseguire il deployment delle risorse Terraform senza dover installare Terraform.

Prepararsi a eseguire il deployment di Terraform

Prima di eseguire il deployment di qualsiasi risorsa Terraform, devi creare un file di configurazione Terraform. Un file di configurazione Terraform ti consente di definire lo stato finale preferito per l'infrastruttura utilizzando la sintassi di Terraform.

Prepara Cloud Shell

In Cloud Shell, imposta il progetto Google Cloud predefinito in cui vuoi applicare le configurazioni Terraform. Devi eseguire questo comando una sola volta per progetto e puoi farlo in qualsiasi directory:

export GOOGLE_CLOUD_PROJECT=PROJECT_ID

Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.

Tieni presente che le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione di Terraform deve avere una propria directory (detta anche modulo principale). In Cloud Shell, crea una directory e un nuovo file al suo interno:

mkdir DIRECTORY && cd DIRECTORY && touch main.tf

Il nome del file deve avere l'estensione .tf. Ad esempio, in questo documento il file è indicato come main.tf.

Definisci la configurazione Terraform

Copia gli esempi di codice Terraform applicabili nel file main.tf appena creato. Se vuoi, puoi copiare il codice da GitHub. Questa procedura è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

In genere, applichi l'intera configurazione contemporaneamente. Tuttavia, puoi anche scegliere come target una risorsa specifica. Ad esempio:

terraform apply -target="google_eventarc_trigger.default"

Tieni presente che i sample di codice Terraform utilizzano l'interpolazione per le sostituzioni, ad esempio variabili di riferimento, attributi delle risorse e chiamate funzioni.

Abilita API

In genere, i sample di Terraform presuppongono che le API richieste siano abilitate nel progetto Google Cloud. Utilizza il seguente codice per abilitare le API:

Cloud Run

# Enable Cloud Run API
resource "google_project_service" "run" {
  service            = "run.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

GKE

# Enable GKE API
resource "google_project_service" "container" {
  service            = "container.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

Workflow

# Enable Workflows API
resource "google_project_service" "workflows" {
  service            = "workflows.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

Crea un account di servizio e configurane l'accesso

Ogni attivatore Eventarc è associato a un account di servizio IAM al momento della creazione. Utilizza il seguente codice per creare un account di servizio dedicato e concedere all'account di servizio gestito dall'utente ruoli Identity and Access Management specifici per gestire gli eventi:

Cloud Run

# Used to retrieve project information later
data "google_project" "project" {}

# Create a dedicated service account
resource "google_service_account" "eventarc" {
  account_id   = "eventarc-trigger-sa"
  display_name = "Eventarc Trigger Service Account"
}

# Grant permission to receive Eventarc events
resource "google_project_iam_member" "eventreceiver" {
  project = data.google_project.project.id
  role    = "roles/eventarc.eventReceiver"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

# Grant permission to invoke Cloud Run services
resource "google_project_iam_member" "runinvoker" {
  project = data.google_project.project.id
  role    = "roles/run.invoker"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

L'agente di servizio Pub/Sub viene creato automaticamente quando viene attivata l'API Pub/Sub. Se l'agente di servizio Pub/Sub è stato creato il giorno 8 aprile 2021 o in una data precedente e l'account di servizio non ha il ruolo Agente di servizio Cloud Pub/Sub (roles/pubsub.serviceAgent), concedi all'agente di servizio il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator). Per ulteriori informazioni, consulta Creare e concedere ruoli agli agenti di servizio.

resource "google_project_iam_member" "tokencreator" {
  project  = data.google_project.project.id
  role     = "roles/iam.serviceAccountTokenCreator"
  member   = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
}

GKE

  1. Prima di creare l'account di servizio, abilita Eventarc per gestire i cluster GKE:

    # Used to retrieve project_number later
    data "google_project" "project" {}
    
    # Enable Eventarc to manage GKE clusters
    # This is usually done with: gcloud eventarc gke-destinations init
    #
    # Eventarc creates a separate Event Forwarder pod for each trigger targeting a
    # GKE service, and  requires explicit permissions to make changes to the
    # cluster. This is done by granting permissions to a special service account
    # (the Eventarc P4SA) to manage resources in the cluster. This needs to be done
    # once per Google Cloud project.
    
    # This identity is created with: gcloud beta services identity create --service eventarc.googleapis.com
    # This local variable is used for convenience
    locals {
      eventarc_sa = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-eventarc.iam.gserviceaccount.com"
    }
    
    resource "google_project_iam_member" "computeViewer" {
      project = data.google_project.project.id
      role    = "roles/compute.viewer"
      member  = local.eventarc_sa
    }
    
    resource "google_project_iam_member" "containerDeveloper" {
      project = data.google_project.project.id
      role    = "roles/container.developer"
      member  = local.eventarc_sa
    }
    
    resource "google_project_iam_member" "serviceAccountAdmin" {
      project = data.google_project.project.id
      role    = "roles/iam.serviceAccountAdmin"
      member  = local.eventarc_sa
    }
  2. Crea l'account di servizio:

    # Create a service account to be used by GKE trigger
    resource "google_service_account" "eventarc_gke_trigger_sa" {
      account_id   = "eventarc-gke-trigger-sa"
      display_name = "Evenarc GKE Trigger Service Account"
    }
    
    # Grant permission to receive Eventarc events
    resource "google_project_iam_member" "eventreceiver" {
      project = data.google_project.project.id
      role    = "roles/eventarc.eventReceiver"
      member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
    }
    
    # Grant permission to subscribe to Pub/Sub topics
    resource "google_project_iam_member" "pubsubscriber" {
      project = data.google_project.project.id
      role    = "roles/pubsub.subscriber"
      member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
    }
    

Workflow

# Used to retrieve project information later
data "google_project" "project" {}

# Create a service account for Eventarc trigger and Workflows
resource "google_service_account" "eventarc" {
  account_id   = "eventarc-workflows-sa"
  display_name = "Eventarc Workflows Service Account"
}

# Grant permission to invoke Workflows
resource "google_project_iam_member" "workflowsinvoker" {
  project = data.google_project.project.id
  role    = "roles/workflows.invoker"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

# Grant permission to receive events
resource "google_project_iam_member" "eventreceiver" {
  project = data.google_project.project.id
  role    = "roles/eventarc.eventReceiver"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

# Grant permission to write logs
resource "google_project_iam_member" "logwriter" {
  project = data.google_project.project.id
  role    = "roles/logging.logWriter"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

L'agente di servizio Pub/Sub viene creato automaticamente quando viene attivata l'API Pub/Sub. Se l'agente di servizio Pub/Sub è stato creato il giorno 8 aprile 2021 o in una data precedente e l'account di servizio non dispone del ruolo Agente di servizio Cloud Pub/Sub (roles/pubsub.serviceAgent), concedi all'agente di servizio il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator). Per ulteriori informazioni, consulta Creare e concedere ruoli agli agenti di servizio.

resource "google_project_iam_member" "tokencreator" {
  project  = data.google_project.project.id
  role     = "roles/iam.serviceAccountTokenCreator"
  member   = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
}

Creare un bucket Cloud Storage come fornitore di eventi

Utilizza il seguente codice per creare un bucket Cloud Storage e concedi il ruolo Editore Pub/Sub (roles/pubsub.publisher) all'agente di servizio Cloud Storage.

Cloud Run

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-cloudrun-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = google_cloud_run_v2_service.default.location
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish pub/sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
}

GKE

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-gke-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = "us-central1"
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish pub/sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
}

Workflow

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-workflows-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = google_workflows_workflow.default.region
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish Pub/Sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
}

Crea un ricevitore di eventi da utilizzare come target dell'evento

Crea un destinatario di eventi utilizzando una delle seguenti risorse Terraform:

Cloud Run

Crea un servizio Cloud Run come destinazione evento per l' trigger Eventarc:

# Deploy Cloud Run service
resource "google_cloud_run_v2_service" "default" {
  name     = "hello-events"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # This container will log received events
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.eventarc.email
  }

  depends_on = [google_project_service.run]
}

GKE

Per semplificare questa guida, crea un servizio Google Kubernetes Engine come destinazione degli eventi al di fuori di Terraform, tra l'applicazione delle configurazioni Terraform.

  1. Se non hai mai creato un attivatore in questo progetto Google Cloud, esegui il seguente comando per creare l'agente di servizio Eventarc:

    gcloud beta services identity create --service eventarc.googleapis.com
  2. Crea un cluster GKE:

    # Create an auto-pilot GKE cluster
    resource "google_container_cluster" "gke_cluster" {
      name     = "eventarc-cluster"
      location = "us-central1"
    
      enable_autopilot = true
    
      depends_on = [
        google_project_service.container
      ]
    }
  3. Esegui il deployment di un servizio Kubernetes su GKE che riceverà richieste HTTP e registrerà eventi utilizzando un'immagine Cloud Run predefinita,us-docker.pkg.dev/cloudrun/container/hello:

    1. Recupera le credenziali di autenticazione per interagire con il cluster:

      gcloud container clusters get-credentials eventarc-cluster \
         --region=us-central1
      
    2. Crea un deployment denominato hello-gke:

      kubectl create deployment hello-gke \
         --image=us-docker.pkg.dev/cloudrun/container/hello
      
    3. Esponi il deployment come servizio Kubernetes:

      kubectl expose deployment hello-gke \
         --type ClusterIP --port 80 --target-port 8080
      
    4. Assicurati che il pod sia in esecuzione:

      kubectl get pods
      

      L'output dovrebbe essere simile al seguente:

      NAME                         READY   STATUS    RESTARTS   AGE
      hello-gke-5b6574b4db-rzzcr   1/1     Running   0          2m45s
      

      Se STATUS è Pending o ContainerCreating, il pod è in fase di implementazione. Attendi un minuto per il completamento del deployment e controlla di nuovo lo stato.

    5. Assicurati che il servizio sia in esecuzione:

      kubectl get svc
      

      L'output dovrebbe essere simile al seguente:

      NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
      hello-gke    ClusterIP   34.118.230.123   <none>        80/TCP    4m46s
      kubernetes   ClusterIP   34.118.224.1     <none>        443/TCP   14m
      

Workflow

Esegui il deployment di un flusso di lavoro che viene eseguito quando un oggetto viene aggiornato nel bucket Cloud Storage:

# Create a workflow
resource "google_workflows_workflow" "default" {
  name            = "storage-workflow-tf"
  region          = "us-central1"
  description     = "Workflow that returns information about storage events"
  service_account = google_service_account.eventarc.email

  deletion_protection = false # set to "true" in production

  # Note that $$ is needed for Terraform
  source_contents = <<EOF
  main:
    params: [event]
    steps:
      - log_event:
          call: sys.log
          args:
            text: $${event}
            severity: INFO
      - gather_data:
          assign:
            - bucket: $${event.data.bucket}
            - name: $${event.data.name}
            - message: $${"Received event " + event.type + " - " + bucket + ", " + name}
      - return_data:
          return: $${message}
  EOF

  depends_on = [
    google_project_service.workflows
  ]
}

Definire un trigger Eventarc

Un trigger Eventarc instrada gli eventi da un provider di eventi a una destinazione di eventi. Utilizza la risorsa google_eventarc_trigger per specificare gli attributi CloudEvents in matching_criteria e filtrare gli eventi. Per ulteriori informazioni, segui le istruzioni quando crei un attivatore per un provider, un tipo di evento e una destinazione specifici. Gli eventi che corrispondono a tutti i filtri vengono inviati alla destinazione.

Cloud Run

Crea un trigger Eventarc che inoltra gli eventi di Cloud Storage al servizio hello-event Cloud Run.

# Create an Eventarc trigger, routing Cloud Storage events to Cloud Run
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-cloudrun-tf"
  location = google_cloud_run_v2_service.default.location

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to Cloud Run
  destination {
    cloud_run_service {
      service = google_cloud_run_v2_service.default.name
      region  = google_cloud_run_v2_service.default.location
    }
  }

  service_account = google_service_account.eventarc.email
  depends_on = [
    google_project_service.eventarc,
    google_project_iam_member.pubsubpublisher
  ]
}

GKE

Crea un trigger Eventarc che instrada gli eventi di Cloud Storage al servizio GKE hello-gke.

# Create an Eventarc trigger, routing Storage events to GKE
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-gke-tf"
  location = "us-central1"

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to GKE service
  destination {
    gke {
      cluster   = "eventarc-cluster"
      location  = "us-central1"
      namespace = "default"
      path      = "/"
      service   = "hello-gke"
    }
  }

  service_account = google_service_account.eventarc_gke_trigger_sa.email
}

Workflow

Crea un trigger Eventarc che inoltra gli eventi di Cloud Storage al flusso di lavoro denominato storage-workflow-tf.

# Create an Eventarc trigger, routing Cloud Storage events to Workflows
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-workflows-tf"
  location = google_workflows_workflow.default.region

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to Workflows
  destination {
    workflow = google_workflows_workflow.default.id
  }

  service_account = google_service_account.eventarc.email

  depends_on = [
    google_project_service.eventarc,
    google_project_service.workflows,
  ]
}

Applica Terraform

Utilizza l'interfaccia a riga di comando Terraform per eseguire il provisioning dell'infrastruttura in base al file di configurazione.

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

  1. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.

    terraform init

    Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade
  2. Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:

    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  3. Applica la configurazione di Terraform eseguendo il seguente comando e inserendo yes al prompt:

    terraform apply

    Attendi che Terraform mostri il messaggio "Applicazione completata".

Verifica la creazione delle risorse

Cloud Run

  1. Verifica che il servizio sia stato creato:

    gcloud run services list --region us-central1
    
  2. Verifica che l'attivatore sia stato creato:

    gcloud eventarc triggers list --location us-central1
    

    L'output dovrebbe essere simile al seguente:

    NAME: trigger-storage-cloudrun-tf
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: Cloud Run service: hello-events
    ACTIVE: Yes
    LOCATION: us-central1
    

GKE

  1. Verifica che il servizio sia stato creato:

    kubectl get service hello-gke
    
  2. Verifica che l'attivatore sia stato creato:

    gcloud eventarc triggers list --location us-central1
    

    L'output dovrebbe essere simile al seguente:

    NAME: trigger-storage-gke-tf
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: GKE: hello-gke
    ACTIVE: Yes
    LOCATION: us-central1
    

Workflow

  1. Verifica che il flusso di lavoro sia stato creato:

    gcloud workflows list --location us-central1
    
  2. Verifica che l'trigger Eventarc sia stato creato:

    gcloud eventarc triggers list --location us-central1
    

    L'output dovrebbe essere simile al seguente:

    NAME: trigger-storage-workflows-tf
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: Workflows: storage-workflow-tf
    ACTIVE: Yes
    LOCATION: us-central1
    

Generare e visualizzare un evento

Puoi generare un evento e verificare che l'trigger Eventarc funzioni come previsto.

  1. Recupera il nome del bucket Cloud Storage che hai creato in precedenza:

    gcloud storage ls
    
  2. Carica un file di testo nel bucket Cloud Storage:

    echo "Hello World" > random.txt
    gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
    

    Sostituisci BUCKET_NAME con il nome del bucket Cloud Storage recuperato nel passaggio precedente. Ad esempio:

    gcloud storage cp random.txt gs://BUCKET_NAME/random.txt

    Il caricamento genera un evento e il servizio di ricezione di eventi registra il messaggio dell'evento.

  3. Verifica che venga ricevuto un evento:

    Cloud Run

    1. Filtra le voci di log create dal tuo servizio:

      gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
      
    2. Cerca una voce di log simile alla seguente:

      Received event of type google.cloud.storage.object.v1.finalized.
      Event data: { "kind": "storage#object", "id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
      

    GKE

    1. Trova l'ID pod:

      POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
      

      Questo comando utilizza l'output formattato di kubectl.

    2. Controlla i log del pod:

      kubectl logs $POD_NAME
      
    3. Cerca una voce di log simile alla seguente:

      {"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message":
      "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
      

    Workflow

    1. Verifica che sia stata attivata un'esecuzione del flusso di lavoro elencando le ultime cinque esecuzioni:

      gcloud workflows executions list storage-workflow-tf --limit=5
      

      L'output deve includere un elenco di esecuzioni con NAME, STATE, START_TIME e END_TIME.

    2. Visualizza i risultati dell'esecuzione più recente:

      EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)")
      gcloud workflows executions describe $EXECUTION_NAME
      
    3. Verifica che l'output sia simile al seguente:

      ...
      result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"'
      startTime: '2024-12-13T17:23:50.451316533Z'
      state: SUCCEEDED
      ...
      

Esegui la pulizia

Rimuovi le risorse applicate in precedenza con la configurazione Terraform eseguendo il seguente comando e inserendo yes al prompt:

terraform destroy

Puoi anche eliminare il progetto Google Cloud per evitare addebiti. L'eliminazione del progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate all'interno del progetto.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi