求助:如何用Terraform提取AWS ACM中ISSUED状态的证书ARN列表
解决Terraform提取ACM证书ARN列表的问题
问题核心
data "aws_acm_certificate" "domains"执行后返回的是键值映射结构,每个键对应一个完整的证书对象,直接用嵌套循环提取属性容易触发语法错误,关键是要把映射中的证书对象转换成列表,再批量提取arn属性。
解决方案
用Terraform内置的values()函数结合splat表达式[*],可以快速生成纯ARN字符串列表,无需复杂循环:
1. 提取ARN的代码实现
在配置中添加输出块即可生成目标列表:
output "certificates" { value = values(data.aws_acm_certificate.domains)[*].arn }
2. 代码逻辑说明
values(data.aws_acm_certificate.domains):将data源返回的映射结构转为包含所有证书对象的列表[*].arn:对列表中的每个证书对象,批量提取arn属性,最终生成纯ARN字符串的数组
3. 效果验证
执行terraform apply后,输出的certificates会完全匹配你期望的格式:
certificates = [ "arn:aws:acm:us-east-1:AWS_ACCOUNT:certificate/22e77818-075d-4ffd-8f13-cbf91b801198", "arn:aws:acm:us-east-1:AWS_ACCOUNT:certificate/edd30a0b-f838-4bc9-8660-bd691e635df9" ]
4. 多账户场景扩展
如果需要跨多个AWS账户提取证书,可以通过provider别名分别获取各账户的证书数据,再用concat()合并列表:
# 示例:多账户证书ARN合并 output "all_account_certificates" { value = concat( values(data.aws_acm_certificate.account1_domains)[*].arn, values(data.aws_acm_certificate.account2_domains)[*].arn ) }
内容的提问来源于stack exchange,提问作者Jenobi
相关产品推荐
相关产品推荐

