Кто-то изменил ресурс в консоли облака, и plan хочет откатить это — объясните и решите
Коллега изменил размер инстанса в консоли AWS. Ваш следующий terraform plan на неизменном конфиге показывает дифф ниже. Объясните, ПОЧЕМУ Terraform хочет это изменение, и дайте безопасные способы решить — и сохранив правку из консоли, и отбросив её — не редактируя state руками.
# aws_instance.web will be updated in-place
~ resource "aws_instance" "web" {
id = "i-0abc123"
~ instance_type = "t3.large" -> "t3.small"
# (12 unchanged attributes hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
Определите причину и дайте решение.
Terraform обнаружил дрейф — консоль выставила t3.large, а конфиг всё ещё говорит t3.small, поэтому plan возвращает реальность к коду. Чтобы сохранить значение из консоли, обновите конфиг до t3.large или добавьте ignore_changes для него. Чтобы отбросить — просто apply. State руками не правьте.
- ✗Править
terraform.tfstateруками под значение из консоли - ✗Делать
taintресурса, форся ненужное уничтожение и пересоздание - ✗Считать, что живая инфраструктура всегда важнее конфига
- →Когда
apply -refresh-only— верный способ принять правку из консоли? - →Чем
ignore_changesотличается от удаления атрибута из конфига?
Диф — это дрейф: консоль поставила t3.large, а код всё ещё требует t3.small, поэтому plan предлагает свести реальность к коду.
Сохранить правку из консоли
resource "aws_instance" "web" {
ami = "ami-123"
instance_type = "t3.large" # обновляем код под реальность
# либо перестаём управлять этим атрибутом:
lifecycle {
ignore_changes = [instance_type]
}
}
Обновление кода или ignore_changes убирает дифф, сохранив живое значение. Принять состояние в state, ничего не меняя, можно через terraform apply -refresh-only.
Отбросить правку из консоли
Просто terraform apply — Terraform вернёт t3.small. State руками не трогаем.