部署AWS Terraform时出现ACM证书most_recent筛选不支持报错
问题现象
部署此前可正常运行的AWS Terraform配置时突发报错:Error: most_recent filtering on different ACM certificate statues is not supported
对应配置未做任何手动修改,公开渠道相关参考资料较少,无法直接定位问题。
触发报错的配置片段:
data "aws_acm_certificate" "primary" { domain = local.primary_ssl_cert_domain types = ["AMAZON_ISSUED"] most_recent = true }
触发原因
该报错由两个因素共同触发:
- Terraform AWS Provider版本迭代后调整了
aws_acm_certificate数据源的默认逻辑:当配置most_recent = true但未显式指定statuses过滤参数时,Provider会尝试拉取该域名下所有状态的ACM证书(包括待验证、已签发、已过期、验证超时等全量状态),再本地排序选取最新版本。 - AWS ACM的ListCertificates接口本身不支持跨不同证书状态执行most_recent排序筛选,当账号下对应域名存在多个不同状态的证书时(比如旧证书过期留存、新申请证书未完成验证、重复申请的证书残留),接口会直接返回参数错误。
之前配置可以正常运行,通常是因为当时账号下该域名的所有ACM证书均为同一状态(比如全部是已签发状态),未触发接口的跨状态校验;要么是本地/流水线使用的AWS Provider版本较旧,未采用新的默认查询逻辑。
修复方法
在数据源配置中显式添加statuses参数,明确指定需要筛选的证书状态,避免Provider触发跨状态查询即可。常规业务场景下只需要筛选已签发的可用证书,修改后的配置如下:
data "aws_acm_certificate" "primary" { domain = local.primary_ssl_cert_domain types = ["AMAZON_ISSUED"] most_recent = true statuses = ["ISSUED"] }
如果有特殊场景需要匹配其他状态的证书,将对应状态值加入statuses列表即可,注意不要混合API不支持联合排序的状态值,绝大多数场景下配置["ISSUED"]即可完全解决该报错,修改后重新执行plan/apply流程即可正常部署,无需调整其他关联资源配置。
内容的提问来源于stack exchange,提问作者Moffen
相关产品推荐
相关产品推荐

