【问题标题】:How to assign and export variable using Terraform如何使用 Terraform 分配和导出变量
【发布时间】:2021-01-16 15:24:25
【问题描述】:

我想使用 API 从第三方服务器获取密码,然后将其分配给参数存储:

最初我认为我可以使用 $TF_VAR_password 作为桥梁来实现这一点:

第 1 步:创建一个 .env 文件:

cat test.env 
export TF_VAR_password=< 3rd party API to get the password, say 123456 >

第二步:使用 Terraform null_resource 执行 test.env 以导出 TF_VAR_password:

resource "null_resource" "get_password" {
  triggers = {
    always_run = "${timestamp()}"
  }

  provisioner "local-exec" {
    command = "source ./${path.module}/test.env"
  }
}

第 3 步:将 TF_VAR_password(即 var.password)分配给参数存储:

resource "aws_ssm_parameter" "abc" {
  value             = var.password  <---------
  ...
}

当我运行上述 Terraform 时,它显示: 执行:["/bin/sh" "-c" "source ./../../../../aws/modules/test.env"]

但是当我运行 echo $TF_VAR_password 时,它不会将 $TF_VAR_password 显示为 123456。

如果我直接运行source ./../../../../aws/modules/test.env,我看到$TF_VAR_password 变成了123456,这意味着脚本本身是正确的。

如何从第三方服务器获取密码并将其分配给参数存储?

【问题讨论】:

  • 子进程(terraform)不能改变父进程的环境。
  • @John Hanley:那么无论如何要分配 TF_VAR_password 吗?谢谢。我最初的目的是从某个地方获取密码,并将其分配给使用 Terraform 启动的 RDS 服务器。为此,我使用 TF_VAR_password 作为变量来获取密码,然后将其分配给 RDS 的密码属性,并通过运行 terraform apply,这些事情会自动完成。
  • 在这种情况下,我的评论不适用。我以为您试图在 Terraform 中设置一个环境变量,然后稍后在父 shell 中使用该变量。如果您的目标是将环境变量传递给 terraform 执行的进程(例如 local-exec),那么 @Marcin 的答案很好。
  • John Hanley,我想使用 API 从另一台服务器获取密码(我在这里将其设置为 123456 只是为了便于解释)并使用 terraform 将其分配给资源 aws_db_instance.default.password我认为 TF_VAR_password 是实现这一目标的一种方式。但我不知道如何使它工作。如果这不是解决方案,还有其他好方法。请随时分享
  • 我建议更新您的问题以准确显示您需要完成的工作。您当前的问题“有点”混乱。

标签: shell environment-variables terraform


【解决方案1】:

HashiCorp 有一个名为 external 的专用数据源,它允许您调用您的 API、获取密码,然后将其返回到您的 TF 脚本以供以后使用。

这将要求您以 JSON 格式返回结果,如 docs 所示。

【讨论】:

  • Marcin: PASSWORD = var.password 是什么?我想导出 TF_VAR_password 以便 var.password 因为 123456 但是如果设置 PASSWORD = var.password 会发生什么?
  • PASSWORD 是 ENV 变量的名称,它将出现在您的脚本中。您可以随意重命名它。
  • Marcin:我没听懂。我运行你的命令,echo $TF_VAR_tdb_password 没有显示 123456 而echo $PASSWORD 没有显示任何内容
  • 谢谢,我正在测试,如果有帮助会更新。
  • @Marcin:非常感谢。有用!很高兴学习新知识。将有利于自动化。
猜你喜欢
  • 1970-01-01
  • 2021-02-26
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2021-04-12
  • 1970-01-01
  • 2017-07-27
相关资源
最近更新 更多