У меня уже есть десятки экземпляров AWS, работающих в производственной среде, и я хотел бы начать использовать Terraform для автоматизации создания следующих. Я читал, что Terraform может помочь в отработке неизменяемого паттерна. Однако я бы хотел избежать риска уничтожения уже запущенного экземпляра. Предоставляет ли Terraform какую-либо защиту, чтобы избежать этого?
Ага - используйте план терраформирования
перед любой операцией. Будет выведен полный список изменений, которые будут внесены, без фактического выполнения любого из них, для вашего обзора.
Terraform не имеет явных гарантий для этого, но его общая конструкция уже не позволяет ему касаться существующих ресурсов.
Обычно каждый ресурс Terraform имеет некоторый первичный идентификатор (например, для EC2 - идентификатор экземпляра, для S3 - имя корзины). И каждый запуск Terraform должен только а) создавать новые ресурсы или б) обновлять / удалять существующие ресурсы под управлением Terraform.
В случае а) если идентификатор уже существует, вы получите сообщение об ошибке, и Terraform не может ничего создать (никогда не произойдет с EC2, но возможно с ковшами S3). Это возможность исправить код Terraform.
В случае б) Terraform должен работать только с «собственными» ресурсами, оставляя существующее содержимое вашей учетной записи в покое.
Можно намеренно (или случайно) вмешаться в Terraform. заменяя / переименовывая его ресурсы, это сломает вещи; но при "нормальном" использовании я никогда не встречал подобных проблем.
Вы можете добавить блок конфигурации жизненного цикла к ресурсу ( См. Конфигурация ресурса Terraform ); в частности, используя:
lifecycle {
prevent_destroy = true
}
Это вернет сообщение об ошибке, если план включает действие уничтожения ресурса.