Você implantou recursos no Google Cloud e agora precisa gerenciar a infraestrutura como código (IaC, na sigla em inglês) com o Terraform. O Google oferece uma ferramenta que pode ser usada para gerar o código do Terraform para recursos em um projeto, uma pasta ou organização.
Antes de começar
Preparar o Cloud Shell
Inicie o Cloud Shell e defina o projeto padrão do Google Cloud em que você quer gerar o código do Terraform para os recursos implantados.
Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
No Cloud Shell, instale a interface de linha de comando (CLI) para o Config Connector.
gcloud components install config-connector
O Config Connector permite que você use a ferramenta de exportação em massa do Terraform do Google Cloud.
Se você 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:sudo apt-get install google-cloud-sdk-config-connector
Ative a API Cloud Asset.
gcloud services enable cloudasset.googleapis.com
Crie uma conta de serviço para usar nessa exportação:
gcloud beta services identity create --service=cloudasset.googleapis.com
Verifique se o Agente de serviço de recursos do Cloud (
gcp-sa-cloudasset.iam.gserviceaccount.com
) tem o papelroles/servicenetworking.serviceAgent
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent
Verifique se o Agente de serviço de recursos do Cloud (
gcp-sa-cloudasset.iam.gserviceaccount.com
) tem o papelroles/storage.objectAdmin
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/storage.objectAdmin
Limitações
Alguns tipos de recursos não são compatíveis com a exportação para o formato do Terraform,
mesmo que sejam compatíveis com o provedor do Terraform do Google. Para consultar uma
lista de tipos de recursos compatíveis com a exportação para o formato do Terraform, execute o
comando gcloud beta resource-config list-resource-types
.
Exportar toda a configuração do projeto para o 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 os exibe na tela no formato do código HCL.
gcloud beta resource-config bulk-export \ --project=PROJECT_ID \ --resource-format=terraform
Gravar a saída em uma estrutura de diretórios
Se ainda não fez isso, crie o diretório onde você quer gerar a configuração do projeto:
mkdir OUTPUT_DIRECTORY
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 sinalização
--path
especifica a localização para gerar o código HCL.
Depois de executar o comando, o código HCL de cada recurso é enviado para um
arquivo .tf
separado na seguinte estrutura de diretório:
OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE
Gravar a saída em um único arquivo
Se você não quiser imprimir a saída na tela ou criar arquivos .tf
separados, grave toda a saída em um único arquivo, conforme mostrado neste
exemplo:
gcloud beta resource-config bulk-export \ --resource-format=terraform \ --project=PROJECT_ID \ >> gcp_resources.tf
Filtrar a saída
Filtre a saída do comando de exportação em massa especificando tipos de recurso.
Listar os tipos de recursos suportados para filtrar
Para consultar uma
lista de tipos de recursos compatíveis com a exportação para o formato do Terraform, execute o
comando gcloud beta resource-config list-resource-types
:
gcloud beta resource-config list-resource-types
Como opção, grave a saída em um arquivo:
gcloud beta resource-config list-resource-types >> strings.txt
Na saída, o tipo de recurso para as VMs do Compute Engine é listado como:
KRM KIND: ComputeInstance
Ignore o prefixo KRM KIND:
.
Exportar um único tipo de recurso
Use uma string, como ComputeInstance
, para exportar tipos de recursos específicos para
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 sinalização --resource-types
especifica o tipo de recurso a ser gerado.
Exportar vários tipos de recursos
Exporte instâncias de VM 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
Usar um arquivo para especificar os tipos de recursos a serem exportados
Crie um diretório chamado
tf-output
.cd && mkdir tf-output && cd tf-output
Crie um arquivo chamado
types.txt
e adicione uma lista de tipos de recursos. Exemplo:ComputeBackendBucket ComputeBackendService ComputeForwardingRule
Execute o comando
gcloud beta resource-config bulk-export
com a sinalização--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 tiver nenhum tipo de recurso específico, o comando será bem-sucedido, mas nada será gerado para esse tipo de recurso.
Solução de problemas
Caso aconteça o seguinte erro:
"Permissão negada durante a exportação. Verifique se a API de Inventário de recursos do Cloud está ativada."
Verifique se você seguiu as instruções na seção Antes de começar.