Terraform: инфраструктура на уровне кода | страница 68



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, это похоже на ситуа­цию с курицей и яйцом. Чтобы этот подход работал, вам пришлось выполнить следующее.