AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
如何解决使用 AWS CloudFormation 创建 Route 53 记录集时遇到的错误?
我想解决我在使用 AWS CloudFormation 创建 Amazon Route 53 资源记录集时遇到的错误。
解决方法
以下是您在尝试使用 AWS CloudFormation 模板创建 Route 53 记录集时可能会遇到的一些常见错误。要解决问题,请遵循针对每个错误提供的指南。
**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误消息,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
错误: “No hosted zones named "domain.com" found”(未找到名为 “domain.com” 的托管区)
当 CloudFormation 无法识别为 HostedZoneName 属性定义的托管区名称时,就会出现此错误。要解决此错误,请检查以下步骤:
-
检查传递给 HostedZoneName 属性的值,并确保它包含尾随句点 (.)。托管区名称(例如 domain.com)需要包含尾随句点才能有效。
例如:SampleRecordSet: Type: AWS::Route53::RecordSet Properties: HostedZoneName: "domain.com." #note trailing dot Name: image1.domain.com Type: CNAME TTL: '60' ResourceRecords: - new.example如果托管区名称已经包含尾随句点,请检查您的 AWS 账户中是否已经存在使用该名称的托管区。在尝试创建记录集之前,使用以下 AWS CLI 命令来验证托管区名称是否可用。
aws route53 list-hosted-zones \ --query 'HostedZones[?Name==`YOUR-HOSTED-ZONE-NAME`]'**注意:**将上述命令中的 YOUR-HOSTED-ZONE-NAME 替换为传递给 CloudFormation 堆栈中 HostedZoneName 属性的值。
-
如果上述命令未返回任何记录,则该托管区在您的账户中不可用。要解决此错误,请在创建 RecordSet 之前创建托管区。
错误: “RRSet with DNS name a.domain.com is not permitted in zone domain-test.com.”(不允许在托管区 domain-test.com 中使用 DNS 名称为 a.domain.com 的 RRSet。)
如果传递给 AWS::Route53::RecordSet 资源的 Name 属性的 DNS 值与托管区不匹配,则会收到此错误消息。要解决此问题,请检查以下选项。
- 传递给 AWS::Route53::RecordSet 资源中的 Name 属性的值必须是完全限定域名。检查您是否为自己的 DNS 记录集传递了完全限定域名。例如,如果您的域名是 domain.com,则完全限定域名必须类似于 a.domain.com。仅传递“a”可能会导致失败并出现错误,因为它不是完全限定域名。
- DNS 名称必须是托管区的子域。例如,如果托管区名称为 domain-test.com,则您的记录集的 Name 属性必须类似于 xxxxx.domain-test.com。
错误: “No hosted zone found with ID: Z1234567XXXXXXXXXX”(未找到具有以下 ID 的托管区:Z1234567XXXXXXXXXX)
如果传递给 HostedZoneId 属性的值并没有跟您的账户相关联,则会看到此错误消息。要解决此错误,请检查以下选项:
-
验证提供给堆栈的 AWS::Route53::RecordSet 资源的托管区 ID 值是否正确且存在于您的 AWS 账户中。
-
使用以下 AWS CLI 命令来检查托管区 ID 在您的账户中是否可用:
aws route53 get-hosted-zone --id Z1234567XXXXXXXXXX -
如果上述命令返回错误,则托管区 ID 在您的 AWS 账户中不可用。尝试将有效的托管区 ID 值传递给 AWS::Route53::RecordSet 资源的 HostedZoneId 属性,再次创建堆栈。这会将记录集与 Route 53 中实际存在的托管区相关联。
错误: “Duplicate hosted zones for hosted zone name domain.com.”(名为 domain.com 的托管区存在重复的托管区。)
您可以在 Route 53 中创建多个同名托管区。尝试通过传递 HostedZoneName 属性来创建 AWS::Route53::RecordSet 资源。但是,如果有多个同名的托管区,则会收到一条错误消息。
要修复此错误,请不要为 AWS::Route53::RecordSet 资源定义 HostedZoneName 属性。相反,应定义 HostedZoneId 属性。然后,在创建记录集时传递托管区 ID。例如:
SampleRecordSet: Type: AWS::Route53::RecordSet Properties: HostedZoneId: "Z1234567XXXXXXXXXX" Name: image1.domain.com Type: CNAME TTL: '60' ResourceRecords: - new.example
错误: “Expected exactly one of [AliasTarget, all of [TTL, and ResourceRecords], or TrafficPolicyInstanceId], but found none in Change with [Action=CREATE, Name=a.domain.com., Type=A, SetIdentifier=null]”(本来应该是 [AliasTarget, all of [TTL, and ResourceRecords], or TrafficPolicyInstanceId] 中的一个,但是在 Change 中找不到任何一个带有 [Action=CREATE, Name=a.domain.com., Type=A, SetIdentifier=null])
如果您没有在模板中定义 AWS::Route53::RecordSet 资源的所有必需属性,就会看到此错误消息。每个 Route 53 RecordSet 资源都要求您设置特定的配置属性。当您的模板中缺少这些必需的属性时,就会出现错误。要解决此错误,请检查以下选项:
-
为 AWS::Route53::RecordSet 资源定义 AliasTarget 属性或同时定义 TTL 和 ResourceRecords 属性。
-
如果您为 AWS::Route53::RecordSet 定义了 AliasTarget 属性,则不要在同一个资源中定义 TTL 或 ResourceRecords 属性。
请参阅以下示例,仅定义 AliasTarget 属性,而不定义 TTL 和 ResourceRecords 属性:
SampleR53AliasRecord: Type: AWS::Route53::RecordSet Properties: Name: 'abc.domain.com' Type: A AliasTarget: DNSName: !GetAtt MyELB.DNSName HostedZoneId: !GetAtt MyELB.CanonicalHostedZoneNameID HostedZoneId: "Z1234567XXXXXXXXXX" -
如果您没有定义 AliasTarget 属性,请检查您是否同时定义了 TTL 和 ResourceRecords 属性。
-
如果只定义其中一个属性,也会出现错误。如果您定义了 ResourceRecords 属性,则还必须在模板中定义 TTL 属性。同样,如果您定义了 TTL,则还必须定义 ResourceRecords。
以下示例向您展示如何仅定义 TTL 和 ResourceRecords 属性:
SampleRecordSet: Type: AWS::Route53::RecordSet Properties: HostedZoneId: "Z1234567XXXXXXXXXX" Name: image1.domain.com Type: CNAME TTL: '60' ResourceRecords: - new.example
错误: “Tried to create resource record set [name='a.domain.com.', type='A', set-identifier='null'] but it already exists”(尝试创建资源记录集 [name='a.domain.com.', type='A', set-identifier='null'],但它已经存在)
您尝试在已包含同名别名记录集的托管区中创建别名记录集。要解决此错误,请检查以下选项
- 检查您是否在正确的托管区内创建别名记录集。验证托管区 ID 或名称是否与您要创建别名记录集的托管区相匹配。
- 检查您尝试使用 CloudFormation 创建的 A 或 CNAME 记录类型是否已存在于托管区中。您可以使用以下 AWS CLI 命令来验证资源记录是否已在托管区中可用:
**注意:**将上述命令中的 YOUR-HOSTED-ZONE-NAME、YOUR-RESOURCE-RECORD-NAME 和 YOUR-TYPE-OF-RECORD 替换为与错误消息中列出值完全一致的值。aws route53 list-resource-record-sets \ --hosted-zone-id YOUR-HOSTED-ZONE-NAME \ --query 'ResourceRecordSets[?(Name==`YOUR-RESOURCE-RECORD-NAME` && Type==`YOUR-TYPE-OF-RECORD`)] - 如果上述命令返回一个值,则在创建该记录之前,使用 CloudFormation 将其从您的托管区中删除。在从托管区手动删除此记录之前,对您的应用程序进行影响评估。在采取该步骤之前,请仔细考虑移除此记录会对您的应用程序产生怎样的影响。
相关信息
- 语言
- 中文 (简体)
