logo

鱼肚的博客

Don't Repeat Yourself

AWS CNameAlreadyExists错误处理方法

在部署Serverless应用的时候,尤其是在重做一些项目的时候,涉及到自定义域名的部分,容易遇到CNameAlreadyExists这个错误

CNAMEAlreadyExists: One or more of the CNAMEs you provided are already associated with a different resource

这个错误让我抓狂过好几次,所以我打算把解决方案记录下来。

错误原因分析

出现这个错误,一般是之前确实有用过这个域名。但是现在还没有释放掉。

常见的域名占用项有:

  1. CloudFront
  2. Route53
  3. API Gateway
  4. Cognito

可能还会有一些其它的服务也能占用自定义域名,类似的服务都需要一一排查。

下面简单介绍下上面几个服务的自定义域名配置路径。

CloudFront自定义域名

进入"CloudFront->分配"页签,可能查看到当前已经存在的CloudFront分配表格。在表格中有一列是CNAMEs,可在其中查看指定域名是否被占用。

cloudfront screenshot

Route53 域名或CNAME设置

在Route53中选中指定的域名,进入其DNS配置页面。查看报错的自定义域名是否在其中已有分配。

route53 screenshot

API Gateway

一些Lambda函数中可设置关联的自定义域名,这些信息会存储在API Gateway中。

可进入到API Gateway页面之后,在『自定义域名』中查看。

API Gateway Screenshot

Cognito

Cognition是AWS提供的用户验证服务,它也有自定义域名的功能。

Cognito Screenshot

目前已经发现的就是这些地方,结合之前自己在AWS中使用过的服务记录,依次排查一遍,应能发现问题。

备注

按上面的操作步骤修改完成之后,并不会立刻生效。AWS有一定的缓存时间,可过10~30分钟再重试下看看。