我正在查找 SSM 参数,该参数可能存在也可能不存在,具体取决于传入的变量:
data "aws_ssm_parameter" "server_tags" {
name = "/${var.env_number}/server_tags"
}
然后我在本地使用它,如下所示并传递到我的模块:
locals {
server_tags = data.aws_ssm_parameter.server_tags != null ? jsondecode(data.aws_ssm_parameter.server_tags.value) : {}
instance_tags = merge(var.instance_tags, local.server_tags)
}
当我的参数存在时,这工作正常,但是如果我传入一个我的参数不存在的值,则会收到错误:
Error describing SSM parameter (/997/server_tags): ParameterNotFound:
我是否可以预先检查该参数是否存在或以某种方式使其可选?
谢谢
遗憾的是你不能这样做。 TF 没有任何构建机制来检查数据源是否存在。但是您可以使用外部数据源来编写自己的逻辑。
由于您对外部数据源进行了编程,因此您可以创建一个逻辑来检查资源是否存在。
在 Terraform 1.5.4 中,我能够将
count
与 aws_ssm_parameter
: 一起使用
data "aws_ssm_parameter" "bucket_name" {
count = var.bucket_name_ssm_path == "none" ? 0 : 1
name = var.bucket_name_ssm_path
}
variable "bucket_name_ssm_path" {
type = string
default = "none"
}
locals {
bucket_name = var.bucket_name_ssm_path == "none" ? null : data.aws_ssm_parameter.bucket_name[0].value
}
我的模块还使用
bucket_prefix
或 bucket_name = local.bucket_name
并且它似乎可以工作。我不确定这是否是 Terraform 的新功能,我确信它在过去不起作用。