运行sls create_domain配置Lambda自定义域名时报403无法获取域名信息
Lambda API 配置自定义域名报错排查指南
现有操作与报错现象
- 已安装
serverless-domain-manager插件 - 已在AWS控制台手动创建
uat-api.mydomain.com自定义域名、配置对应DNS解析记录 - 已在
serverless.yml中添加自定义域名相关配置 - 执行
sls create_domain时触发报错:[AWS apigatewayv2 403 3.044s 0 retries] getDomainName({ DomainName: ‘uat-api.mydomain.com’ }) Error: Unable to fetch information about uat-api.mydomain.com
核心问题点与修正方案
- 配置文件语法与格式错误
- 配置块缩进不规范:
customDomain需要作为custom的子级做2-4空格缩进,现有写法中customDomain与custom层级边界模糊、属性与父级同名块同缩进,会导致插件完全读不到自定义配置 - 特殊字符问题:
endpointType: ‘regional’使用的是中文全角单引号,不是标准英文半角引号,会导致配置值解析异常
- 配置块缩进不规范:
- 身份权限与区域不匹配
- 报错中
apigatewayv2403返回的本质,是当前执行Serverless命令的AWS身份,没有权限在目标区域调用API Gateway的域名查询接口:- 检查当前使用的AWS凭证对应的IAM角色/用户,是否包含
apigatewayv2:GetDomainName、apigateway:GET、route53:GetHostedZone、route53:ChangeResourceRecordSets权限 - 确认运行Serverless命令选择的AWS区域,和手动创建自定义域名、托管ACM证书的区域完全一致,跨区域访问API Gateway资源时会触发403
- 检查当前使用的AWS凭证对应的IAM角色/用户,是否包含
- 报错中
- 资源类型不匹配
- 插件会根据配置的
apiType: rest自动选择调用REST API(apigatewayv1)的接口拉取域名信息,但报错日志显示插件实际调用的是apigatewayv2的接口,说明手动创建的自定义域名是HTTP API类型,和配置的REST API类型不匹配 - 检查配置的
certificateArn对应的ACM证书,是否处于已颁发状态、且和自定义域名同区域,证书和域名不匹配时也会触发拉取失败
- 插件会根据配置的
- 插件运行逻辑冲突
serverless-domain-manager的create_domain命令设计为自动创建全新的自定义域名资源,如果已经在控制台手动创建过同名域名,插件在拉取域名信息时发现配置项不一致,就会触发报错- 若已经手动完成自定义域名创建和DNS配置,不需要执行
sls create_domain,只需要在部署流程中配置API映射即可,无需重复创建资源
内容的提问来源于stack exchange,提问作者Seifolah
相关产品推荐
相关产品推荐

