当我为我的 API 网关 API 创建边缘优化自定义域名时,如何解决 "CNAMEAlreadyExists" 错误?

2 分钟阅读
0

当我尝试为我的 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 构建多地区无服务器应用程序

AWS 官方
AWS 官方已更新 2 年前