Neste tutorial, vai aprender a armazenar o estado do Terraform num contentor do Cloud Storage.
Por predefinição, o Terraform armazena o estado localmente num ficheiro denominado terraform.tfstate
. Esta configuração predefinida pode dificultar a utilização do Terraform para as equipas quando vários utilizadores executam o Terraform ao mesmo tempo e cada máquina tem a sua própria compreensão da infraestrutura atual.
Para ajudar a evitar estes problemas, esta página mostra como configurar um estado remoto que aponta para um contentor do Cloud Storage. O estado remoto é uma funcionalidade dos backends do Terraform.
Prepare o ambiente
Clone o repositório do GitHub que contém amostras do Terraform:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
Mude para o diretório de trabalho:
cd terraform-docs-samples/storage/remote_terraform_backend_template
Reveja os ficheiros do Terraform
Reveja o ficheiro
main.tf
:cat main.tf
O resultado é semelhante ao seguinte
Este ficheiro descreve os seguintes recursos:
random_id
: este valor é anexado ao nome do contentor do Cloud Storage para garantir um nome único para o contentor do Cloud Storage.google_storage_bucket
: o contentor do Cloud Storage para armazenar o ficheiro de estado. Este contentor está configurado para ter as seguintes propriedades:force_destroy
está definido comofalse
para garantir que o contentor não é eliminado se tiver objetos. Isto garante que as informações de estado no contentor não são eliminadas acidentalmente.public_access_prevention
está definido comoenforced
para garantir que o conteúdo do contentor não é exposto acidentalmente ao público.uniform_bucket_level_access
está definido comotrue
para permitir o controlo do acesso ao contentor e ao respetivo conteúdo através de autorizações da IAM em vez de listas de controlo de acesso.versioning
está ativado para garantir que as versões anteriores do estado são preservadas no contentor.
local_file
: um ficheiro local. O conteúdo deste ficheiro indica ao Terraform que deve usar o contentor do Cloud Storage como o back-end remoto assim que o contentor for criado.
Aprovisione o contentor do Cloud Storage
Inicialize o Terraform:
terraform init
Quando executa o
terraform init
pela primeira vez, o contentor de armazenamento na nuvem que especificou no ficheiromain.tf
ainda não existe. Por isso, o Terraform inicializa um back-end local para armazenar o estado no sistema de ficheiros local.Aplique a configuração para aprovisionar recursos descritos no ficheiro
main.tf
:terraform apply
Quando lhe for pedido, introduza
yes
.Quando executa
terraform apply
pela primeira vez, o Terraform aprovisiona o contentor do Cloud Storage para armazenar o estado. Também cria um ficheiro local. O conteúdo deste ficheiro indica ao Terraform que use o contentor do Cloud Storage como o back-end remoto para armazenar o estado.
Migre o estado para o contentor do Cloud Storage
Migre o estado do Terraform para o back-end remoto do Cloud Storage:
terraform init -migrate-state
O Terraform deteta que já tem um ficheiro de estado localmente e pede-lhe para migrar o estado para o novo contentor do Cloud Storage. Quando lhe for pedido, introduza
yes
.
Depois de executar este comando, o estado do Terraform é armazenado no contentor do Cloud Storage. O Terraform extrai o estado mais recente deste contentor antes de executar um comando e envia o estado mais recente para o contentor depois de executar um comando.