Neste tutorial, você aprenderá a armazenar o estado do Terraform em um bucket do Cloud Storage.
Por padrão, o Terraform armazena o estado
localmente em um arquivo chamado terraform.tfstate
. Essa configuração padrão pode
dificultar o uso do Terraform para as equipes quando muitos usuários o executam ao
mesmo tempo e cada máquina tem o próprio entendimento da infraestrutura
atual.
Para ajudar a evitar esses problemas, esta página mostra como configurar um estado remoto que aponta para um bucket do Cloud Storage. O estado remoto é um recurso de back-ends do Terraform.
Prepare o ambiente
Clone o repositório do GitHub que contém exemplos 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
Revisar os arquivos do Terraform
Revise o arquivo
main.tf
:cat main.tf
A saída será assim
Este arquivo descreve os seguintes recursos:
random_id
: é anexado ao nome do bucket do Cloud Storage para garantir um nome exclusivo.google_storage_bucket
: o bucket do Cloud Storage para armazenar o arquivo de estado. Esse bucket está configurado para ter as seguintes propriedades:force_destroy
é definido comofalse
para garantir que o bucket não seja excluído se houver objetos nele. Isso garante que as informações de estado armazenadas no bucket não sejam excluídas acidentalmente.public_access_prevention
é definido comoenforced
para garantir que o conteúdo do bucket não seja exposto ao público acidentalmente.uniform_bucket_level_access
está definido comotrue
para permitir o controle do acesso ao bucket e ao conteúdo dele usando permissões do IAM em vez de listas de controle de acesso.- O
versioning
é ativado para garantir que versões anteriores do estado sejam preservadas no bucket.
local_file
: um arquivo local. O conteúdo desse arquivo instrui o Terraform a usar o bucket do Cloud Storage como back-end remoto depois que o bucket for criado.
Provisionar o bucket do Cloud Storage
Inicialize o Terraform:
terraform init
Quando você executa
terraform init
pela primeira vez, o bucket do Cloud Storage especificado no arquivomain.tf
ainda não existe, portanto, o Terraform inicializa um back-end local para armazenar o estado no sistema de arquivos local.Aplique a configuração para provisionar os recursos descritos no arquivo
main.tf
:terraform apply
Quando solicitado, digite
yes
.Quando você executa
terraform apply
pela primeira vez, o Terraform provisiona o bucket do Cloud Storage para armazenar o estado. Ele também cria um arquivo local. O conteúdo desse arquivo instrui o Terraform a usar o bucket do Cloud Storage como o back-end remoto para armazenar o estado.
Migrar o estado para o bucket do Cloud Storage
Migre o estado do Terraform para o back-end remoto do Cloud Storage:
terraform init -migrate-state
O Terraform detecta se você já tem um arquivo de estado localmente e solicita a migração do estado para o novo bucket do Cloud Storage. Quando solicitado, digite
yes
.
Depois da execução desse comando, o estado do Terraform é armazenado no bucket do Cloud Storage. O Terraform extrai o estado mais recente desse bucket antes de executar um comando e o envia para o bucket depois da execuçãode um comando.