【问题标题】:AWS Lambda Java function invoked multiple times多次调用 AWS Lambda Java 函数
【发布时间】:2016-09-21 11:14:36
【问题描述】:

我有一个用 Java 编写的 AWS Lambda 函数(嗯,它实际上是用 Clojure 编写的),每次运行它似乎都会被调用 3 次。

我的函数在超时(设置为最多 5 分钟)内成功运行。它返回一个字符串,当我在控制台中测试函数时可以看到输出。

我在网上看到了一些关于必须调用一些 Context success / done 函数的内容,但在 Java SDK 中看不到(似乎仅适用于 Node?)。

我错过了什么吗?

当我在控制台中单击测试时不会发生这种情况(它只运行一次),但在通过 CloudWatch 触发器触发或通过 AWS 开发工具包运行时会发生。

谢谢,

多诺万

更新:抱歉,通过触发器运行时不会发生这种情况,仅通过 SDK 和 CLI 运行,所以我正在拨打的电话可能有一些超时。

【问题讨论】:

    标签: amazon-web-services clojure aws-lambda


    【解决方案1】:

    供其他人将来参考,问题是 SDK 和 CLI 达到一分钟的读取超时,然后重试请求。我手动将此设置为 5 分钟以匹配我的 AWS Lambda 超时。

    这可以通过在 CLI 中添加 --cli-read-timeout int 来完成,其中 int 是您想要的超时(或者只是 --cli-read-timeout 0 完全禁用超时)。

    在 Java SDK 中,可以通过在 ClientConfiguration 对象上调用 setSocketTimeout(int socketTimeout) 来完成

    在使用 Amazonica 的 Clojure 中,将 :client-config {:socket-timeout xxx} 添加到您的凭据映射中。

    【讨论】:

    • 我用invokeRequest.setSdkRequestTimeout(180001); invokeRequest.setSdkClientExecutionTimeout(180001);解决了这个问题
    • 我希望 SDK 能够足够聪明地假设它所连接的服务的超时,所以对于 lambda,如果我的超时为 5 分钟,SDK 应该会适应。不幸的是,情况并非如此......为此浪费了很多时间,但非常感谢这个答案。
    猜你喜欢
    • 2020-02-24
    • 2021-07-25
    • 1970-01-01
    • 2016-01-29
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多