Aula 7: O tfstate e Backend Remoto no Azure
Introdução
Nesta aula, vamos abordar o arquivo mais crítico do Terraform: o terraform.tfstate. Ele é vital para o funcionamento da ferramenta, mas também é um dos maiores riscos de segurança quando mal gerenciado. Vamos entender o perigo do estado local e como o backend remoto no Azure resolve todos esses problemas.
O que é o terraform.tfstate?
O terraform.tfstate é um arquivo JSON que guarda:
- O mapeamento entre seu código e os recursos reais criados no Azure
- Metadados sobre dependências
- Atributos dos recursos, incluindo dados sensíveis (como senhas!)
Exemplo de risco:
"resources": [
{
"type": "azurerm_sql_server",
"name": "meu_servidor_sql",
"instances": [
{
"attributes": {
"administrator_login_password": "MinhaSenhaSuperSecreta123",
"fully_qualified_domain_name": "meuservidor.database.windows.net"
}
}
]
}
]
Problemas do Estado Local
- Segurança: Pode conter segredos
- Colaboração: Trabalhos simultâneos geram conflitos
- Perda de Dados: Um simples rm -rf pode destruir tudo
A Solução: Backend Remoto no Azure
Armazenar o estado em um local seguro e compartilhado, como o Azure Blob Storage, traz os seguintes benefícios:
- Segurança com criptografia e RBAC do Azure
- Colaboração com estado centralizado
- Locking automático com leasing nativo do Blob
Conceitos Importantes
- Storage Account: Contêiner geral de serviços de armazenamento
- Blob Storage: Onde o arquivo de estado é realmente salvo
- Container: Diretório dentro do Blob Storage
- Key: Caminho/nome do arquivo tfstate
Exemplo prático - backend.tf
terraform {
backend "azurerm" {
resource_group_name = "rg-terraform-state-prod"
storage_account_name = "tfstateprodproject"
container_name = "tfstate"
key = "meu-projeto/terraform.tfstate"
}
}
Inicialização do backend
az login
az group create -n rg-terraform-state-prod -l eastus
az storage account create -n tfstateprodproject -g rg-terraform-state-prod --sku Standard_LRS
az storage container create --name tfstate --account-name tfstateprodproject
terraform init
Output esperado:
Initializing the backend...
Successfully configured the backend "azurerm"!
Terraform will use the remote backend from now on.
terraform plan com locking
terraform plan
Acquiring state lock. This may take a few moments...
...
Plan: 1 to add, 0 to change, 0 to destroy.
Melhores Práticas
- Nunca adicione o tfstate ao Git!
- Sempre use backend remoto em times
- Ative o RBAC na Storage Account
- Proteja o acesso ao blob com políticas de acesso restritas
- Use criptografia e monitoramento