Estado da Terraforma
O estado atual de nossa infraestrutura, que inclui informações sobre os recursos que definimos em nosso código, é registrado como estado Terraform. O Terraform usa esse estado para determinar as alterações necessárias para colocar nossa infraestrutura no estado desejado quando um comando como Terraform “apply” é executado. Após executar as alterações (criar, modificar e excluir), o Terraform atualiza o arquivo de estado com o novo estado de sua infraestrutura.
Para entender claramente o conceito, vamos dar um exemplo:
recurso 'arquivo_local' 'John' {
nome do arquivo = '/home/João.txt'
conteúdo = 'Eu amo animais de estimação'
}
Aqui, criamos um arquivo Terraform chamado “main.tf”. Dentro dele está um recurso do tipo local_file chamado “John” com dois atributos: filename e content.
O tipo de recurso local_file é usado para criar um arquivo no sistema de arquivos local da máquina em que o Terraform está sendo executado. Neste caso, o arquivo é criado com o nome “John.txt” no diretório “/home” e o conteúdo do arquivo é “I love pets”.
Agora, vamos executar o fluxo do Terraform – inicialização, planejamento e aplicação do Terraform. Quando executamos o comando “apply” do Terraform em nosso projeto pela primeira vez, o Terraform cria automaticamente o arquivo de estado chamado “terraform.tfstate” no diretório raiz do nosso projeto Terraform. Inclui toda a informação sobre o estado atual da nossa infraestrutura em formato JSON.
Aqui está o arquivo de estado para o recurso que criamos:
Agora, digamos que queremos remover o recurso atual e criar outro recurso do tipo random_pet chamado “my-pet” com atributos – prefixo, comprimento e separador.
recurso 'animal_aleatório' 'meu animal de estimação' {prefixo = 'Senhor'
comprimento = '1'
separador = '.'
}
Aqui, removemos o recurso local_file e adicionamos um recurso random_pet. Nosso estado desejado é ter apenas o recurso random_pet. Vamos executar os comandos init, plan e apply do Terraform.
Conforme mostrado na ilustração anterior, quando executamos o comando “planejar” do Terraform, ele mostra as ações que o Terraform realiza para chegar ao estado desejado. Quando executamos o comando “apply” do Terraform, o recurso “my-pet” é criado e o recurso “John” é removido. Além disso, o arquivo de estado é atualizado destruindo os metadados do recurso local_file e adicionando os metadados do recurso random_pet.
Aqui está o conteúdo do arquivo de estado atualizado:
Como funciona o Terraform the Manage State?
Usando um back-end, o Terraform gerencia o estado. Um back-end é um serviço remoto ou sistema de arquivos local que o Terraform usa para armazenar e recuperar os dados de estado. Dependendo de nossos requisitos, podemos escolher um back-end adequado.
O Terraform oferece suporte a vários back-ends integrados, incluindo armazenamento local, Amazon S3, HashiCorp Consul, Vault e Azure. Também podemos criar um back-end personalizado se nenhuma das opções integradas atender às necessidades.
Nos exemplos anteriores, os arquivos de estado foram armazenados no back-end local. Mas armazená-lo em um back-end remoto é a melhor prática, pois invoca a colaboração e aumenta a segurança.
Importância da Gestão do Estado
O gerenciamento de estado em ferramentas como o Terraform é essencial devido aos seguintes pontos-chave:
Determine o estado atual de sua infraestrutura
O arquivo de estado fornece um instantâneo preciso dos recursos existentes e seus atributos atuais. Esses dados são essenciais para compreender nossa infraestrutura e garantir que ela esteja no estado desejado.
Acompanhe as mudanças na infraestrutura ao longo do tempo
Sempre que aplicamos as alterações usando o Terraform, o arquivo de estado é atualizado para refletir o novo estado de nossa infraestrutura. Isso nos permite rastrear como nossa infraestrutura evoluiu e fornece uma trilha de auditoria de todas as alterações.
Automação
Definir seu estado de infraestrutura desejado no código nos permite automatizar a criação e o gerenciamento de nossa infraestrutura. O gerenciamento de estado garante que nossa infraestrutura permaneça desejada, mesmo que as alterações sejam feitas ao longo do tempo.
Gerenciar dependências
Com o Terraform, podemos definir os relacionamentos entre os recursos em nosso arquivo de configuração, e o Terraform usa o arquivo de estado para garantir que esses relacionamentos sejam mantidos. Isso garante que as alterações em um recurso não afetem inadvertidamente outros recursos.
Recuperação de desastres
Se ocorrer uma falha ou interrupção, podemos usar o arquivo de estado para recriar a infraestrutura em um estado conhecido. Isso pode ajudar a minimizar o tempo de inatividade e garantir que nossa infraestrutura seja restaurada com rapidez e eficiência.
Melhores práticas para gerenciamento de estado eficaz
Aqui estão algumas dicas que podemos seguir para gerenciar os estados de forma eficaz:
Use um back-end remoto
Um back-end remoto oferece vários benefícios em relação a um back-end local. Ele permite que vários usuários trabalhem na mesma infraestrutura e também oferece melhor segurança e confiabilidade do que os back-ends locais.
Ativar controle de versão
Ao controlar a versão do arquivo de estado, podemos rastrear as alterações ao longo do tempo e reverter para uma versão anterior, se necessário. Além disso, o controle de versão fornece uma trilha de auditoria e ajuda a garantir que as alterações sejam devidamente documentadas.
Use um mecanismo de bloqueio
Podemos usar um mecanismo de bloqueio que ajuda a evitar conflitos quando vários usuários trabalham na mesma infraestrutura. O Terraform oferece suporte a várias ferramentas de bloqueio, incluindo DynamoDB, Consul e S3.
Faça backup do seu arquivo de estado
Podemos nos recuperar da corrupção de dados se fizermos backup do arquivo de estado regularmente. Devemos armazenar os backups em um local seguro e seguir todos os requisitos de conformidade relevantes.
Conclusão
Tivemos uma breve introdução ao IaC e ao Terraform enquanto entendêmos os arquivos de estado e os gerenciamos por meio de exemplos. Entender como o Terraform funciona no estado pode nos ajudar a evitar armadilhas comuns e garantir que nossa infraestrutura continue sendo desejada. Seguindo as melhores práticas para gerenciar estados, podemos usar o Terraform com confiança e eficiência.