Читаем Terraform: инфраструктура на уровне кода полностью

BACKEND_NAME — это имя хранилища, которое вы хотите использовать (например, "s3"), а CONFIG содержит один или несколько аргументов, предусмотренных специально для этого хранилища (скажем, имя бакета S3, который нужно использовать). Так выглядит конфигурация backend для бакета S3:

terraform {

  backend "s3" {

    # Поменяйте это на имя своего бакета!

    bucket         = "terraform-up-and-running-state"

    key            = "global/s3/terraform.tfstate"

    region         = "us-east-2"

    # Замените это именем своей таблицы DynamoDB!

    dynamodb_table = "terraform-up-and-running-locks"

    encrypt        = true

  }

}

Пройдемся по этим параметрам.

•bucket. Имя нужного бакета S3. Не забудьте поменять его на название созданного ранее бакета.

• key. Файловый путь внутри бакета S3, по которому Terraform будет записывать файл состояния. Позже вы увидите, почему в предыдущем примере этому параметру присвоено global/s3/terraform.tfstate.

• region. Регион AWS, в котором находится бакет S3. Не забудьте указать регион того бакета, который вы создали ранее.

• dynamodb_table. Таблица DynamoDB, которая будет использоваться для блокирования. Не забудьте указать имя той таблицы, которую вы создали ранее.

•encrypt. Если указать true, состояние Terraform будет шифроваться при сохранении в S3. Это дополнительная мера, которая гарантирует шифрование данных во всех ситуациях, так как мы уже включили шифрование по умолчанию для S3.

Чтобы состояние Terraform сохранялось в этом бакете, нужно опять выполнить terraforminit. Эта команда не только загрузит код провайдера, но и сконфигурирует хранилище Terraform (еще одно ее применение вы увидите чуть позже). Более того, она идемпотентная, поэтому ее повторное выполнение безопасно:

$ terraform init

Initializing the backend...

Acquiring state lock. This may take a few moments...

Do you want to copy existing state to the new backend?

  Pre-existing state was found while migrating the previous "local" backend

  to the newly configured "s3" backend. No existing state was found in the

  newly configured "s3" backend. Do you want to copy this state to the new

  "s3" backend? Enter "yes" to copy and "no" to start with an empty state.

  Enter a value:

Terraform автоматически определит, что у вас уже есть локальный файл состояния, и с вашего позволения скопирует его в новое хранилище S3. Если ввести yes, можно увидеть следующее:

Successfully configured the backend "s3"! Terraform will automatically use this backend unless the backend configuration changes.

После выполнения этой команды ваше состояние Terraform будет сохранено в бакете S3. Чтобы в этом убедиться, откройте консоль управления S3 (https://amzn.to/ ­­2Kw5qAc) в своем браузере и выберите свой бакет. Вы должны увидеть нечто похожее на рис. 3.1.

После включения этого хранилища Terraform будет автоматически загружать последнее состояние из бакета S3 перед выполнением команды и сохранять его туда после того, как команда будет выполнена. Чтобы увидеть, как это работает, добавьте следующие выходные переменные:

output "s3_bucket_arn" {

  value       = aws_s3_bucket.terraform_state.arn

  description = "The ARN of the S3 bucket"

}

output "dynamodb_table_name" {

  value       = aws_dynamodb_table.terraform_locks.name

  description = "The name of the DynamoDB table"

}

Рис. 3.1. Файл состояния Terraform, хранящийся в S3

Эти переменные выведут на экран ARN (Amazon Resource Name) вашего бакета S3 и имя вашей таблицы DynamoDB. Чтобы в этом убедиться, выполните terraformapply:

$ terraform apply

Acquiring state lock. This may take a few moments...

aws_dynamodb_table.terraform_locks: Refreshing state...

aws_s3_bucket.terraform_state: Refreshing state...

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Releasing state lock. This may take a few moments...

Outputs:

dynamodb_table_name = terraform-up-and-running-locks

s3_bucket_arn = arn:aws:s3:::terraform-up-and-running-state

Заметьте, что теперь Terraform устанавливает блокировку перед запуском команды apply и снимает ее после!

Еще раз зайдите в консоль S3 по адресу https://amzn.to/2Kw5qAc, обновите страницу и нажмите серую кнопку Show (Показать) рядом с надписью Versions (Версии). На экране должно появиться несколько версий вашего файла terraform.tfstate, хранящегося в бакете S3 (рис. 3.2).

Рис. 3.2. Несколько версий состояния Terraform в S3

Это означает, что Terraform действительно загружает данные состояния в S3 и из него и ваш бакет хранит каждую ревизию файла состояния, что может пригодиться для отладки и отката к более старой версии, если что-то пойдет не так.

Ограничения хранилищ Terraform

У хранилищ Terraform есть несколько ограничений и подводных камней, о которых вам следует знать. Прежде всего, когда вы используете Terraform для создания бакета S3, в котором вы хотите хранить состояние Terraform, это похоже на ситуа­цию с курицей и яйцом. Чтобы этот подход работал, вам пришлось выполнить следующее.

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги