Criar um fluxo de trabalho usando o Terraform

Neste guia de início rápido, mostramos como criar, implantar e executar seu primeiro fluxo de trabalho usando o Terraform. O Terraform é uma ferramenta de infraestrutura como código que permite criar, alterar e melhorar de maneira previsível sua infraestrutura em nuvem usando código. Aprenda a usar o Terraform para provisionar infraestrutura em Google Cloud.

Neste guia de início rápido, o fluxo de trabalho de amostra envia uma solicitação para uma API pública e retorna a resposta da API.

Você vai concluir o seguinte:

  1. Ative a API Workflows usando o Terraform.
  2. Crie uma conta de serviço para o fluxo de trabalho usando o Terraform.
  3. Definir e implantar um fluxo de trabalho usando o Terraform.
  4. Execute o fluxo de trabalho usando a Google Cloud CLI.

Antes de começar

As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito de Google Cloud .

Observe que o Cloud Shell já tem o Terraform integrado. Se você precisar instalar o Terraform, consulte a documentação do Terraform da HashiCorp.

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. Instale a CLI do Google Cloud.

  3. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  4. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  5. Crie ou selecione um Google Cloud projeto.

    Funções necessárias para selecionar ou criar um projeto

    • Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
    • Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos (roles/resourcemanager.projectCreator), que contém a permissão resourcemanager.projects.create. Saiba como conceder papéis.
    • Crie um projeto do Google Cloud :

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto Google Cloud que você está criando.

    • Selecione o projeto Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud .

  6. Se este guia estiver usando um projeto atual, verifique se você tem as permissões necessárias para concluir o guia. Se você criou um projeto, já tem as permissões necessárias.

  7. Verifique se o faturamento está ativado para o projeto do Google Cloud .

  8. Ative as APIs Cloud Resource Manager, Identity and Access Management (IAM) e Service Usage:

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com serviceusage.googleapis.com
  9. Instale a CLI do Google Cloud.

  10. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  11. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  12. Crie ou selecione um Google Cloud projeto.

    Funções necessárias para selecionar ou criar um projeto

    • Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
    • Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos (roles/resourcemanager.projectCreator), que contém a permissão resourcemanager.projects.create. Saiba como conceder papéis.
    • Crie um projeto do Google Cloud :

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto Google Cloud que você está criando.

    • Selecione o projeto Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud .

  13. Se este guia estiver usando um projeto atual, verifique se você tem as permissões necessárias para concluir o guia. Se você criou um projeto, já tem as permissões necessárias.

  14. Verifique se o faturamento está ativado para o projeto do Google Cloud .

  15. Ative as APIs Cloud Resource Manager, Identity and Access Management (IAM) e Service Usage:

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com serviceusage.googleapis.com

Funções exigidas

Para conseguir as permissões necessárias a fim de concluir o guia de início rápido, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Criar um arquivo de configuração do Terraform

Crie um arquivo de configuração do Terraform chamado main.tf e inclua os recursos do provedor do Google para Terraform usados neste guia de início rápido.

É possível usar a interpolação para substituições, como variáveis de referência, atributos de recursos e funções de chamada.

  1. Crie um diretório:

    mkdir terraform
  2. Acesse o diretório terraform:

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

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

    1. Atribua o ID do projeto:

      provider "google" {
      project = "PROJECT_ID"
      }

      Substitua PROJECT_ID pelo ID do 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 usando o 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 argumentos a seguir são usados no fluxo de trabalho de exemplo:

  • name: o nome do fluxo de trabalho.
  • region: o local do fluxo de trabalho.
  • description: uma descrição do fluxo de trabalho.
  • service_account: o endereço de e-mail ou ID exclusivo da conta de serviço associada à versão mais recente do fluxo de trabalho. Essa conta de serviço representa a identidade do fluxo de trabalho e determina quais permissões ele tem. Se você não especificar uma conta de serviço durante a criação do fluxo de trabalho, ele usará a conta de serviço padrão do Compute Engine como identidade. Para mais informações, consulte Conceder permissão a um fluxo de trabalho para acessar recursos Google Cloud .
  • labels: uma lista de pares de rótulos de chave-valor para atribuir a este fluxo de trabalho que ajuda a organizar suas instâncias do Google Cloud . Para mais informações, consulte O que são rótulos?
  • user_env_vars: variáveis de ambiente definidas pelo usuário associadas a esta revisão do fluxo de trabalho. Para mais informações, consulte Usar variáveis de ambiente.
  • source_contents: o código do Workflows a ser executado. Para saber o limite de tamanho de arquivo, consulte Limites de recursos.

Outros argumentos opcionais incluem:

  • 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 Usar chaves de criptografia gerenciadas pelo cliente.

  • call_log_level: o nível de registro a ser aplicado a chamadas e respostas de chamadas durante as execuções desse 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 Registro de chamadas.

  • project: o ID do projeto a que o recurso pertence. Se ele não for informado, o projeto do provedor será usado.

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

Criar e executar o fluxo de trabalho

Implante os recursos do Terraform para criar e executar o fluxo de trabalho.

  1. Inicialize o Terraform no diretório:

    terraform init
  2. Verifique se as alterações propostas pelo Terraform correspondem ao plano esperado:

    terraform plan

    Ignore a observação sobre o uso da opção -out.

  3. Crie o fluxo de trabalho:

    terraform apply
  4. No prompt Digite um valor, digite yes para continuar criando recursos.

  5. Confirme se um fluxo de trabalho foi criado:

    gcloud workflows list --location us-central1

    A saída será semelhante a:

    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. Também é possível executar o fluxo de trabalho:

    gcloud workflows execute sample-workflow

Limpar

Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud e os recursos.

  1. Exclua todos os recursos criados com o Terraform:
    terraform destroy
  2. Exclua o fluxo de trabalho que você criou:
    gcloud workflows delete sample-workflow
    Quando perguntar se você quer continuar, digite y.
  3. Se preferir, exclua o projeto Google Cloud para evitar cobranças. A exclusão do projeto Google Cloud interrompe o faturamento de todos os recursos usados nele.

      Excluir um projeto do Google Cloud :

      gcloud projects delete PROJECT_ID

A seguir