You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform如何实现可选AWS SSM参数查询 避免不存在时报错

可选SSM参数查询实现方案

你可以根据自己使用的AWS Provider版本选择以下两种方案:

方案1:AWS Provider >= v5.30.0 最简实现

新版本AWS Provider的aws_ssm_parameter数据源已经内置了ignore_missing参数,开启后参数不存在时不会抛出报错,直接返回空值:

data "aws_ssm_parameter" "server_tags" {
  name           = "/${var.env_number}/server_tags"
  # 开启忽略不存在的参数
  ignore_missing = true
  # 如果是SecureString类型参数,需要加下面的配置解密
  # with_decryption = true
}

对应的locals逻辑调整如下即可:

locals {
  server_tags = data.aws_ssm_parameter.server_tags.value != null ? jsondecode(data.aws_ssm_parameter.server_tags.value) : {}
  instance_tags = merge(var.instance_tags, local.server_tags)
}

方案2:旧版本Provider兼容实现

如果你的AWS Provider版本低于v5.30.0,可以结合aws_ssm_parameters_by_path数据源做存在性校验,再用count控制数据源是否执行查询:

  1. 先查询对应环境路径下的所有SSM参数列表
data "aws_ssm_parameters_by_path" "env_params" {
  path      = "/${var.env_number}/"
  recursive = false
  # 需要取参数值的话可以加with_decryption = true
}
  1. 只有目标参数存在时才执行实际的参数查询
data "aws_ssm_parameter" "server_tags" {
  count = contains(data.aws_ssm_parameters_by_path.env_params.names, "/${var.env_number}/server_tags") ? 1 : 0
  name  = "/${var.env_number}/server_tags"
  # with_decryption = true
}
  1. 调整locals取值逻辑兼容count为0的情况
locals {
  server_tags = length(data.aws_ssm_parameter.server_tags) > 0 ? jsondecode(data.aws_ssm_parameter.server_tags[0].value) : {}
  instance_tags = merge(var.instance_tags, local.server_tags)
}

内容的提问来源于stack exchange,提问作者CallumVass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:54:08