hel*_*rld 3 amazon-web-services aws-sdk aws-lambda
我正在使用将多个 Lambda 链接在一起的 Step Functions。在其中一个 lambda 中,我调用另一个 lambda。两个 lambda 都有 15 分钟超时。然而,几分钟后,调用辅助 lambda 的主 lambda 超时(辅助 lambda 愉快地继续其工作)。
Error
com.amazonaws.SdkClientException
Cause
{"errorMessage": "Unable to execute HTTP request: Read timed out",
"errorType": "com.amazonaws.SdkClientException",
"stackTrace": [
cause": {
"errorMessage": "Read timed out",
"errorType": "java.net.SocketTimeoutException",
"stackTrace": [
"java.net.SocketInputStream.socketRead0(Native Method)",
"java.net.SocketInputStream.socketRead(SocketInputStream.java:116)",
"java.net.SocketInputStream.read(SocketInputStream.java:171)",
"java.net.SocketInputStream.read(SocketInputStream.java:141)",
"sun.security.ssl.InputRecord.readFully(InputRecord.java:465)",
"sun.security.ssl.InputRecord.read(InputRecord.java:503)",
"sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)",
"sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:940)",
"sun.security.ssl.AppInputStream.read(AppInputStream.java:105)",
Run Code Online (Sandbox Code Playgroud)
这是代码,正如您所看到的,我尝试使用 4 个不同的命令来提高超时时间。
// (2) Instantiate AWSLambdaClientBuilder to build the Lambda client
AWSLambdaClientBuilder builder =
AWSLambdaClientBuilder.standard().withRegion(region);
// (3) Build the client, which will ultimately invoke
the function
AWSLambda client = builder.build();
// (4) Create an InvokeRequest with required parameters
InvokeRequest req = new
InvokeRequest().withFunctionName(random_arn).withPayload(jsonString);
// (5) Invoke the function and capture response
int timeout = (15*60*1000);
req.setSdkClientExecutionTimeout(timeout);
req.setSdkRequestTimeout(timeout);
req.withSdkClientExecutionTimeout(timeout);
req.withSdkRequestTimeout(timeout);
InvokeResult result = client.invoke(req);
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个超时问题吗?
小智 5
在使用 AWS Lambda 时,您可能会对多种超时感兴趣。您所指的是函数执行超时——人们在谈论 Lambda 时通常指的超时。但是,您还需要配置其他超时。查看 AWS CLI 文档:
https://docs.aws.amazon.com/cli/latest/reference/index.html
这里你有--cli-read-timeout和--cli-connect-timeout。如果我创建一个具有 5 分钟函数执行超时的 Lambda 函数,并使用 RequestResponse(同步)调用类型使用 AWS CLI 调用它,如果发生这种情况,执行时间超过 1 分钟(默认值)--cli-read-timeout,AWS Lambda 将执行失败并触发自动重试,最多重试次数。从你的描述来看,我相信你也面临着这样的麻烦。设置所有超时并重试。
您可能会发现其他一些有用的链接:
使用 Java 的 AWS Lambda - 设置配置连接/套接字超时
https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/section-client-configuration.html
| 归档时间: |
|
| 查看次数: |
10631 次 |
| 最近记录: |