当我尝试为我的 Amazon API Gateway API 创建一个边缘优化的自定义域名时,我得到了一个 "CNAMEAlreadyExists" 错误。如何解决此问题?
简短描述
如果出现以下情况,则会出现 "CNAMEAlreadyExists" 错误:
- 自定义域名的 CNAME 记录类型已经存在,并指向 Amazon CloudFront 发行版。
- 存在使用与您的自定义域名匹配的备用域名或 CNAME 配置的 CloudFront 分配。
**注意:**在短时间内多次更新自定义域名时,您很可能会收到 "Too Many Requests"(请求太多)错误。出现这些错误是因为 CreateDomainName API 的配额较低(每个账户每 30 秒一个请求)。有关更多信息,请参阅API 网关在创建、部署和管理 API 方面的配额。
重要提示:您不能对多个 CloudFront 分配使用相同的 CNAME 记录。使用相同的 CNAME 记录会返回以下错误:
One or more of the CNAMEs you provided are already associated with a different resource. (Service: AmazonCloudFront; Status Code: 409; Error Code: CNAMEAlreadyExists; Request ID: a123456b-c78d-90e1-23f4-gh5i67890jkl*
要解决这些错误并创建边缘优化自定义域名,您必须首先删除指向该 CloudFront 分配的现有 CNAME 记录。
解决方法
确认自定义域名是否曾经存在
1.FSP 要确认自定义域名是否曾经存在,请对该域名运行 DNS lookup 命令。
在 Linux、Unix 或 macOS 系统上:
dig abc.example.com +all
在 Windows 上:
nslookup abc.example.com
注意:请将 abc.example.com 替换为您的域名。
2.FSP 如果自定义域名曾经存在并且其 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"(CNAME 已存在)错误,请参阅如何解决为 Amazon CloudFront 分配设置 CNAME 别名时出现的错误 CNAMEAlreadyExists?
相关信息
我如何为我的 API Gateway API 自定义域名?
使用 Amazon API Gateway 和 AWS Lambda 构建多地区无服务器应用程序