现在已经被困在这个问题上无数个小时了。
这个命令通过终端对我来说效果非常好:
aws ssm get-parameter --name "/something/i/know/exists" --query "Parameter.Value" --output text
输出:
subnet-whatIwouldExpect
但是将其设置为 Terraform 内的变量则完全是另一回事。
(我一直很高兴使用 Terraform 计划/应用/销毁等)
data "external" "ssm_parameter_value" {
program = ["bash", "-c", <<-EOF
result=$(aws ssm get-parameter --name "/something/i/know/exists" --query "Parameter.Value" --output text)
echo "{\"result\": \"$result\"}"
EOF
]
}
output "ssm_parameter_result" {
value = data.external.ssm_parameter_value.result
}
当我尝试terraform刷新时,我得到:
ssm_parameter_result = tomap({
"result" = ""
})
这非常令人沮丧,我不知道我做错了什么。
这是我的整个文件:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.34.0"
}
}
required_version = ">= 0.14.9"
}
provider "aws" {
region = "eu-west-2"
default_tags {
tags = local.common_tags
}
}
data "aws_caller_identity" "current" {}
data "aws_region" "current" {}
# Execute AWS CLI command to get SSM parameter value
data "external" "ssm_parameter_value" {
program = ["bash", "-c", <<-EOF
result=$(aws ssm get-parameter --name "/something/i/know/exists" --query "Parameter.Value" --output text)
echo "{\"result\": \"$result\"}"
EOF
]
}
output "ssm_parameter_result" {
value = data.external.ssm_parameter_value.result
}
没有理由只是为了在 Terraform 代码中查找 SSM 参数值而使用命令行并使用 AWS CLI 工具。这是一种非常复杂且容易出错的获取值的方法。
只需将您的
data "external" "ssm_parameter_value"
替换为以下内容:
data "aws_ssm_parameter" "my_parameter" {
name = "/something/i/know/exists"
}
然后用
aws_ssm_parameter.my_parameter.value
引用该值,例如:
output "ssm_parameter_result" {
value = aws_ssm_parameter.my_parameter.value
}