已与“现有”CloudFront 分配关联的域名

Posted

技术标签:

【中文标题】已与“现有”CloudFront 分配关联的域名【英文标题】:Domain name already associated with an "existing" CloudFront distribution 【发布时间】:2018-03-16 01:10:26 【问题描述】:

当我尝试通过serverless-domain-manager 和sls create_domain 设置域时,它失败了:

BadRequestException:您提供的域名已与现有 CloudFront 分配相关联。 从现有 CloudFront 分配中删除域名或使用其他域名。 如果您拥有此域名并且未在现有 CloudFront 分配中使用它,请联系支持人员。 api.example.com 未创建。

我找到了line where the library fails。

请注意,我的帐户在 CloudFront 中没有任何内容。这是我打开它时看到的:

有趣的是,在证书管理器中,它说证书正在使用中:

在 Associated Resources 下,我可以看到 cloudfront 的条目:arn:aws:cloudfront:: ...

【问题讨论】:

【参考方案1】:

感谢Matt's guidance 我找到了导致幻影 CloudFront 发行版的原因。在 AWS 控制台中,转到:

Amazon API Gateway > 自定义域名

删除那里的所有冲突域并重新执行部署步骤。

【讨论】:

但是如果没有冲突的域呢? @Infiltrator 不知道。对不起。 如果没有冲突的域,请尝试切换区域。 Serverless 默认使用us-east-1,所以那里可能有一些剩菜。上帝 AWS 好混乱【参考方案2】:

以下是我遇到并解决此问题的方法:

    创建了一个无服务器应用程序并运行sls create_domain 太晚了,我注意到我所在的区域在serverless.yml 中是错误的 从 AWS 中手动删除 CloudFormation 堆栈以及 Route53 记录。 更改了地区,再次尝试create_domain,得到了错误 - 虽然我已经删除了所有内容 Ran sls delete_domain - 这也引发了错误,但显然清理了一些“隐藏”的 AWS 内容 再次运行sls create_domain。瞧,工作了。

【讨论】:

【参考方案3】:

当您创建 API 网关时,它将代表您创建底层 CloudFront 分配。您可能在您的 AWS 账户中看不到它,但它就在那里。

此外,用于 CloudFront 分配的域必须是全球唯一的。这意味着如果其他人已经拥有 api.example.com 的 CloudFront 分配,那么您也不能使用它。

因此,您已经说过您的 AWS 账户中没有可见的现有 CloudFront 分配。

如果您已经有一个用于api.example.com 的 API 网关,那么您无法创建第二个。如果是这种情况,您需要使用不同的域,或者删除原来的域。

如果您没有该域的 API 网关,那么其他人可能已经拥有一个。如果是这种情况,那么您将需要使用不同的域。

【讨论】:

CloudFront 发行版即使在 aws cli 中也不会出现。我看不到其他任何人都可以为该域分配 CloudFront。我没有任何 api 网关。我看不出任何人会有该域的 api 网关。该域在 Route53 中注册。我是第一个所有者。 如果 CloudFront 发行版是由 API Gateway 创建的,您将永远不会通过 UI 或 CLI 看到它。如果 AWS 说它已经存在,那么它已经存在于某个地方。 53 号公路在这个问题上毫无意义。您应该联系 AWS 支持以确定它存在的位置以及如何解决它。 “如果 CloudFront 发行版是由 API Gateway 创建的,您将永远不会通过 UI 或 CLI 看到它。”你能提供一些关于这个的参考吗?我想了解为什么会这样。不然我已经reached out to them 来自forums.aws.amazon.com/thread.jspa?threadID=195290,“API Gateway 在后台与 CloudFront 集成。我们会自动为您的 API 创建一个全球 CloudFront 分配,以减少最终用户感知的延迟。” 可能相关:serverfault.com/questions/851446/…【参考方案4】:

“幻影”云端发行版不可见,因为它位于 AWS 自己拥有的账户中,并用于部署边缘优化的 API 网关实例使用的发行版。

正如@Daniel 在上面的回答中提到的,在控制台中删除与证书关联的任何自定义域名,但如果它们不可见(例如,如果它们已被删除),请尝试使用删除它们AWS CLI,因为它似乎在完全清理那些 AWS Cloudfront 发行版的链接方面做得更好:

aws apigateway delete-domain-name --region "<INSERT REGION>" --domain-name "<INSERT DOMAIN NAME>"

当@CGreg 遇到 sls_delete_domain 命令时,您可能会遇到错误。我试图通过我已经删除的自定义域名删除 ACM 中与这些发行版之一关联的旧证书。我为每个自定义域名运行了两次上述命令(在我认为我最初可能部署到的任何区域)。第一次出现“未找到域名”错误,第二次出现“操作超时:最大重试次数”错误,但删除了与 Cloudfront 分发的关联,我能够删除旧证书??

不确定是否只有一次会这样做,但由于我得到了不同的错误响应,引擎盖下肯定发生了一些不同的事情,所以尝试它没有害处!

【讨论】:

以上是关于已与“现有”CloudFront 分配关联的域名的主要内容,如果未能解决你的问题,请参考以下文章

将 CloudFront 分配与 Route 53 域相关联时出现问题

Cloudfront - 重叠备用域名

AWS CloudFront 签名 URL 的访问被拒绝

阻止 CloudFormation 从 CloudFront 中删除 Lambda 边缘关联

Amazon Cloudfront - 将 CDN 域名传递到源服务器

通过单个 CloudFront 分配支持 HTTPS URL 重定向