Короткий ответ
+ означает создание нового ресурса, - — удаление существующего, ~ — изменение атрибутов на месте без пересоздания, а -/+ означает удаление и создание нового ресурса взамен (replacement); итоговая строка суммирует количество ресурсов по каждому типу действия.
Как это работает подробнее
Terraform вычисляет эти символы, сравнивая желаемую конфигурацию с данными из state (и опционально свежим refresh реального состояния); "updated in-place" означает, что провайдер поддерживает изменение этого атрибута без простоя и пересоздания ресурса (как в случае с тегами).
Пример кода
example.txt
Terraform will perform the following actions:
# aws_instance.cache will be created
+ resource "aws_instance" "cache" {
+ ami = "ami-0abc"
+ instance_type = "t3.small"
}
# aws_s3_bucket.old will be destroyed
- resource "aws_s3_bucket" "old" {
- bucket = "legacy-bucket"
}
# aws_instance.web will be updated in-place
~ resource "aws_instance" "web" {
~ tags = {
~ "Owner" = "alice" -> "bob"
}
}
Plan: 1 to add, 1 to change, 1 to destroy.Что использовать на практике
- Практика. перед apply важно просматривать не только итоговую строку с числами, а каждый блок изменений — особенно обращая внимание на
-(destroy) и-/+(replace), так как они могут означать потерю данных или простой сервиса, если ресурс содержит state (например, EBS-том, база данных).
Подводные камни
- Ошибка. считать, что раз итоговая строка выглядит компактно, то можно не читать детали; не замечать удаление ресурса, если он на самом деле ещё используется приложением и его удаление вручную убрали из кода по ошибке, а не намеренно.