Já tenho dezenas de instâncias AWS em produção e gostaria de começar a usar o Terraform para automatizar a criação das próximas. 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. O Terraform oferece alguma proteção para evitar isso?
Responder1
Sim - useterraform plan
antes de qualquer operação. Irá gerar uma lista completa de alterações que serão feitas, sem realmenteexecutandoqualquer um deles, para sua revisão.
Responder2
O Terraform não possui salvaguardas explícitas para isso, mas seu design geral já o impede de tocar nos recursos existentes.
Geralmente, todo recurso Terraform possui algum identificador primário (por exemplo, para EC2, um ID de instância, para S3, um nome de bucket). E cada execução do Terraform deve 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ê receberá um erro e o Terraform não poderá criar nada (nunca acontecerá com EC2, mas é possível com buckets S3). Esta é a oportunidade de corrigir o código Terraform.
No caso b) o Terraform deverá funcionar apenas com recursos “próprios”, deixando de lado o conteúdo existente da sua conta.
Pode-se interferir intencionalmente (ou acidentalmente) no Terraform, substituindo/renomeando seus recursos, o que quebrará as coisas; mas com o uso "normal" nunca vi esse tipo de problema.
Responder3
Você pode adicionar um bloco de configuração de ciclo de vida ao recurso (Consulte Configuração de recursos do Terraform); especificamente usando:
lifecycle {
prevent_destroy = true
}
Isto retornará uma mensagem de erro quando um plano incluir uma ação de destruição no recurso.