【问题标题】:How to convert the aws secret manager string to map in terraform (0.11.13)如何将 aws secret manager 字符串转换为 terraform (0.11.13) 中的地图
【发布时间】:2021-01-24 05:01:10
【问题描述】:

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

我们都想使用jsondecode() 作为最新 terraform 的一部分,但在升级 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"

Google 搜索没有多大帮助。

任何帮助将不胜感激。

操作系统:Windows 10

【问题讨论】:

  • 嘿,我没有使用 windows10 的经验来验证。外部助手是 terraform 用来运行助手的 golang 插件。如果 Windows 支持 echo,我会检查并安装相关的 golang 插件(我相信是帮助程序/模式)并检查操作系统兼容性。
  • windows powershell 现在支持echo。但 terraform 无法做到这一点。 PS C:\Users\Sanjeev> echo "sanjeev" sanjeev

标签: amazon-web-services terraform devops terraform0.11


【解决方案1】:

听起来您想为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"
}

注意:您也可以使用秘密名称 文档: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 版本中。只是一个提示。

【讨论】:

  • 虽然这对 Terraform 0.12+ 很有用,但问题特别需要 Terraform 0.11 的答案。
  • 啊,错过了那个细节。我的错。
猜你喜欢
  • 2021-12-09
  • 2022-01-27
  • 2020-01-09
  • 2017-03-22
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
相关资源
最近更新 更多