Sobes.tech
Middle
98
questionbank

Какой подход использует Terraform при пересоздании ресурсов?

Ответ от нейросети

sobes.tech AI

Terraform использует подход "уничтожить и создать" (destroy and create).

В случае необходимости полного обновления или изменения ресурса, который нельзя обновить по месту (in-place update), Terraform выполняет следующие шаги:

  1. Уничтожение существующего ресурса: Terraform удаляет ресурс из инфраструк-туры путём вызова соответствующего API провайдера.
  2. Создание нового ресурса: После успешного удаления Terraform создаёт новый экземпляр ресурса с новыми параметрами.

Это происходит, когда изменения в конфигурации Terraform требуют полной замены ресурса. Например, изменение типа подсети в облаке (публичная на приватную), которое не поддерживается in-place обновлением провайдера. Terraform сам определяет необходимость такого подхода при выполнении команды terraform plan. В выводе плана будет явно указано, что ресурс будет уничтожен и создан заново.

// Пример ресурса, который может быть пересоздан при изменении определенных атрибутов
resource "aws_instance" "example" {
  ami           = "ami-0abcdef1234567890" # Изменение AMI обычно требует пересоздания
  instance_type = "t2.micro"           # Изменение типа инстанса также может требовать пересоздания
  subnet_id     = "subnet-0123456789abcdef0" // Изменение Subnet ID почти всегда требует пересоздания

  tags = {
    Name = "ExampleInstance"
  }
}

Пример вывода terraform plan, указывающего на пересоздание:

Plan: 1 to add, 0 to change, 1 to destroy.

Terraform will perform the following actions:

  # aws_instance.example will be destroyed
  - resource "aws_instance" "example" {
      - ami                    = "ami-old-id" -> null
      - arn                    = "arn:aws:ec2:..." -> null
      ... (остальные атрибуты)
    }

  # aws_instance.example will be created
  + resource "aws_instance" "example" {
      + ami           = "ami-new-id"
      + instance_type = "t2.micro"
      + subnet_id     = "subnet-0123456789abcdef0"
      ... (остальные атрибуты)
    }