Crie um fluxo de trabalho com o Terraform

Este início rápido mostra como criar, implementar e executar o seu primeiro fluxo de trabalho usando o Terraform. O Terraform é uma ferramenta de infraestrutura como código que lhe permite criar, alterar e melhorar de forma previsível a sua infraestrutura na nuvem através de código. Saiba como usar o Terraform para aprovisionar infraestrutura no Google Cloud.

Neste início rápido, o fluxo de trabalho de exemplo envia um pedido a uma API pública e, em seguida, devolve a resposta da API.

Vai concluir o seguinte:

  1. Ative a API Workflows através do Terraform.
  2. Crie uma conta de serviço para o fluxo de trabalho através do Terraform.
  3. Defina e implemente um fluxo de trabalho com o Terraform.
  4. Execute o fluxo de trabalho através da Google Cloud CLI.

Antes de começar

As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.

Tenha em atenção que o Cloud Shell já tem o Terraform integrado. Se precisar de instalar o Terraform, consulte a documentação do 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 estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte 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 estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  10. Para inicializar a CLI gcloud, execute o seguinte 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. Crie um ficheiro de configuração do Terraform

    Crie um ficheiro de configuração do Terraform denominado main.tf e inclua os recursos do fornecedor Google para o Terraform usados neste início rápido.

    Tenha em atenção que pode usar a interpolação para substituições, como variáveis de referência, atributos de recursos e funções de chamadas.

    1. Crie um diretório:

      mkdir terraform
    2. Aceda ao diretório terraform:

      cd terraform
    3. Adicione um novo ficheiro, main.tf, ao diretório:

      nano main.tf
    4. Adicione os seguintes recursos ao ficheiro main.tf:

      1. Atribua o ID do projeto:

        provider "google" {
        project = "PROJECT_ID"
        }

        Substitua PROJECT_ID pelo ID do seu projeto.

      2. Ative a API Workflows:

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

      3. Crie uma conta de serviço para o fluxo de trabalho:

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

      4. Defina o fluxo de trabalho através do recurso 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]
        }
        

Os seguintes argumentos são usados no fluxo de trabalho de exemplo:

  • name: o nome do seu fluxo de trabalho.
  • region: a localização do seu fluxo de trabalho.
  • description: uma descrição do seu fluxo de trabalho.
  • service_account: o endereço de email ou o ID exclusivo da conta de serviço associada à versão mais recente do fluxo de trabalho. Esta conta de serviço representa a identidade do fluxo de trabalho e determina as autorizações que o fluxo de trabalho tem. Se não especificar uma conta de serviço durante a criação do fluxo de trabalho, o fluxo de trabalho usa a conta de serviço predefinida do Compute Engine para a sua identidade. Para mais informações, consulte o artigo Conceda uma autorização de fluxo de trabalho para aceder a Google Cloud recursos.
  • labels: uma lista de pares de etiquetas de chave-valor a atribuir a este fluxo de trabalho que ajuda a organizar as suas instâncias. Google Cloud Para mais informações, consulte O que são etiquetas?
  • user_env_vars: variáveis de ambiente definidas pelo utilizador associadas a esta revisão do fluxo de trabalho. Para mais informações, consulte o artigo Use variáveis de ambiente.
  • source_contents: o código do Workflows a executar. Para ver o limite de tamanho do ficheiro, consulte a secção Limites de recursos.

Outros argumentos opcionais incluem o seguinte:

  • crypto_key_name: o ID do recurso de uma chave do Cloud Key Management Service no seguinte formato:

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

    Para mais informações, consulte o artigo Use chaves de encriptação geridas pelo cliente.

  • call_log_level: o nível de registo a aplicar às chamadas e às respostas de chamadas durante as execuções deste fluxo de trabalho. Os valores possíveis são:

    • CALL_LOG_LEVEL_UNSPECIFIED
    • LOG_ALL_CALLS
    • LOG_ERRORS_ONLY
    • LOG_NONE

    Para mais informações, consulte o artigo Registo de chamadas.

  • project: o ID do projeto ao qual o recurso pertence. Se não for fornecido, é usado o projeto do fornecedor.

  • name_prefix: cria um nome exclusivo que começa com o prefixo especificado. Se este e name não forem especificados, é escolhido um valor aleatório para o nome.

Crie e execute o fluxo de trabalho

Implemente os seus recursos do Terraform para criar o fluxo de trabalho e, em seguida, execute o fluxo de trabalho.

  1. Inicialize o Terraform no diretório:

    terraform init
  2. Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:

    terraform plan

    Pode ignorar a nota sobre não usar a opção -out.

  3. Crie o fluxo de trabalho:

    terraform apply
  4. No comando Introduza um valor, escreva yes para continuar com a criação de recursos.

  5. Confirme que foi criado um fluxo de trabalho:

    gcloud workflows list --location us-central1

    O resultado deve ser semelhante ao seguinte:

    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. Opcionalmente, pode executar o fluxo de trabalho:

    gcloud workflows execute sample-workflow

Limpar

Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados nesta página, elimine o Google Cloud projeto com os recursos.

  1. Elimine todos os recursos que criou com o Terraform:
    terraform destroy
  2. Elimine o fluxo de trabalho que criou:
    gcloud workflows delete sample-workflow
    Quando lhe for perguntado se quer continuar, introduza y.
  3. Em alternativa, pode eliminar o seu Google Cloud projeto para evitar incorrer em cobranças. A eliminação do seu projeto Google Cloud interrompe a faturação de todos os recursos usados nesse projeto.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

O que se segue?