Crea un workflow utilizzando Terraform

Questa guida rapida mostra come creare, distribuire ed eseguire il tuo primo flusso di lavoro utilizzando Terraform. Terraform è uno strumento Infrastructure as Code che ti consente di creare, modificare e migliorare in modo prevedibile la tua infrastruttura cloud utilizzando il codice. Scopri come utilizzare Terraform per eseguire il provisioning dell'infrastruttura su Google Cloud.

In questa guida rapida, il flusso di lavoro di esempio invia una richiesta a un'API pubblica e poi restituisce la risposta dell'API.

Completerai le seguenti attività:

  1. Abilita l'API Workflows utilizzando Terraform.
  2. Crea un account di servizio per il flusso di lavoro utilizzando Terraform.
  3. Definisci ed esegui il deployment di un workflow utilizzando Terraform.
  4. Esegui il flusso di lavoro utilizzando Google Cloud CLI.

Prima di iniziare

I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, vedi Sviluppare applicazioni in un ambiente Google Cloud vincolato.

Tieni presente che Cloud Shell ha già Terraform integrato. Se devi installare Terraform, consulta la documentazione di HashiCorp Terraform.

  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. Install the Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

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

    • 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. Verify that billing is enabled for your Google Cloud project.

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

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  8. Install the Google Cloud CLI.

  9. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  10. Per inizializzare gcloud CLI, esegui questo comando:

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

    • 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.

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

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

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  14. Crea un file di configurazione Terraform

    Crea un file di configurazione Terraform denominato main.tf e includi le risorse del provider Google per Terraform utilizzate in questa guida rapida.

    Tieni presente che puoi utilizzare l'interpolazione per le sostituzioni come variabili di riferimento, attributi delle risorse e funzioni di chiamata.

    1. Creare una directory:

      mkdir terraform
    2. Vai alla directory terraform:

      cd terraform
    3. Aggiungi un nuovo file, main.tf, alla directory:

      nano main.tf
    4. Aggiungi le seguenti risorse al file main.tf:

      1. Assegna l'ID del progetto:

        provider "google" {
        project = "PROJECT_ID"
        }

        Sostituisci PROJECT_ID con l'ID del tuo progetto.

      2. Abilita l'API Workflows:

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

      3. Crea un account di servizio per il flusso di lavoro:

        # Create a dedicated service account
        resource "google_service_account" "default" {
          account_id   = "sample-workflows-sa"
          display_name = "Sample Workflows Service Account"
        }

      4. Definisci il workflow utilizzando la risorsa google_workflows_workflow:

        # Create a workflow
        resource "google_workflows_workflow" "default" {
          name            = "sample-workflow"
          region          = "us-central1"
          description     = "A sample workflow"
          service_account = google_service_account.default.id
        
          deletion_protection = false # set to "true" in production
        
          labels = {
            env = "test"
          }
          user_env_vars = {
            url = "https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam"
          }
          source_contents = <<-EOF
          # This is a sample workflow that you can replace with your source code
          #
          # The workflow does the following:
          # - Retrieves the current date from a public API and stores the
          #   response in `currentDate`
          # - Retrieves a list of Wikipedia articles from a public API related
          #   to the day of the week stored in `currentDate`
          # - Returns the list of articles in the workflow output
          #
          # Note that when you define workflows in Terraform, variables must be
          # escaped with two dollar signs ($$) and not a single sign ($)
        
          - getCurrentDate:
              call: http.get
              args:
                  url: $${sys.get_env("url")}
              result: currentDate
          - readWikipedia:
              call: http.get
              args:
                  url: https://en.wikipedia.org/w/api.php
                  query:
                      action: opensearch
                      search: $${currentDate.body.dayOfWeek}
              result: wikiResult
          - returnOutput:
              return: $${wikiResult.body[1]}
        EOF
        
          depends_on = [google_project_service.default]
        }
        

Nel flusso di lavoro di esempio vengono utilizzati i seguenti argomenti:

  • name: il nome del flusso di lavoro.
  • region: la posizione del flusso di lavoro.
  • description: una descrizione del tuo flusso di lavoro.
  • service_account: l'indirizzo email o l'ID univoco del account di servizio associato all'ultima versione del flusso di lavoro. Questo account di servizio rappresenta l'identità del workflow e determina le autorizzazioni di cui dispone. Se non specifichi un account di servizio durante la creazione del workflow, quest'ultimo utilizza il account di servizio Compute Engine predefinito per la sua identità. Per ulteriori informazioni, vedi Concedi l'autorizzazione dei workflow per l'accesso alle Google Cloud risorse.
  • labels: un elenco di coppie di etichette chiave-valore da assegnare a questo flusso di lavoro che ti aiuta a organizzare le istanze Google Cloud . Per ulteriori informazioni, vedi Che cosa sono le etichette?
  • user_env_vars: variabili di ambiente definite dall'utente associate a questa revisione del flusso di lavoro. Per ulteriori informazioni, vedi Utilizzare le variabili di ambiente.
  • source_contents: il codice di Workflows da eseguire. Per il limite delle dimensioni dei file, vedi Limiti delle risorse.

Altri argomenti facoltativi includono:

  • crypto_key_name: l'ID risorsa per una chiave Cloud Key Management Service nel seguente formato:

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

    Per saperne di più, vedi Utilizzare le chiavi di crittografia gestite dal cliente.

  • call_log_level: il livello di logging da applicare alle chiamate e alle risposte alle chiamate durante le esecuzioni di questo flusso di lavoro. I valori possibili sono:

    • CALL_LOG_LEVEL_UNSPECIFIED
    • LOG_ALL_CALLS
    • LOG_ERRORS_ONLY
    • LOG_NONE

    Per ulteriori informazioni, vedi Registrazione delle chiamate.

  • project: l'ID del progetto a cui appartiene la risorsa. Se non viene fornito, viene utilizzato il progetto del fornitore.

  • name_prefix: crea un nome univoco che inizia con il prefisso specificato. Se questo e name non sono specificati, viene scelto un valore casuale per il nome.

Crea ed esegui il flusso di lavoro

Esegui il deployment delle risorse Terraform per creare il flusso di lavoro ed eseguilo.

  1. Inizializza Terraform nella directory:

    terraform init
  2. Verifica che le modifiche che proponi con Terraform corrispondano al piano previsto:

    terraform plan

    Puoi ignorare la nota relativa al mancato utilizzo dell'opzione -out.

  3. Crea il workflow:

    terraform apply
  4. Al prompt Inserisci un valore, digita yes per procedere con la creazione delle risorse.

  5. Verifica che sia stato creato un flusso di lavoro:

    gcloud workflows list --location us-central1

    L'output dovrebbe essere simile al seguente:

    NAME                                                                    STATE   REVISION_ID  UPDATE_TIME
    projects/project-name/locations/us-central1/workflows/sample-workflow   ACTIVE  000001-f9a   2024-02-24T13:38:58.353765906Z
  6. (Facoltativo) Puoi eseguire il flusso di lavoro:

    gcloud workflows execute sample-workflow

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il progetto Google Cloud con le risorse.

  1. Elimina tutte le risorse che hai creato con Terraform:
    terraform destroy
  2. Elimina il flusso di lavoro creato:
    gcloud workflows delete sample-workflow
    Quando ti viene chiesto se vuoi continuare, digita y.
  3. In alternativa, puoi eliminare il tuo progetto Google Cloud per evitare addebiti. L'eliminazione del tuo progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate al suo interno.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

Passaggi successivi