【问题标题】:How to create many secrets in AWS secrets manager using terraform如何使用 terraform 在 AWS 机密管理器中创建许多机密
【发布时间】:2022-01-23 05:07:52
【问题描述】:

我想要做的是将密钥名称列表提供给一个模块,该模块将用于在秘密管理器中生成许多具有不同随机密码的秘密。

我尝试了很多不同的方法,但到目前为止都失败了。

这是我目前拥有的:

module "secrets-manager-1" {

  source = "lgallard/secrets-manager/aws"

  for_each = var.list
  secrets = {
    "${each.value}" = {
      description             = each.value
      recovery_window_in_days = 7
      secret_string           = random_password.special_password.result
    }
  }

  tags = var.standard_tags
}

resource "random_password" "special_password" {
  count = 2
  length = 16
  special = true
}

variable "list" {
  type    = list(string)
  default = [
    "secret_key_1",
    "secret_key_2"

  ]
}

错误:

│ Error: Invalid for_each argument
│
│   on ..\..\modules\jitsi\jitsi_secrets.tf line 54, in module "secrets-manager-1":
│   54:   for_each = var.list
│     ├────────────────
│     │ var.list is list of string with 2 elements
│
│ The given "for_each" argument value is unsuitable: the "for_each" argument must be a map, or set of strings, and you have provided a value of type list of string.
╵
Releasing state lock. This may take a few moments...

【问题讨论】:

  • 您已经描述了所需的行为,但没有描述当前的行为。我不会运行它只是为了看看它做了什么,所以我理解你的问题。请在问题本身中包含任何实际错误或不良行为。
  • 嗨,马克,抱歉,这是错误:│错误:无效的 for_each 参数││在 ..\..\modules\jitsi\jitsi_secrets.tf 第 54 行,在模块“secrets-manager-1 ": │ 54: for_each = var.list │ ├──────────────── │ │ var.list 是包含 2 个元素的字符串列表 │ │ 给定的“for_each”参数值为不合适:“for_each”参数必须是映射或字符串集,并且您提供了字符串列表类型的值。 ╵ 释放状态锁。这可能需要一些时间...
  • 请按照@MarkB 的要求将错误添加到问题中,而不是在评论中。
  • 点击您的问题下方的edit 按钮。将错误添加到实际问题本身,格式化以便我们可以阅读它。

标签: amazon-web-services for-loop terraform aws-secrets-manager


【解决方案1】:

不幸的是,您提供的甚至不是有效的 Terraform 代码。我相信您希望实现以下目标:

// Create N random password. In this case N = 2
resource "random_password" "special_password" {
  count   = 2
  length  = 16
  special = true
}

// Import a third party module
module "secrets-manager-1" {

  source = "lgallard/secrets-manager/aws"

  // Loop through the random_passowrd resouces and create the secrets
  secrets = {
      for index, pwd in random_password.special_password.*.result : "${element(var.list, index)}" => {
          secret_string: "${pwd}",
          recovery_window_in_days = 7
      }
  }
}

您可能需要查看 splat expressions 以了解能够迭代多个资源。这用于secrets-manager-1 模块中的for 表达式。

【讨论】:

  • 你先生是个传奇!评论后我确实注意到了我的错误。您可能需要将“count = length(var.list)”添加到 random_password,以便在更新列表时不需要增加数字。 (这就是我在我现在工作的代码中所做的:)
猜你喜欢
  • 2021-04-17
  • 2018-11-27
  • 2020-12-04
  • 2020-11-25
  • 1970-01-01
  • 2021-06-28
  • 2019-09-13
  • 2021-08-09
  • 2019-05-31
相关资源
最近更新 更多