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

«Какой подход использует Terraform при пересоздании ресурсов?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

По умолчанию Terraform использует подход "create before destroy" для ресурсов, требующих замены (например, при изменении immutable-атрибутов). Это означает, что сначала создается новый ресурс, проверяется его успешное развертывание, и только затем удаляется старый. Это помогает избежать простоев.

Поведение управляется блоком lifecycle в конфигурации ресурса:

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  lifecycle {
    # Это значение по умолчанию. Новый ресурс создается перед уничтожением старого.
    create_before_destroy = true
  }
}

Практические соображения:

  • Установка create_before_destroy = false приведет к подходу "destroy before create", что вызовет простой на время пересоздания.
  • Для ресурсов, которые не могут сосуществовать (например, сетевые интерфейсы с одним IP), может потребоваться явно установить create_before_destroy = false и спланировать downtime.
  • Зависимости между ресурсами (depends_on) также влияют на порядок операций при замене.