Automatize a implantação de recursos de Google Cloud

Esta página descreve o processo de configuração de gatilhos do Cloud Build para automatizar implantações de Google Cloud recursos usando seus repositórios e o Infrastructure Manager.

Quando o Infra Manager se conecta ao repositório do Git, as solicitações de pull invocam uma prévia de uma implantação, e as confirmações invocam a criação de uma prévia de implantação ou a atualização da implantação.

Antes de começar

  1. Verifique se o Infra Manager está ativado.
  2. Verifique se você tem as permissões do IAM necessárias para criar implantações:
    • roles/config.admin
  3. Verifique se você tem uma conta de serviço com as permissões necessárias. Para mais detalhes, consulte Configurar a conta de serviço.
  4. Identifique o repositório Git que tem a configuração do Terraform. Quando você configura a automação descrita nesta página, essa é a configuração do Terraform que o Infra Manager usa para atualizar recursos.
  5. Recomendado: configure a proteção de ramificação no seu repositório Git.

Automatizar a implantação de recursos do Google Cloud

As etapas a seguir descrevem a configuração necessária para automatizar a visualização e a implantação de uma configuração do Terraform armazenada em um repositório do Git. Uma implantação de uma configuração do Terraform pode ser uma revisão de uma implantação existente. As revisões podem excluir ou substituir os recursos provisionados do Google Cloud .

Quando a configuração for concluída, uma solicitação de envio no repositório do Git vai fazer com que o Infra Manager crie uma prévia da implantação. Quando uma solicitação de envio é fundida, o Infra Manager implanta automaticamente a configuração do Terraform.

O módulo im_cloudbuild_workspace cria vários recursos, incluindo:

  • Uma conexão de repositório do Cloud Build.
  • Um acionador do Cloud Build que é invocado quando uma solicitação de envio é criada. Esse gatilho faz com que o Infra Manager crie uma implantação de visualização usando a configuração do Terraform no repositório.
  • Um acionador do Cloud Build que é invocado quando uma solicitação de envio é mesclada com o repositório Git. Esse gatilho faz com que o Infra Manager crie ou atualize a implantação usando a configuração do Terraform no repositório.

Para automatizar as implantações de configuração do Terraform quando o repositório é atualizado:

  1. Instale o app GitHub do Cloud Build na sua conta do GitHub ou em uma organização que você tenha.
  2. Crie um token de acesso pessoal.

    Defina seu token para não ter data de validade e selecione as seguintes permissões quando solicitado no GitHub: repo e read:user. Se o app estiver instalado em uma organização, selecione também a permissão read:org.

    Depois de gerar o token de acesso pessoal, salve-o em um local seguro. Use o token gerado nas etapas a seguir.

  3. Copie o módulo im_cloudbuild_workspace para o arquivo main.tf no repositório do Git:

    module "im-workspace" {
     source = "terraform-google-modules/bootstrap/google//modules/im_cloudbuild_workspace"
     version = "~> 7.0"
    
     project_id = PROJECT_ID
     deployment_id = DEPLOYMENT_ID
     im_deployment_repo_uri = GIT_REPO
     im_deployment_ref = REF
    
     github_app_installation_id = GIT_APP_ID
     github_personal_access_token = TOKEN
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que o Gerenciador de infraestrutura é executado.
    • DEPLOYMENT_ID: o identificador de implantação que você especifica. Consulte Nome da implantação para saber mais sobre as restrições no identificador de implantação.
    • GIT_REPO: o URI do repositório Git.
    • REF: a referência do Git da configuração. A referência é opcional. Se você não especificar a referência, a ramificação configurada padrão do repositório do Git será usada.
    • GIT_APP_ID: ID de instalação do app GitHub do Cloud Build usado para gatilhos de solicitação de pull e push.
    • TOKEN: token de acesso pessoal para um repositório do GitHub. Se fornecido, cria um secret no Secret Manager.
  4. Crie uma implantação (ou atualize a atual) com o módulo im_cloudbuild_workspace:

    gcloud infra-manager deployments apply projects/PROJECT_ID/locations/LOCATION/deployments/DEPLOYMENT_ID \ 
       --service-account projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT \
       --git-source-repo=GIT_REPO \
       --git-source-directory=DIRECTORY \
       --git-source-ref=REF
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que o Gerenciador de infraestrutura é executado.
    • LOCATION: o local em que o Infra Manager é executado. Consulte a lista de locais em Locais do Gerenciador de infraestrutura.
    • DEPLOYMENT_ID: o identificador de implantação que você especifica. Consulte Nome da implantação para saber mais sobre as restrições no identificador de implantação.
    • SERVICE_ACCOUNT: o nome da conta de serviço usada para chamar o Infra Manager.
    • SERVICE_ACCOUNT_PROJECT_ID é o ID do projeto da conta de serviço. É comum que esse seja o mesmo projeto em que o Gerenciador de infraestrutura é executado.
    • GIT_REPO: o repositório Git público.
    • DIRECTORY: o diretório que tem a configuração do Terraform.
    • REF: a referência do Git da configuração. A referência é opcional. Se você não especificar a referência, a ramificação configurada padrão do repositório do Git será usada.
  5. Para confirmar se o repositório Git está conectado corretamente ao Infra Manager, crie uma solicitação de envio no repositório.

    Para conferir os resultados da validação da configuração do Terraform bifurcada, consulte a solicitação de envio no GitHub.

Agora que essa automação está configurada, os gatilhos do Cloud Build causam o seguinte:

  • Quando uma solicitação de envio é feita para o repositório, o Infra Manager cria uma prévia de implantação usando a configuração do Terraform bifurcada armazenada no repositório do Git.
  • Quando uma solicitação de envio é mesclada no repositório, o Infra Manager atualiza a implantação usando a configuração do Terraform bifurcada armazenada no repositório do Git.

A seguir