Serverless 3升级后生产环境自定义域名无法创建或删除的问题求助
解决Serverless升级后生产环境自定义域名卡住问题
我来帮你梳理下这个棘手的自定义域名卡住问题,结合你的描述和AWS的资源机制,咱们一步步排查解决:
1. 先排查AWS后台的隐藏残留资源
控制台看不到不代表AWS后台没有残留记录,这是最常见的原因,咱们用AWS CLI来确认:
检查API Gateway基础路径映射残留
旧版本的Domain Manager可能留下了未清理的基础路径映射,执行命令查询:
aws apigateway get-base-path-mappings --domain-name api-prod.example.com
如果返回非空结果,说明有残留,用下面的命令删除:
aws apigateway delete-base-path-mapping --domain-name api-prod.example.com --base-path ''
检查CloudFormation栈残留
Serverless部署依赖CloudFormation,可能之前的域名相关栈处于删除失败状态:
- 去CloudFormation控制台搜索包含
custom-domain或api-prod.example.com的栈 - 如果有
DELETE_FAILED状态的栈,尝试手动删除,或用CLI强制删除:
aws cloudformation delete-stack --stack-name YOUR_CUSTOM_DOMAIN_STACK_NAME
检查Route53的深层记录
虽然控制台看不到,用CLI确认是否有隐藏的资源记录:
aws route53 list-resource-record-sets --hosted-zone-id YOUR_HOSTED_ZONE_ID --query "ResourceRecordSets[?Name=='api-prod.example.com.']"
如果返回记录,用CLI手动删除(替换YOUR_HOSTED_ZONE_ID和DNSName的实际值):
aws route53 change-resource-record-sets --hosted-zone-id YOUR_HOSTED_ZONE_ID --change-batch '{ "Changes": [ { "Action": "DELETE", "ResourceRecordSet": { "Name": "api-prod.example.com.", "Type": "A", "AliasTarget": { "HostedZoneId": "Z2FDTNDATAQYW2", # API Gateway默认托管区ID(us-east-1,其他区域需替换) "DNSName": "d-XXXXXX.execute-api.region.amazonaws.com.", "EvaluateTargetHealth": false } } }, { "Action": "DELETE", "ResourceRecordSet": { "Name": "api-prod.example.com.", "Type": "AAAA", "AliasTarget": { "HostedZoneId": "Z2FDTNDATAQYW2", "DNSName": "dualstack.d-XXXXXX.execute-api.region.amazonaws.com.", "EvaluateTargetHealth": false } } } ] }'
2. 清理Serverless本地缓存
插件可能缓存了旧的资源状态,导致误判:
rm -rf .serverless
清理后重新尝试执行:
SLS_DEBUG=* serverless create_domain --verbose --stage prod
3. 临时调整配置绕过自动Route53创建
暂时关闭自动创建Route53记录,先搞定API Gateway的自定义域名映射:
修改serverless.yml的customDomain配置:
custom: customDomain: domainName: api-${opt:stage, 'dev'}.example.com basePath: '' stage: ${self:provider.stage} createRoute53Record: false
执行serverless create_domain --stage prod,如果成功,再去Route53手动添加A/AAAA记录,指向API Gateway生成的域名。
4. 检查旧域名api.example.com的关联冲突
你提到该API曾通过两个域名暴露,可能api.example.com的基础路径映射占用了同一API的资源:
- 去API Gateway控制台查看
api.example.com的自定义域名配置 - 检查它的基础路径映射是否和
api-prod.example.com存在冲突,必要时临时调整或删除api.example.com的映射,再尝试创建api-prod.example.com
5. 求助AWS官方支持
如果以上方法都无效,说明可能存在AWS后台的资源一致性问题,直接联系AWS支持,提供你的账号ID、域名和操作记录,让他们帮忙清理后台残留的资源。
内容的提问来源于stack exchange,提问作者antun
相关产品推荐
相关产品推荐

