Terraform - 可选的 SSM 参数查找

问题描述 投票:0回答:2

我正在查找 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: 

我是否可以预先检查该参数是否存在或以某种方式使其可选?

谢谢

amazon-web-services terraform terraform-provider-aws
2个回答
4
投票

遗憾的是你不能这样做。 TF 没有任何构建机制来检查数据源是否存在。但是您可以使用外部数据源来编写自己的逻辑。

由于您对外部数据源进行了编程,因此您可以创建一个逻辑来检查资源是否存在。


0
投票

在 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 的新功能,我确信它在过去不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.