Python Lambda调用CodeBuild项目出现连接超时原因排查
CodeBuild调用连接超时的常见诱因
从报错栈的ConnectTimeoutError可以判断,问题本质是Lambda运行时根本无法和codebuild.eu-central-1.amazonaws.com的服务端点建立TCP连接,和你配置的IAM权限没有任何关系——如果是权限不足,boto3会直接返回403 AccessDenied的业务错误,不会卡在网络连接超时的阶段。
结合你提到的已附加AWSLambdaVPCAccessExecutionRole权限的配置,按发生概率从高到低,可能的原因有:
- Lambda关联了VPC但没有配置公网出口通路
只要Lambda挂载了VPC内的子网,就会丧失Lambda平台原生的公网访问能力:其网络弹性网卡默认不分配公网IP,也没有指向公网的路由。如果既没有部署NAT网关给VPC提供公网出口,也没有配置对应服务的VPC私网端点,所有访问公有AWS服务端点的请求都会直接超时。这是Lambda调用AWS服务出现这类连接超时最高发的原因。 - VPC网络规则拦截了到CodeBuild的出站流量
即便已经配置了NAT网关作为公网出口,以下配置疏漏依然会触发连接超时:- 关联Lambda的安全组没有放通443端口的出站HTTPS流量
- 承载Lambda的子网对应的路由表,没有将0.0.0.0/0的公网流量指向NAT网关,而是指向了内网黑洞或内部防火墙
- 子网关联的网络ACL,限制了443端口的出站访问规则
- 公网出口链路被安全策略拦截
如果VPC的公网出口经过企业代理、云防火墙等安全组件,没有放通对CodeBuild服务域名的访问,同样会出现TCP连接超时。这类场景通常需要为对应区域的CodeBuild服务配置接口型VPC端点,走AWS内网通路访问服务,绕过公网出口的拦截规则。
从日志的总耗时305秒(约5分钟)也可以佐证:函数在第一次调用start_build接口时就触发了多次网络重试,直到默认的连接超时阈值才退出,根本没执行到代码里sleep(180)的逻辑,进一步说明问题完全出在网络连通性层面,和代码业务逻辑无关。
内容的提问来源于stack exchange,提问作者MiGo
相关产品推荐
相关产品推荐

