在 CloudFront 分配中设置通配符 CNAME 时 CNAME 已存在

问题描述 投票:0回答:1

要将一些 CNAME 从一个发行版移动到另一个发行版,我遵循 此 AWS 文档,当我添加通配符 *.mydomain.com CNAME 时,我收到 CNAMEAlreadyExists 错误。

我已检查了该帐户中的所有发行版以及我们拥有的 *.mydomain.com 的所有其他 AWS 帐户,但我找不到重复的内容。我看过这篇知识中心文章,但没有支持,有谁知道如何找出它的使用地点或为什么被拒绝?

com.amazonaws.services.cloudfront.model.CNAMEAlreadyExistsException:您提供的一个或多个 CNAME 已与另一资源关联。 (服务:AmazonCloudFront;状态代码:409;错误代码:CNAMEAlreadyExists;请求 ID:bc0a9079-1432-11e9-a061-adf04e9fdb57)

amazon-web-services amazon-cloudfront cname
1个回答
0
投票

您在这里尝试做的事情确实是可能的。 文档今天也明确说明了这一点。 (强调我的)

如果另一个 CloudFront 分配中已存在相同的备用域名,则您无法将备用域名添加到 CloudFront 分配,即使您的 AWS 账户拥有其他分配也是如此。

但是,您可以添加通配符备用域名,例如 *.example.com,其中包含(重叠)非通配符备用域名,例如 www.example.com。如果两个分配中存在重叠的备用域名,CloudFront 会将请求发送到具有更具体名称匹配的分配,无论 DNS 记录指向哪个分配。例如,marketing.domain.com 比 *.domain.com 更具体。

我在尝试执行此据称支持的配置时遇到了相同的错误。在用头撞键盘一个小时左右后,我找到了原因和解决方案。

原因

当 CloudFront 检查新别名的当前 DNS 配置并发现 CNAME 指向另一个分配时,会发生以下错误。

CNAMEAlreadyExists: One or more aliases specified for the distribution includes an 
incorrectly configured DNS record that points to another CloudFront distribution.
You must update the DNS record to correct the problem. For more information, see
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-restrictions

在这种情况下,我猜您配置了以下内容:

  • 您有一个带有通配符别名的 CloudFront 分配(例如,
    *.example.com
    )。我们称其为
    Distribution A
  • 您有一条 DNS 记录(在 Route 53 或第三方域名服务中),将 CNAME 从
    *.example.com
    映射到
    Distribution A
    的终端节点。

现在,您正在创建(或已经创建)第二个 CloudFront 发行版

Distribution B
,并且您尝试为其提供重叠的别名,例如
www.example.com

当我们尝试在

Distribution B
上设置新别名时,CloudFront 会对
www.example.com
进行 DNS 查找,并看到映射到
Distribution A
的 CNAME。这被认为是无效的,因此请求被拒绝并出现错误
CNAMEAlreadyExists
。 (我认为 AWS 重载了此错误消息而不是返回更准确的错误,这是非常无益且令人困惑的。)

解决方案

可以通过按顺序执行以下操作来解决此错误:

  1. 创建您的第二个发行版,
    Distribution B
    请勿配置别名。
  2. 创建 CNAME DNS 记录,将重叠别名(例如,
    www.example.com
    )映射到
    Distribution B
    的端点。
  3. 现在,在
    Distribution B
    上配置别名。这次应该成功了。
© www.soinside.com 2019 - 2024. All rights reserved.