【问题标题】:Why does AWS Cloudformation say "Invalid request" when trying to create this RecordSetGroup?为什么 AWS Cloudformation 在尝试创建此 RecordSetGroup 时会显示“无效请求”?
【发布时间】:2015-03-06 01:01:28
【问题描述】:

我有一个包含以下内容的 AWS CloudFormation 文件:

"myELB" : {
  "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
  Blah Blah Blah
},
"DatabaseDNSRecord" : {
  "Type" : "AWS::Route53::RecordSetGroup",
  "DependsOn": ["myELB"],
  "Properties" : {
    "HostedZoneId" : "Z19Y4P1DDQJADI", # obfuscated obviously.
    "RecordSets" : [
      {
        "Name" : "mydns.privatehostedzone.",
        "Type" : "CNAME",
        "ResourceRecords" : [
            {"Fn::GetAtt" : ["myELB","DNSName"]}
        ]
      }
    ]
  }
},

当我运行它时,我收到以下神秘错误:

Error Message: 18:59:16 UTC-0500 CREATE_FAILED  AWS::Route53::RecordSetGroup DatabaseDNSRecord Invalid request

有人可以提出这里的问题吗?我看不出我做错了什么。 myELB 已成功创建。

【问题讨论】:

  • 对模板进行“验证”时会发生什么?此外,托管区域的细节可能是相关的。例如实际上托管区域名称是什么..
  • @AssafLavie,我的托管区域的名称是privatehostedzone.。当我尝试验证它时,验证器只是坐在那里,没有任何输出。它不响应错误或验证消息:aws cloudformation validate-template --template-body file:////My//path////mytemplatefile.json。实际上,当我将模板文件替换为仅包含 Hello world 的文件时,它的行为方式相同。很奇怪。但是 AWS 让我开始使用这个文件构建堆栈。如果文件语法不正确,AWS 会直接拒绝。
  • 好吧,我不知道模板中可能有什么问题。我只能建议你通过它“二进制搜索”,直到你让它工作:尝试不同的资源类型(A记录,只需将它指向一些随机IP),尝试不同的区域,尝试直接提供cname记录而不参考 - 缩小范围......祝你好运!
  • 哦,等等,这可能是一个不幸的答案:forums.aws.amazon.com/thread.jspa?threadID=169745&tstart=0
  • 您的代码 sn-p 未显示您正在尝试在 CFN 中创建私有托管区域。是的,仍然不支持。但是,如果您只是想将记录集添加到现有区域,那肯定是受支持的。

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

【讨论】:

  • 其实就是现在。 Required: Conditional. If you don't specify the AliasTarget property, you must specify this property. If you are creating an alias resource record set, do not specify this property.
【解决方案2】:

对于遇到此问题并尝试使用 AliasTarget 创建 RecordSet 的任何人。提供 TTL 实际上会导致相同的“无效请求”失败。例如

ApplicationDNS:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneId: <some-zone-id>
      Comment: DNS Entry for the Application Load balancer
      Name:  !Join ['', [!Ref 'AWS::StackName', '.domain.com.']]
      Type: A
      TTL: 60
      AliasTarget:
        EvaluateTargetHealth: false
        HostedZoneId:  !GetAtt AppLoadBalancer.CanonicalHostedZoneID
        DNSName: !GetAtt AppLoadBalancer.DNSName
    DependsOn:
      - AppLoadBalancer

在这种情况下,提供 TTL 实际上会破坏堆栈 (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html#cfn-route53-recordset-ttl) 似乎 TTL 是在目标端指定的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2016-02-22
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多