You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:54:12