VPC环境下Lambda调用Cognito.sign_up超时问题排查
VPC内Lambda调用Cognito失败排查方案
核心现象:
- Lambda通过调用Cognito
sign_up接口实现用户注册,挂载在API GET端点后 - 本地调用端点可正常创建Cognito用户,staging环境部署后调用失败,CloudWatch无对应报错
- staging环境Lambda部署在VPC内,可正常访问同VPC的MySQL实例
- Lambda绑定IAM角色已附加
CognitoPowerUser托管策略
优先排查VPC网络配置(90%概率为该类问题)
Cognito默认是公网服务,能正常访问同VPC的MySQL仅代表内网路由连通正常,不代表Lambda有公网出口访问能力:
- 检查Lambda关联的子网路由表:如果挂载的是私有子网,必须配置NAT网关/NAT实例,路由表中
0.0.0.0/0的下一跳指向NAT设备,否则Lambda无法发起公网请求,自然连不上Cognito的公网端点 - 更推荐的方案是配置VPC端点直连Cognito,不需要走公网、不需要NAT网关,通过内网直接打通服务:
- 在对应区域创建
com.amazonaws.<你的区域码>.cognito-idp类型的VPC端点,关联Lambda所在的子网 - 调整端点关联的安全组,允许Lambda所属安全组的443端口入站(端点侧安全组放行Lambda的访问请求)
- 配置完成后Lambda会自动通过内网访问Cognito用户池接口,稳定性更高
- 在对应区域创建
- 额外检查子网关联的网络ACL、Lambda自身的出站安全组,确认没有拦截443端口的出站请求、没有拦截Cognito服务的IP段。
其次排查权限与配置问题
- 检查IAM角色信任策略:确认角色信任实体为
lambda.amazonaws.com,避免因信任关系配置错误导致权限未实际生效 - 若配置了VPC端点,检查端点策略:确认策略没有显式拒绝Lambda角色执行
cognito-idp:SignUp相关动作 - 核对staging环境的环境变量:确认Cognito用户池ID、区域码配置和本地一致,避免因配置错误指向不存在/无权限的资源
- 补全日志配置:将Lambda超时时间调整到10秒以上(默认3秒容易出现请求未返回就超时、无明确报错的情况),把AWS SDK的日志级别调整为DEBUG,打印请求全链路日志,可直接定位是DNS解析失败、连接超时还是权限拒绝问题
- 快速验证方法:在Lambda代码中增加测试逻辑,先调用
cognito-idp:ListUserPools接口,同时打印cognito-idp.<区域>.amazonaws.com的解析结果,如果解析出公网IP但连接超时,可直接确认是公网出口配置问题。
内容的提问来源于stack exchange,提问作者johojojoj
相关产品推荐
相关产品推荐

