部署在私有子网的Lambda访问AppSync API报错"Unable to find..."的原因
解决Lambda通过AppSync VPC端点访问时报错"Unable to find the private GraphQL API for this domain."
排查方向及修复步骤
1. 确认AppSync API的私有访问配置
- 登录AppSync控制台,进入目标API的「设置」页面
- 检查「VPC端点」区域:必须勾选启用私有DNS,且已关联正确的AppSync类型VPC端点(服务名称格式为
com.amazonaws.<region>.appsync-api) - 如果API原本是公开模式,需切换为私有,或确保VPC端点的安全组允许Lambda所在子网的流量接入
2. 校验VPC端点配置
- 确认VPC端点部署在Lambda所在的私有子网内,且子网路由表包含指向该端点的前缀列表(通常启用私有DNS后会自动处理,无需手动配置路由,但如果禁用了私有DNS,需手动添加)
- 检查VPC端点的安全组规则:入站允许Lambda安全组的443端口流量,出站允许到AppSync服务的443端口流量
3. 检查Lambda的VPC设置
- 确认Lambda已部署到目标私有子网,且子网路由表能访问VPC端点(私有子网无需NAT网关即可直接访问VPC端点,只要路由表正确)
- 确保Lambda的安全组允许出站到443端口(HTTPS请求需要)
4. 排查DNS解析问题
这个报错大概率是DNS没有解析到私有端点,可按以下步骤检查:
- 确认Lambda所在VPC已启用「DNS支持」和「DNS主机名」(VPC控制台 -> 目标VPC -> 编辑DNS设置)
- 在Lambda中添加临时代码测试DNS解析:
执行后查看日志,确认返回的是VPC端点的IP,而非公网IPimport socket def lambda_handler(event, context): print(socket.gethostbyname("<your-appsync-domain>")) - 如果使用自定义域名,需确保Route53私有托管区的记录集将自定义域名指向AppSync私有端点的IP或VPC端点别名
5. 自定义域名关联检查
如果使用了自定义域名访问AppSync:
- 确认自定义域名已绑定到私有API,而非公开API
- 检查自定义域名的SSL证书是否在同一AWS区域,且完成了验证
内容的提问来源于stack exchange,提问作者Dan Hook
相关产品推荐
相关产品推荐

