CDK(TypeScript)中API Gateway绑定自定义域名后访问异常排查
API Gateway自定义域名绑定问题排查与解决方案
核心问题分析
你遇到的无响应/Forbidden问题,主要是因为自定义域名与API Gateway的关联配置不完整,或资源指向错误导致的。以下是具体排查点和修复方案:
1. 缺失自定义域名到API Stage的路径映射
你仅创建了自定义域名资源,但未将其映射到API的具体部署阶段(比如prod)。API Gateway需要明确的路径映射规则,才能将自定义域名的请求路由到你的API。
修复代码
在现有代码中添加BasePathMapping:
// 假设你的API实例是当前类的this对象,若不是则替换为实际的RestApi实例 domainName.addBasePathMapping(this, `${id}-mapping`, { basePath: '', // 空路径表示根域名直接映射到API stage: this.deploymentStage, // 替换为你的API部署阶段,比如this.prodStage });
2. Route53 Alias目标指向错误
你代码中new ApiGateway(this)会创建一个新的空API实例,而非指向你原本能正常访问的那个API。这导致A记录指向了错误的资源,自然无法访问。
修复代码
传入你实际的API Gateway对象(比如你创建的RestApi实例):
// 假设你的API实例是const api = new RestApi(this, 'MyApi') target: RecordTarget.fromAlias(new ApiGateway(api)),
3. 证书区域不匹配
API Gateway自定义域名依赖CloudFront,要求SSL证书必须部署在**us-east-1(弗吉尼亚北部)**区域,无论你的API位于哪个区域。如果证书在其他区域,会导致SSL握手失败,出现无响应。
检查与修复
- 确认
props.certificateArn对应的证书是在us-east-1区域创建的 - 如果不是,重新在us-east-1申请证书,或导入现有证书到该区域
4. API Gateway资源策略限制
如果你的API配置了资源策略,可能拒绝了来自自定义域名或API Gateway原生域名的请求,导致返回Forbidden。
检查与修复
- 进入API Gateway控制台,找到对应API的资源策略
- 确认策略中未限制自定义域名(
mysub.example.org)或API Gateway域名(d-ywfxof47wi.execute-api.us-east-1.amazonaws.com)的访问 - 调整策略,添加允许这些域名请求的规则
5. DNS缓存或部署同步延迟
- 用
nslookup mysub.example.org检查DNS解析是否正确指向了API Gateway域名 - 若解析异常,等待TTL过期(你设置了3分钟)或刷新本地DNS缓存
- API Gateway域名映射配置需要同步到CloudFront,可能需要等待5-10分钟后再测试访问
内容的提问来源于stack exchange,提问作者Michael Lorton
相关产品推荐
相关产品推荐

