Terraform: инфраструктура на уровне кода | страница 66
• prevent_destroy. Это второй параметр жизненного цикла, с которым вы сталкиваетесь (первым был create_before_destroy в главе 2). Если присвоить ему true, при попытке удаления соответствующего ресурса (например, при выполнении terraformdestroy) Terraform вернет ошибку. Это позволяет предотвратить случайное удаление важных ресурсов, таких как бакет S3 со всем вашим состоянием Terraform. Конечно, если вы действительно хотите его удалить, просто закомментируйте этот параметр.
• versioning. В данном разделе включается управления версиями в бакете S3, в результате чего каждое обновление хранящегося в нем файла будет создавать его новую версию. Это позволяет просматривать старые версии и откатываться к ним в любой момент.
•server_side_encryption_configuration. В этом разделе включается шифрование по умолчанию на стороне сервера для всех данных, которые записываются в бакет S3. Благодаря этому ваши файлы состояния и любые конфиденциальные данные, которые могут в них содержаться, всегда будут шифроваться при сохранении в S3.
Далее нужно создать таблицу DynamoDB, которая будет использоваться для блокирования. DynamoDB — это распределенное хранилище типа «ключ — значение» от Amazon. Оно поддерживает строго согласованное чтение и условную запись — все, что необходимо для распределенной системы блокирования. Более того, оно полностью управляемое, поэтому вам не нужно заниматься никакой дополнительной инфраструктурой, а большинство сценариев применения Terraform легко впишутся в бесплатный тарифный план37.
Чтобы использовать DynamoDB для блокирования в связке с Terraform, нужно создать таблицу с первичным ключом под названием LockID (с аналогичным написанием). Это можно сделать с помощью ресурса aws_dynamodb_table:
resource "aws_dynamodb_table" "terraform_locks" {
name = "terraform-up-and-running-locks"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
Выполните terraforminit, чтобы загрузить код провайдера, а затем terraformapply, чтобы развернуть ресурсы. Примечание: чтобы иметь возможность развертывать этот код, у вашего пользователя IAM должны быть права на создание бакетов S3 и таблиц DynamoDB, как описано в разделе «Подготовка вашей учетной записи в AWS» на с. 60. После завершения развертывания вы получите бакет S3 и таблицу DynamoDB, но ваше состояние Terraform по-прежнему будет храниться локально. Чтобы хранить его в бакете S3 (с шифрованием и блокированием), нужно добавить в свой код раздел backend. Это конфигурация самой системы Terraform, поэтому она находится внутри блока terraform и имеет следующий синтаксис: