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

CloudFormation添加多条Route53 A记录时YAML格式错误排查

解决CloudFormation批量创建Route53 A记录的格式问题

核心问题分析

你遇到的YAML格式错误,大概率是!Join函数的数组参数缩进不规范,或是批量创建资源时的循环语法不符合CloudFormation的YAML规则。要批量生成子域名A记录,无需逐个索引配置,推荐使用CloudFormation的**!ForEach循环**(需确保模板使用2010-09-09及以上格式版本,且目标AWS区域支持该功能)。

正确模板配置示例

以下是完整可运行的模板,包含参数定义、域名映射、批量创建A记录的逻辑:

AWSTemplateFormatVersion: 2010-09-09
Parameters:
  SubDomains:
    Type: CommaDelimitedList
    Description: 子域名列表,用逗号分隔(如stat,log,it,web)
    Default: stat,log,it,web
  TargetIp:
    Type: String
    Description: A记录指向的目标IP地址
    Default: 192.168.1.1

Mappings:
  DomainMap:
    CN:
      DomainName: example.com

Resources:
  !ForEach SubDomain in !Ref SubDomains:
    - ${SubDomain}Record:
        Type: AWS::Route53::RecordSet
        Properties:
          HostedZoneName: !FindInMap [DomainMap, CN, DomainName]
          Name: !Join ['.', [!Ref SubDomain, !FindInMap [DomainMap, CN, DomainName]]]
          Type: A
          TTL: '300'
          ResourceRecords:
            - !Ref TargetIp

关键细节说明

  1. 参数处理:SubDomains采用CommaDelimitedList类型,传入的逗号分隔字符串会自动解析为数组,适配批量循环需求。
  2. 域名拼接:!Join函数必须以数组形式传入参数,注意方括号内元素的逗号分隔和缩进一致性,这是避免格式错误的核心。
  3. 批量创建逻辑:通过!ForEach遍历SubDomains数组,自动为每个子域名生成独立的AWS::Route53::RecordSet资源,无需手动逐个定义。
  4. 托管区配置:如果你的Route53托管区使用ID而非名称,可将HostedZoneName替换为HostedZoneId并传入对应ID。

常见格式错误排查

  • 确保!Join的参数数组格式正确:
    # 正确写法
    !Join ['.', [!Ref SubDomain, !FindInMap [DomainMap, CN, DomainName]]]
    # 错误写法(缩进或逗号缺失)
    !Join ['.', 
      !Ref SubDomain
      !FindInMap [DomainMap, CN, DomainName]
    ]
    
  • 若使用旧版CloudFormation不支持!ForEach,可改用AWS::Route53::RecordSetGroup实现批量创建:
    Route53RecordSetGroup:
      Type: AWS::Route53::RecordSetGroup
      Properties:
        HostedZoneName: !FindInMap [DomainMap, CN, DomainName]
        RecordSets:
          !ForEach SubDomain in !Ref SubDomains:
            - Name: !Join ['.', [!Ref SubDomain, !FindInMap [DomainMap, CN, DomainName]]]
              Type: A
              TTL: '300'
              ResourceRecords:
                - !Ref TargetIp
    

内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:23:12