Terraform долгосрочный замок - PullRequest
2 голосов
/ 18 октября 2019

Использование Terraform 0.12 с удаленным состоянием в корзине S3 с блокировкой DynamoDB.

Кажется, что общий шаблон для автоматизации Terraforming выглядит примерно так:

  1. terraform plan -out=plan
  2. [план обзора]
  3. terraform apply plan

Но тогда, может быть, я упускаю из виду что-то очевидное, нет гарантии, что другие terraform apply вызовы убежищане обновил инфраструктуру между 1 и 3. Выше.

Я знаю, что блокировка предотвратит одновременный запуск terraform apply, пока запущен другой (и блокировка включена), но могу ли я программно получить «длительную блокировку»«так эффективный рабочий процесс выглядит следующим образом?

  1. [что-то вроде ...]« terraform lock »
  2. terraform plan -out=plan
  3. [план обзора]
  4. terraform apply plan
  5. [что-то вроде эффекта ...] «блокировка освобождения terraform»

Существуют ли другие средства для «защиты» инфраструктурыс concurrent/interdependant обновлений, которые я пропускаю?

1 Ответ

1 голос
/ 18 октября 2019

Вам это не нужно, если вас беспокоит только изменение файла состояния.

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

Например:

$ cat <<'EOF' >> main.tf
> resource "random_pet" "bucket_suffix" {}
> 
> resource "aws_s3_bucket" "example" {
>   bucket = "example-${random_pet.bucket_suffix.id}"
>   acl    = "private"
> 
>   tags = {
>     ThingToChange = "baz"
>   }
> }
> EOF
$ terraform init
# ...
$ terraform apply
# ...
$ $ sed -i 's/foo/bar/' main.tf
$ terraform plan -out=plan
# ...
$ sed -i 's/bar/baz/' main.tf
$ terraform apply
# ...
$ terraform apply plan
Error: Saved plan is stale

The given plan file can no longer be applied because the state was changed by
another operation after the plan was created.

Чего он не сделает, так это того, что что-то за пределами Terraform ничего не изменит. Поэтому, если бы вместо применения Terraform снова с baz в качестве тега для корзины, я изменил тег на корзине через CLI AWS или консоль AWS, тогда Terraform с радостью изменил бы его обратно на bar при применении сустаревший план.

...