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