使用AWS SDK v2.18.21调用Lambda超时,需配置哪些参数?
解决AWS SDK v2调用长执行时间Lambda的超时问题
你遇到的SocketTimeoutException是因为AWS SDK v2默认的HTTP读取超时时间(默认30秒)远小于你的Lambda函数执行时长(2-3分钟),导致客户端在Lambda返回结果前就断开了连接。需要通过以下配置调整客户端超时:
关键配置项
需要为LambdaClient配置HTTP读取超时(必须大于Lambda的执行时长),同时可按需调整连接超时:
readTimeout:客户端等待服务器响应的最大时间,需设置为比Lambda执行时间更长的值(比如4分钟)connectTimeout:建立HTTP连接的超时时间,一般设置10秒左右即可
修改后的代码示例
import software.amazon.awssdk.services.lambda.LambdaClient; import software.amazon.awssdk.services.lambda.model.InvokeRequest; import software.amazon.awssdk.services.lambda.model.InvokeResponse; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import java.time.Duration; //Calling Lambda Function try{ // 配置HttpClient超时参数 LambdaClient client = LambdaClient.builder() .httpClient(UrlConnectionHttpClient.builder() .readTimeout(Duration.ofMinutes(4)) // 覆盖2-3分钟的Lambda执行时间 .connectTimeout(Duration.ofSeconds(10)) .build()) .build(); InvokeRequest req = InvokeRequest.builder().functionName("abc").build(); InvokeResponse res = client.invoke(req); String response = res.payload().asUtf8String(); System.out.println(response); }catch(Exception e){ e.printStackTrace(); }
额外注意事项
- 确认你的Lambda函数在AWS控制台的超时配置已设置为足够长的时间(比如3分钟),避免Lambda自身提前终止
- 如果使用Apache HttpClient而非默认的UrlConnectionHttpClient,配置逻辑类似,只需替换为
ApacheHttpClient.builder()并设置相同的超时参数
内容的提问来源于stack exchange,提问作者Nid
相关产品推荐
相关产品推荐

