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:
-
Consumidor de utilização do serviço (
roles/serviceusage.serviceUsageConsumer
) -
Se estiver a escrever o estado num contentor existente (
--storage-path=BUCKET
):-
Storage Object Creator (
roles/storage.objectCreator
) -
Visualizador de objetos de armazenamento (
roles/storage.objectViewer
)
-
Storage Object Creator (
-
Se estiver a escrever o estado num novo contentor:
Visualizador de objetos de armazenamento (
roles/storage.objectViewer
)
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çãoroles/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çãoroles/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
Se ainda não o fez, crie o diretório onde quer produzir 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 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
Cria um diretório denominado
tf-output
.cd && mkdir tf-output && cd tf-output
Crie um ficheiro denominado
types.txt
e adicione uma lista de tipos de recursos. Por exemplo:ComputeBackendBucket ComputeBackendService ComputeForwardingRule
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.