Terraform регенерирующие ресурсы при добавлении нового объекта на карту - PullRequest
0 голосов
/ 08 октября 2019

У меня есть модуль Terraform (до 0.12), который генерирует пул пользователей Amazon Cognito + клиент и домен.

resource "aws_cognito_user_pool" "pool" {
  count = "${var.user_pool_count}"
  name  = "${lookup(var.user_pools[count.index], "name")}"

  username_attributes      = ["email"]
  auto_verified_attributes = ["email"]

  password_policy {
    minimum_length    = "${lookup(var.user_pools[count.index], "password_minimum_length")}"
    require_lowercase = "${lookup(var.user_pools[count.index], "password_require_lowercase")}"
    require_numbers   = "${lookup(var.user_pools[count.index], "password_require_numbers")}"
    require_symbols   = "${lookup(var.user_pools[count.index], "password_require_symbols")}"
    require_uppercase = "${lookup(var.user_pools[count.index], "password_require_uppercase")}"
  }

  verification_message_template = {
    default_email_option = "CONFIRM_WITH_LINK"
  }

  lambda_config = {
    pre_token_generation = "${var.lambda_pre_token_generation}"
    custom_message       = "${var.lambda_custom_message}"
  }

  email_configuration = {
    reply_to_email_address = "${lookup(var.user_pools[count.index], "reply_to_email_address")}"
    source_arn             = "${lookup(var.user_pools[count.index], "source_arn")}"
    email_sending_account  = "${lookup(var.user_pools[count.index], "email_sending_account")}"
  }

  schema = [
    < REDACTED >
  ]
}

resource "aws_cognito_user_pool_client" "client" {
  count               = "${var.user_pool_count}"
  name                = "${lookup(var.user_pools[count.index], "name")}"
  user_pool_id        = "${element(aws_cognito_user_pool.pool.*.id,count.index)}"
  explicit_auth_flows = ["ADMIN_NO_SRP_AUTH", "USER_PASSWORD_AUTH"]
}

resource "aws_cognito_user_pool_domain" "main" {
  count        = "${var.user_pool_count}"
  domain       = "${lookup(var.user_pools[count.index], "domain")}"
  user_pool_id = "${element(aws_cognito_user_pool.pool.*.id,count.index)}"
}

Принимает список карт с именем user_pools для определения необходимых пулов пользователей Cognito. К сожалению, когда я добавляю новую карту с определением нового пула, Terraform заставляет воссоздать aws_cognito_user_pool_client и aws_cognito_user_pool_domain для всех пулов. Это происходит потому, что он видит изменение в:

user_pool_id: "eu-west-1_R8SDX8Yqj" => "${element(aws_cognito_user_pool.pool.*.id,count.index)}" (forces new resource)

Я предполагаю, что это потому, что Terraform наблюдает изменение в aws_cognito_user_pool.pool.*.id и форсирует воссоздание. Может кто-нибудь объяснить, как это обойти? Для меня неоптимально восстановить все мои домены и клиентов.

1 Ответ

0 голосов
/ 08 октября 2019

Для тех, кто читает это. Я обнаружил следующую проблему на Github - https://github.com/hashicorp/terraform/issues/14357

Изменение моего синтаксиса на следующее появилось, чтобы исправить это.

user_pool_id = "${aws_cognito_user_pool.pool.*.id[count.index]}"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...