Sobes.tech
Middle

Qual abordagem o Terraform usa ao recriar recursos?

sobes.tech IA

Resposta da IA

O Terraform utiliza uma abordagem de "destruir e criar" (destroy and create).

No caso de necessidade de uma atualização completa ou alteração de um recurso que não pode ser atualizado no local (atualização in-place), o Terraform realiza os seguintes passos:

  1. Destruição do recurso existente: O Terraform remove o recurso da infraestrutura chamando a API correspondente do provedor.
  2. Criação de um novo recurso: Após a exclusão bem-sucedida, o Terraform cria uma nova instância do recurso com os novos parâmetros.

Isso ocorre quando as mudanças na configuração do Terraform exigem uma substituição completa do recurso. Por exemplo, alterar o tipo de sub-rede na nuvem (de pública para privada), o que não é suportado por uma atualização in-place do provedor. O Terraform determina a necessidade dessa abordagem ao executar o comando terraform plan. Na saída do plano, será indicado claramente que o recurso será destruído e recriado.

// Exemplo de recurso que pode ser recriado ao alterar certos atributos
resource "aws_instance" "example" {
  ami           = "ami-0abcdef1234567890" # Alterar a AMI geralmente requer recriação
  instance_type = "t2.micro"           # Alterar o tipo de instância também pode requerer recriação
  subnet_id     = "subnet-0123456789abcdef0" // Alterar o ID da Subnet quase sempre requer recriação

  tags = {
    Name = "ExampleInstance"
  }
}

Exemplo de saída do terraform plan indicando uma recriação:

Plan: 1 a adicionar, 0 a alterar, 1 a destruir.

O Terraform realizará as seguintes ações:

  # aws_instance.example será destruído
  - recurso "aws_instance" "example" {
      - ami                    = "ami-old-id" -> null
      - arn                    = "arn:aws:ec2:..." -> null
      ... (outros atributos)
    }

  # aws_instance.example será criado
  + recurso "aws_instance" "example" {
      + ami           = "ami-new-id"
      + instance_type = "t2.micro"
      + subnet_id     = "subnet-0123456789abcdef0"
      ... (outros atributos)
    }