Terraform中AWS ACM证书SAN列表含空值的条件配置问题
解决Terraform配置AWS ACM证书动态SAN列表的null值报错问题
你遇到的核心问题是Terraform的AWS ACM证书资源不允许subject_alternative_names列表中存在null值,直接用条件判断返回null会触发报错。下面给你可行的实现方案,同时分析你之前尝试的问题所在:
正确配置写法
resource "aws_acm_certificate" "acm" { domain_name = var.env_name == "prod" ? "*.${var.base_domain}" : "*.${var.env_name}.${var.base_domain}" validation_method = "DNS" subject_alternative_names = compact(concat( var.env_name == "prod" ? [var.base_domain] : [], ["*.${data.terraform_remote_state.dns.outputs.domain}"] )) }
逻辑说明
- 用
concat合并两个列表:第一个列表根据环境动态生成,prod环境时包含主域名var.base_domain,非prod环境则是空列表;第二个列表是固定需要的SAN项。 compact函数用来过滤列表中的空字符串(做兜底处理,避免意外出现的空值影响配置)。
你之前尝试的问题分析
- 初始尝试:直接在列表中返回
null,Terraform明确禁止subject_alternative_names包含null元素,因此触发报错; - 第一个compact写法:
compact要求接收单个列表参数,你直接传了两个字符串参数,属于语法错误; - 第二个compact写法:
tolist(null)会生成包含null的列表,虽然compact能移除null,但参数传递格式错误,compact仅接受单个列表参数; - 第三个尝试:把空列表和字符串放在同一个列表里,导致列表元素类型混合(列表+字符串),Terraform不允许这种类型不一致的列表。
内容的提问来源于stack exchange,提问作者scrow
相关产品推荐
相关产品推荐

