域名已与 "existing" CloudFront 分配相关联

Domain name already associated with an "existing" CloudFront distribution

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

BadRequestException: The domain name you provided is already associated with an existing CloudFront distribution. Remove the domain name from the existing CloudFront distribution or use a different domain name. If you own this domain name and are not using it on an existing CloudFront distribution, please contact support. api.example.com was not created.

我找到了 line where the library fails

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

同样有趣的是,在证书管理器中,它表示证书正在使用中:

在关联资源下,我可以看到一个云端条目:arn:aws:cloudfront:: ...

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

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

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

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

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

感谢 我找到了造成幻影 CloudFront 发行版的原因。在 AWS 控制台中,转到:

Amazon API 网关 > 自定义域名

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

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

  1. 创建了一个无服务器应用程序并 运行 sls create_domain
  2. 我太晚才注意到我所在的地区是 serverless.yml
  3. 中的错误地区
  4. 从 AWS 中手动删除了 CloudFormation 堆栈以及 Route53 记录。
  5. 更改了区域,再次尝试 create_domain,出现错误 - 虽然我已经删除了所有内容
  6. 运行 sls delete_domain - 这也引发了错误,但显然清理了一些 "hidden" AWS 东西
  7. 再次
  8. 运行 sls create_domain。瞧,成功了。

“幻影”云端发行版不可见,因为它位于 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 分发的关联已删除,我能够删除旧证书

不确定是否只做一次就可以了,但是由于我收到了不同的错误响应,所以幕后一定发生了一些不同的事情,所以尝试一下没有坏处!