繁体   English   中英

如何在 terraform (0.11.13) 中将 aws secret manager 字符串转换为 map

[英]How to convert the aws secret manager string to map in terraform (0.11.13)

我在 AWS 秘密管理器中存储了一个秘密,并尝试在运行时将其集成到 terraform 中。 我们正在使用 terraform 0.11.13 版本,更新到最新的 terraform 在路线图中。

我们都想使用作为最新 terraform 的一部分可用的jsondecode() ,但在升级我们的 terraform 之前需要集成一些东西。

我们尝试使用作为https://github.com/terraform-providers/terraform-provider-aws/issues/4789的一部分建议的以下辅助外部数据程序。

data "external" "helper" {
  program = ["echo", "${replace(data.aws_secretsmanager_secret_version.map_example.secret_string, "\\\"", "\"")}"]
}

但是我们现在最终得到了这个错误。

data.external.helper: can't find external program "echo"

谷歌搜索没有多大帮助。

任何帮助都感激不尽。

操作系统:Windows 10

听起来您想为aws_secretsmanager_secret使用data source

terraform 中的资源新建资源。 terraform中的数据源参考了terraform中现有资源的价值。

data "aws_secretsmanager_secret" "example" {
  arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456"
}

data "aws_secretsmanager_secret_version" "example" {
  secret_id     = data.aws_secretsmanager_secret.example.id
  version_stage = "example"
}

注意:也可以使用secret名称 Docs: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/secretsmanager_secret

然后你可以像这样使用这个值:

output MySecretJsonAsString {
  value = data.aws_secretsmanager_secret_version.example.secret_string
}

根据文档,此资源的secret_string属性是:

最初作为字符串提供的受保护秘密信息的解密部分。

您还应该能够将该值传递给jsondecode ,然后单独访问 json 正文的属性。


但您要求 terraform 0.11.13 解决方案。 如果秘密值由 terraform 定义,您可以使用 terraform state 数据源来获取该值。 这确实相信除了 terraform 之外没有其他任何东西正在更新秘密。但最好的答案是升级你的 terraform。这可能是一个有用的权宜之计。

作为建议,您可以将 terraform 的版本设置为特定于一个模块而不是您的整个组织。 我通过使用运行特定版本 terraform bin 的 docker 容器来做到这一点。 每个模块的根目录中都有一个脚本,它将包装 terraform 命令以出现在该项目的 terraform 版本中。 只是一个小费。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM