【问题标题】:Module for AWS Secret Manager with value/key - Terraform具有值/键的 AWS Secret Manager 模块 - Terraform
【发布时间】:2022-01-27 23:44:27
【问题描述】:

我有以下 TF 模块来创建 Secret Manager 资源:

resource "aws_secretsmanager_secret" "secrets_manager" {
  count = length(var.secrets)
  name = element(split(":", var.secrets[count.index]),0)
  description = "Managed by Terraform"
}

resource "aws_secretsmanager_secret_version" "secret" {
  count =  length(var.secrets)
  secret_id = aws_secretsmanager_secret.secrets_manager[count.index].id
  secret_string = <<EOF
   {
    "${element(split(":", var.secrets[count.index]),1)}": "${element(split(":", var.secrets[count.index]),2)}"
   }
EOF
}

与:

module "secrets_manager" {
  source = "./modules/secret_manager"
  secrets = [
    "secret_name:secret_value:secret_key",
     ...
    ]
}

这对我来说非常有效。现在我想要的是在不改变这个机制的情况下创建一个秘密而不指定/创建一个值/键的可能性。

module "secrets_manager" {
  source = "./modules/secret_manager"
  secrets = [
    "secret_name:secret_value:secret_key",
    "secret_name",
    "secret_name:secret_value:secret_key",
     ...
    ]
}

我一直在尝试使用地图作为变量等....没有运气:

 secrets_map = {
    secret_one = {
      secret_name = "...."
      secret_value = "...."
      secret_key = "...."
    }

    secret_two = {
      secret_name = "...."
    }
  }
}

【问题讨论】:

  • “我一直在尝试使用地图作为变量,等等......没有运气。”显示该代码。地图(实际上是地图列表)是实现此目的的好方法。如果您在使用地图时遇到问题,请显示代码以便我们为您提供帮助。
  • 嗨@MarkB 我已经添加了地图,现在我想知道如何读取这些值,我正在研究一个带有查找功能的循环......

标签: terraform terraform-provider-aws


【解决方案1】:

工作!

resource "aws_secretsmanager_secret" "secrets_manager" {
  for_each    = var.secrets_map
  name        = each.value["secret_name"]
  description = "Managed by Terraform"
}

resource "aws_secretsmanager_secret_version" "secret" {
  for_each = {
    for key, value in var.secrets_map :
    key => value
    if lookup(value, "secret_value", "") != ""
  }
  secret_id     = each.value["secret_name"]
  secret_string = <<EOF
   {
    "${each.value["secret_value"]}": "${each.value["secret_key"]}"
   }
EOF
  depends_on = [
    aws_secretsmanager_secret.secrets_manager
  ]
}

与:

module "secrets_manager" {
  source = "./modules/secret_manager"
  secrets_map = {
    secret_one = {
      secret_name  = "...."
      secret_value = "...."
      secret_key   = "...."
    }
    secret_two = {
      secret_name  = "...."
      secret_value = ""
      secret_key   = ""
    }
  }
}

还有:

variable "secrets_map" {
  type = map(object({
    secret_name  = string
    secret_value = string
    secret_key   = string
  }))
}

我无法保留默认值以避免传递空值。

额外:

terraform import .......module.secrets_manager.aws_secretsmanager_secret.secrets_manager[\"secret_two\"] arn....

感谢:https://www.youtube.com/watch?v=UFEhJFIj9gY

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 2020-12-25
    • 2022-07-19
    • 2020-08-16
    • 2021-06-29
    • 2020-03-31
    • 2020-06-18
    • 2021-07-17
    • 2021-10-12
    相关资源
    最近更新 更多