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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:15:42