能否将AWS Parameter Store数据源的值赋值给Terraform变量?
结论:这种写法不可行
你尝试把AWS SSM参数的值作为Terraform变量的默认值,这个操作是不被允许的,原因在于:
- Terraform的
variable块属于输入变量定义,它的default参数只能用静态值(比如固定字符串、数字),不能引用数据源、资源属性这类需要在后续执行阶段才能解析的内容。 - Terraform的执行顺序是先处理变量和本地值的静态定义,之后才会读取数据源,所以变量默认值无法提前获取到数据源的结果。
替代方案:用本地值简化引用
如果想简化重复引用的写法,推荐用本地值(locals),这是Terraform官方推荐的方式,示例代码如下:
# 读取SSM参数 data "aws_ssm_parameter" "environment" { name = "environment" } # 定义本地值,后续直接引用 locals { environment = data.aws_ssm_parameter.environment.value }
之后在配置的任何地方,只需要写local.environment就能引用这个SSM参数的值,既简洁又符合Terraform的执行逻辑。
补充:其他可选方式
如果一定要用输入变量的形式,可以通过外部传入值:
- 命令行传入:
terraform apply -var="environment=$(aws ssm get-parameter --name environment --query Parameter.Value --output text)" - 写入
.tfvars文件:先通过脚本把SSM参数值写入文件,再让Terraform加载这个文件
但相比本地值,这两种方式都需要额外的操作步骤,不如本地值直接高效。
内容的提问来源于stack exchange,提问作者Kadir
相关产品推荐
相关产品推荐

