Sim - use terraform plan
antes de qualquer operação. Ele mostrará uma lista completa de alterações que serão feitas, sem executar qualquer uma delas, para sua revisão.
Já tenho dúzias de instâncias da AWS em produção e gostaria de começar a usar o Terraform para automatizar as próximas criações. Eu li que o Terraform pode ajudar a praticar o padrão Imutável. No entanto, gostaria de evitar qualquer risco de destruir qualquer instância já em execução. A Terraform fornece alguma proteção para evitar isso?
Sim - use terraform plan
antes de qualquer operação. Ele mostrará uma lista completa de alterações que serão feitas, sem executar qualquer uma delas, para sua revisão.
O Terraform não tem salvaguardas explícitas para isso, mas seu design geral já impede que ele toque os recursos existentes.
Geralmente, todo recurso do Terraform possui algum identificador principal (por exemplo, para o EC2, um ID da instância, para o S3, um nome do intervalo). E todas as execuções do Terraform devem apenas a) criar novos recursos ou b) atualizar / excluir recursos existentes sob o controle do Terraform.
No caso a) se o ID já existir, você recebe um erro e o Terraform não pode criar nada (nunca acontecerá com o EC2, mas é possível com buckets S3). Esta é a oportunidade de corrigir o código Terraform.
No caso b) o Terraform só deve funcionar com recursos "próprios", deixando apenas o conteúdo existente de sua conta.
Pode-se intencionalmente (ou acidentalmente) interferir com o Terraform substituindo / renomeando seus recursos, que irão quebrar as coisas; mas com o uso "normal" nunca vi esse tipo de problema.
Você pode adicionar um bloco de configuração do ciclo de vida ao recurso ( Consulte Configuração do Recurso do Terraform ); especificamente usando:
lifecycle {
prevent_destroy = true
}
Isso retornará uma mensagem de erro quando um plano incluir uma ação de destruição no recurso.