Exporte os seus recursos de Trusted Cloud by S3NS para o formato Terraform

Implementou recursos em Trusted Cloude, agora, precisa de gerir a sua infraestrutura como código (IaC) com o Terraform. A Google disponibiliza uma ferramenta que pode usar para gerar código Terraform para recursos num projeto, numa pasta ou numa organização.

Funções

Para receber as autorizações de que precisa para exportar recursos para o Terraform, peça ao seu administrador que lhe conceda as seguintes funções do IAM na organização, na pasta ou no projeto:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Antes de começar

  • Prepare o Cloud Shell.

    Inicie o Cloud Shell e defina o projeto Trusted Cloud predefinido onde quer gerar código do Terraform para os recursos implementados.

    Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente são substituídas se definir valores explícitos num ficheiro de configuração do Terraform.

  • No Cloud Shell, instale a interface de linhas de comando (CLI) para o Config Connector.

    gcloud components install config-connector
    

    O Config Connector permite-lhe usar a ferramenta de exportação em massa do Terraform Trusted Cloud.

    Se vir ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation, execute o seguinte comando em alternativa:

    sudo apt-get install google-cloud-sdk-config-connector
    
  • Ative a Cloud Asset API.

    gcloud services enable cloudasset.googleapis.com
    
  • Crie uma conta de serviço para usar nesta exportação:

    gcloud beta services identity create --service=cloudasset.googleapis.com
    
  • Certifique-se de que o agente do serviço de recursos do Google Cloud (gcp-sa-cloudasset.s3ns-system.iam.gserviceaccount.com) tem a função roles/servicenetworking.serviceAgent:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.s3ns-system.iam.gserviceaccount.com \
      --role=roles/servicenetworking.serviceAgent
    
  • Certifique-se de que o agente do serviço de recursos do Google Cloud (gcp-sa-cloudasset.s3ns-system.iam.gserviceaccount.com) tem a função roles/storage.objectAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.s3ns-system.iam.gserviceaccount.com \
      --role=roles/storage.objectAdmin
    

Limitações

Alguns tipos de recursos não são suportados para exportação para o formato Terraform, mesmo que sejam suportados pelo fornecedor Google do Terraform. Para ver uma lista dos tipos de recursos suportados para exportação para o formato Terraform, execute o comando gcloud beta resource-config list-resource-types.

Exporte a configuração completa do projeto para código HCL do Terraform

O comando gcloud beta resource-config bulk-export --resource-format=terraform exporta os recursos configurados no projeto, na pasta ou na organização e imprime-os no ecrã no formato de código HCL.

gcloud beta resource-config bulk-export \
  --project=PROJECT_ID \
  --resource-format=terraform

Escrever o resultado numa estrutura de diretórios

  1. Se ainda não o fez, crie o diretório onde quer produzir a configuração do projeto:

    mkdir OUTPUT_DIRECTORY
    
  2. Exporte toda a configuração do projeto para o diretório:

    gcloud beta resource-config bulk-export \
     --path=OUTPUT_DIRECTORY \
     --project=PROJECT_ID \
     --resource-format=terraform
    

    A flag --path especifica a localização para gerar o código HCL.

Depois de executar o comando, o código HCL para cada recurso é enviado para um ficheiro .tf separado na seguinte estrutura de diretórios:

OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE

Escrever a saída num único ficheiro

Se não quiser imprimir o resultado no ecrã nem criar ficheiros .tf separados, pode escrever todo o resultado num único ficheiro, como mostrado neste exemplo:

gcloud beta resource-config bulk-export \
  --resource-format=terraform \
  --project=PROJECT_ID \
  >> gcp_resources.tf

Filtre a saída

Filtre a saída do comando de exportação em massa especificando tipos de recursos.

Indique os tipos de recursos suportados para filtrar

Para ver uma lista de tipos de recursos suportados para exportação para o formato Terraform, execute o comando gcloud beta resource-config list-resource-types:

gcloud beta resource-config list-resource-types

Opcionalmente, escreva a saída num ficheiro:

gcloud beta resource-config list-resource-types >> strings.txt

Na saída, o tipo de recurso para VMs do Compute Engine é apresentado como:

KRM KIND: ComputeInstance

Pode ignorar o prefixo KRM KIND:.

Exporte um único tipo de recurso

Use uma string, como ComputeInstance, para exportar tipos de recursos específicos para o seu projeto no formato de código HCL:

gcloud beta resource-config bulk-export \
  --resource-types=RESOURCE_TYPE \
  --project=PROJECT_ID \
  --resource-format=terraform

A flag --resource-types especifica o tipo de recurso a emitir.

Exporte vários tipos de recursos

Exporte instâncias de VMs e regras de firewall no formato de código HCL:

gcloud beta resource-config bulk-export \
  --resource-types=ComputeFirewall,ComputeInstance \
  --project=PROJECT_ID \
  --resource-format=terraform

Use um ficheiro para especificar os tipos de recursos a exportar

  1. Cria um diretório denominado tf-output.

    cd && mkdir tf-output && cd tf-output
    
  2. Crie um ficheiro denominado types.txt e adicione uma lista de tipos de recursos. Por exemplo:

    ComputeBackendBucket
    ComputeBackendService
    ComputeForwardingRule
    
  3. Execute o comando gcloud beta resource-config bulk-export com a flag --resource-types-file:

    gcloud beta resource-config bulk-export \
     --resource-types-file=types.txt \
     --path=tf-output \
     --project=PROJECT_ID \
     --resource-format=terraform
    

Se o projeto não contiver nenhum tipo de recurso específico, o comando é bem-sucedido, mas não é produzido nada para esse tipo de recurso.

Resolução de problemas

Se vir o seguinte erro:

"Autorização recusada durante a exportação. Certifique-se de que a API Cloud Asset Inventory está ativada."

Certifique-se de que seguiu as instruções na secção Antes de começar.

Passos seguintes