Ответ
По умолчанию 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) также влияют на порядок операций при замене.