AWS SAM部署的API配置自定义域名后无法访问问题求助
问题排查与解决方案
核心问题说明
你当前的SAM模板中自定义域名配置缺少关键参数,同时手动配置的Route53记录不符合要求,是访问失败的核心原因。
具体修复步骤
- 补全SAM模板Api配置段
你需要添加Stage映射、BasePath配置、自动Route53记录配置,同时确认API部署阶段名称和你原有配置匹配。修改后的Globals.Api段如下:
Api: EndpointConfiguration: REGIONAL StageName: Stage # 与你原有部署的阶段名保持一致,对应原访问路径的/Stage前缀 Domain: DomainName: api.mydomain.com CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb BasePath: '' # 置空表示根路径直接映射,无需额外路径前缀即可访问API Stage: !Ref ServerlessRestApi.Stage # 绑定到当前SAM创建的API部署阶段 Route53: HostedZoneName: mydomain.com. # 替换为你的Route53托管根域名,末尾带. # 也可以直接指定托管区ID,格式为HostedZoneId: Z0XXXXXXXXXXXXXXX- 补全SAM模板Api配置段
- 删除手动创建的Route53 CNAME记录
你之前手动添加的CNAME指向的是默认API网关域名,不是自定义域名分配的REGIONAL入口,会导致路由错误,SAM会自动生成正确的别名A记录,无需手动配置。
- 删除手动创建的Route53 CNAME记录
- 确认ACM证书状态
登录ACM控制台确认api.mydomain.com对应的证书状态为已签发,且证书所在区域和API部署区域一致(你当前是us-east-1,符合REGIONAL端点要求)。
- 确认ACM证书状态
- 重新部署SAM栈并等待生效
执行sam deploy更新栈,部署完成后需要等待5-10分钟让API网关自定义域名配置全局生效。
- 重新部署SAM栈并等待生效
修改后完整模板参考
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: AWS Serverless Jersey API - com.mydomain::mydomain Globals: Function: Environment: Variables: ••• Api: EndpointConfiguration: REGIONAL StageName: Stage Domain: DomainName: api.mydomain.com CertificateArn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/bbbbbb-bbbb-bbbb-bbbb-bbbbbbbb BasePath: '' Stage: !Ref ServerlessRestApi.Stage Route53: HostedZoneName: mydomain.com. Resources: MyServiceFunction: Type: AWS::Serverless::Function Properties: Handler: com.mydomain.app.StreamLambdaHandler::handleRequest Runtime: java8 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 30 Events: ProxyResource: Type: Api Properties: Path: /{proxy+} Method: any Policies: ••• Outputs: MyServiceApi: Description: 默认API网关访问地址 Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Stage/endpoint' Export: Name: MyServiceApi CustomDomainApi: Description: 自定义域名访问地址 Value: !Sub 'https://${Api.DomainName}/endpoint'
异常排查
如果完成上述操作后仍然无法访问,登录API网关控制台,进入「自定义域名」页面,找到api.mydomain.com,确认:
- 「API映射」配置中,对应API、阶段、路径映射正确
- 复制「REGIONAL域名」,本地执行
nslookup 你的REGIONAL域名确认解析正常,再执行nslookup api.mydomain.com确认返回的IP和REGIONAL域名一致。
内容的提问来源于stack exchange,提问作者Gerardo
相关产品推荐
相关产品推荐

