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



terraform {

  backend "" {

     [CONFIG...]

  }

}

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, можно увидеть следующее: