Назад | Перейти на главную страницу

Изменение переменной, используемой для чувствительного значения в Terraform, без перестройки ресурса

У меня есть модуль Terraform, который устанавливает пароль администратора на основе переменной

admin_password = "${var.local_admin_password}"

Тем не мение, var.local_admin_password это уже не единственное место, откуда можно получить пароль. Мне нужно изменить логику, чтобы она была примерно такой:

admin_password = "${var.local_admin_password != "" ? var.local_admin_password : module.secrets.local_admin_password}"

Если local_admin_password поставляется, он использует это, но если это не после этого он должен получить пароль от модуля секретов.

Это отлично работает для новый Ресурсы. Но применение этого к старым ресурсам вызывает изменение чувствительной переменной admin_password который запускает новый ресурс. У всех старых ресурсов будет local_admin_password поставляется, поэтому значение фактически не меняется.

Есть ли способ сделать это изменение таким образом, чтобы Terraform распознал, что данные на самом деле такие же, и не запускал изменение ресурса?

Вы можете попробовать использовать ignore_changes в пределах lifecycle блок конфигурации для конкретного ресурса. Обратите внимание: это нельзя сделать на уровне модуля, а только для каждого ресурса.

Пример того, как его можно использовать, следующий, где атрибут «acl» будет проигнорирован после первоначального создания ресурса:

resource "aws_s3_bucket" "bucket" {
  name = "test-bucket"
  acl  = "private"

  lifecycle {
    ignore_changes = ["acl"]
  }
}

Это поведение описано здесь: https://www.terraform.io/docs/configuration/resources.html#ignore_changes