当我尝试为我的 Amazon API Gateway API 创建边缘优化的自定义域名时,收到“CNAMEAlreadyExists”错误。
简短描述
在以下情况下会出现“CNAMEAlreadyExists”错误:
- 您的自定义域名的 CNAME 记录类型已存在,并且指向 Amazon CloudFront 分配。
- 有一个 CloudFront 分配配置了与您的自定义域名相匹配的备用域名或 CNAME。
**注意:**当您在短时间内进行多个自定义域名更新时,收到“Too Many Requests”(请求过多)错误的情况并不少见。这些错误是由于 CreateDomainName API 的配额不足(每个账户每 30 秒发出一个请求)所致。有关详细信息,请参阅 API Gateway 在创建、部署和管理 API 方面的配额。
**重要事项:**您不能对多个 CloudFront 分配使用相同的 CNAME 记录。使用相同的 CNAME 记录会返回以下错误: "One or more of the CNAMEs you provided are already associated with a different resource.(服务: AmazonCloudFront;状态代码: 409; Error Code: CNAMEAlreadyExists; Request ID: a123456b-c78d-90e1-23f4-gh5i67890jkl."
要解决这些错误并创建边缘优化的自定义域名,必须先删除指向 CloudFront 分配的现有 CNAME 记录。
解决方法
确认自定义域名以前是否存在
1.要确认自定义域名以前是否存在,请对该域名运行 DNS 查询命令。
在 Linux、Unix 或 macOS 系统上:
dig abc.example.com +all
在 Windows 上:
nslookup abc.example.com
**注意:**将 abc.example.com 替换为您的域名。
2.如果自定义域名以前存在且其 DNS 记录仍然存在,则使用 dig 在输出中获取 CNAME 记录:
abc.example.comcom. 0 IN CNAME d27am47dhauq2.cloudfront.net.
重要事项:
必须先删除此记录,然后才能创建自定义域名。
- 最佳做法是先在开发或测试环境中修改 DNS 设置。手动修改生产 DNS 设置可能会导致停机。
- 如果输出显示 A 记录(IPv4 地址)而不是 CNAME 记录,则必须更新该记录。更新后的记录必须将自定义域名(A 别名)指向 CloudFront 分配。
如果对域名执行了 dig 或 nslookup,并且记录是 A 别名,请检查 CloudFront 分配。确保 CloudFront 分配未配置备用域名。有关详细信息,请参阅别名和 CNAME 记录的比较。
删除 CNAME 记录或更新您的 CloudFront 分配
根据您的配置,执行以下一项或两项操作:
如果您有第三方 DNS 服务提供商,请按照提供商的流程删除指向您的 CloudFront 分配的 CNAME 记录。
如果您使用 Amazon Route 53,请删除 Route 53 中指向 CloudFront 的记录。
更改配置后,等待几分钟,让 DNS 更改传播下去。然后,重试创建自定义域名。
**注意:**如果您收到“CNAMEAlreadyExists”错误,请参阅如何解决在为 Amazon CloudFront 分配设置 CNAME 别名时出现的 CNAMEAlreadyExists 错误?
相关信息
如何为 API Gateway API 设置自定义域名?
使用 Amazon API Gateway 和 AWS Lambda 构建多区域无服务器应用程序