尝试创建 AWS::Route53::RecordSet 时,AWS CloudFormation 返回“无效请求”

尝试创建 AWS::Route53::RecordSet 时,AWS CloudFormation 返回“无效请求”

我对这个很困惑。

99% 的情况下,CloudFormation 都能很好地为您提供一些可用的调试消息,但是“无效的请求”让我很困惑,特别是当资源一开始就很简单的时候。

这就是给我带来问题的资源(模板由 Ansible 生成,因此有 {{ ... }} 符号),

"DatabaseDNSRecord": {
    "Type": "AWS::Route53::RecordSet",
    "Properties": {
        "HostedZoneId": "HOSTED_ZONE_ID",
        "Name": "db.{{ item.env_name|lower }}v2.<DOMAIN>.com.",
        "ResourceRecords": [
            {
                "Fn::GetAtt": [ "Database", "Endpoint.Address" ]
            }
        ],
        "Type": "CNAME"
    },
    "DependsOn": "Database"
}

据我从文档中了解,所需的一切都存在、正确且格式正确。

我唯一能想到的是我添加此资源现存的我之前创建的 CloudFormation 堆栈已经创建了Database资源,根据记录,它是AWS::RDS::DBInstance(如果需要,也很乐意发布该资源模板,没什么特别的)。

知道为什么我会收到“无效请求”吗?

谢谢。

编辑:我尝试过,有和没有TTL,都是同样的错误。

答案1

事实证明我没试过TTL DependsOn

适用于这两者。

答案2

除了 TTL 和 DependsOn 之外,主要思想是确保系统不会尝试使用不存在的引用来创建记录集。

因此,DependsOn 不仅必须存在,还必须列出 RecordSetGroup 定义中引用的所有资源(负载均衡器、其他 DNS 条目、ENI 等)。这将确保 cloudformation 延迟创建 DNS 记录,直到满足先决条件为止。

答案3

我有类似的问题,我刚刚设置了TTL属性,它运行良好,似乎TTL属性对于这样的记录集是必须的。

我没有使用,DependsOn因为记录集依赖于"ResourceRecords" : [ { "Fn::GetAtt" : [ "ApplicationRds" , "Endpoint.Address" ] } ],“ApplicationRds”资源,所以我看不出使用有什么好处DependsOn

答案4

如果在创建记录时发生同样的错误有一TTL组,检查它们是否不是ALIAS类型记录,因为它们必须不是有一个 TLL(因为它是从 复制而来的AliasTarget)。

相关内容