【发布时间】: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