我对此一无所知。
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
相同的错误。
原来我没有尝试
TTL
和DependsOn
。适用于这两者。
除了 TTL 和 DependsOn,主要思想是确保系统不会尝试使用不存在的引用创建记录集。
因此,DependsOn 不仅必须存在,而且必须列出 RecordSetGroup 定义中引用的所有资源(负载均衡器、其他 DNS 条目、ENI 等)。这将确保 cloudformation 延迟 DNS 记录的创建,直到满足先决条件。
我有类似的问题,我刚刚设置了
TTL
属性,它工作正常,似乎TTL
属性是此类记录集的必需品。我没有使用
DependsOn
,因为记录集依赖于"ResourceRecords" : [ { "Fn::GetAtt" : [ "ApplicationRds" , "Endpoint.Address" ] } ],
“ApplicationRds”资源,所以我看不到任何使用的好处DependsOn
如果在创建确实有
TTL
集合的记录时发生同样的错误,请检查它们是否不是ALIAS
-type 记录,因为它们一定没有TLL(因为它是从 复制的AliasTarget
)。