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