dev*_*eed 7 amazon-web-services aws-sdk aws-lambda aws-java-sdk
我们似乎确定性地遇到了这个问题,并且不确定我们在哪里配置错误。对于运行不到约 5 分钟的 lambda,我们的调用在 lambda 完成后约 0.5 秒成功结束。然而,对于任何比这更长的时间,我们可以看到 lambda 在 lambda 日志中完成,但我们的客户端调用ClientExecutionTimeoutException在 15 分钟后抛出 a 。
在遇到其他(否则成功)lambda 的问题后,我们在 Node 上创建了一个基本的测试 lambda 和 sleep 函数,并且已经能够确定性地重现该问题:
function sleep(s) {
return new Promise(resolve => setTimeout(resolve, s * 1000));
}
const sleepMinutes = 60 * 5;
exports.handler = async (event) => {
console.log(`received lambda invocation, sleeping ${sleepMinutes}`);
const response = {
statusCode: 200,
body: JSON.stringify(`finished running, slept for ${sleepMinutes} minutes`),
};
await sleep(sleepMinutes);
console.log('finished sleeping');
return response;
};
Run Code Online (Sandbox Code Playgroud)
我们的 lambda 调用客户端正在使用这些客户端配置:
clientConfig.setRetryPolicy(PredefinedRetryPolicies.NO_RETRY_POLICY);
clientConfig.setMaxErrorRetry(0);
clientConfig.setSocketTimeout(15 * 60 * 1000);
clientConfig.setRequestTimeout(15 * 60 * 1000);
clientConfig.setClientExecutionTimeout(15 * 60 * 1000);
Run Code Online (Sandbox Code Playgroud)
我们是否缺少约 5 分钟的超时配置?
aws-sdk-java 中的Javadocs说:
Run Code Online (Sandbox Code Playgroud)For functions with a long timeout, your client might be disconnected during synchronous invocation while it waits for a response. Configure your HTTP client, SDK, firewall, proxy, or operating system to allow for long connections with timeout or keep-alive settings.
另一方面,之前 AWS Lambda 被限制为最多 5 分钟,后来这个限制增加到最多 15 分钟。
我会检查:
AWSLambdaAsyncClient.invokeAsync()以进行长时间运行的调用。| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |