0

[更新 1:] 当我将超时时间增加到 1 分钟时,CloudWatch 在脚本成功运行两次后在中间显示以下内容,然后是一个:

REPORT RequestId: xxx-xxx   Duration: 7670.23 ms    Billed Duration: 7671 ms    Memory Size: 128 MB Max Memory Used: 36 MB  
RequestId: xxx-xxx Error: Runtime exited without providing a reason
Runtime.ExitError

原帖

我有一个通过自定义容器映像运行的 Lambda 函数。其中单个 Python 脚本的要点如下:

# imports

def lambda_handler(event, context):
    # read a JSON file from S3, check an FTP server for some info, and prepare a JSON response
    # if file not found or some other error, handle exception, prepare appropriate JSON response
    # return JSON response

# Here be helper functions

if __name__ == '__main__':
    lambda_helper(None, None)
    # also tried response = lambda_helper(None, None)

这是阶梯函数中的第一个状态,它将由 CloudWatch Events 定期触发,因此不需要任何输入。

它是从容器中调用的

CMD ["python", "script.py"]

当我从控制台测试此功能时,我在 CloudWatch 中看到所有预期的日志消息,包括最后一条指示成功执行的日志消息,但是此过程会重复几次,总体上被视为失败(顶部的红色横幅) .

它在 3 秒后超时,因为这是默认限制,但不是在脚本成功运行几次之前。没有内存问题(使用 20-30 MB,共 128 MB)或其他错误。

在早期版本中,对 的调用lambda_handler包含在 中sys.exit(),但在阅读了一些关于它的线程干扰了 Lambda 处理函数的方式后,我将其删除。唯一的区别是我可以在 CloudWatch 中看到 JSON 响应,而现在我只能看到日志消息。

我已经阅读了大量的线程和文档,但我仍然无法解决这个问题。任何帮助将不胜感激。

4

1 回答 1

0

回答我自己的问题。

显然,如果您希望使用与 AWS 提供的不同的基本映像,则必须在“AWS 运行时接口客户端”中执行您的代码。我最初使用 Python-Alpine 映像并尝试按照本文末尾的步骤进行操作,但是由于我没有调查过的原因,构建过程遇到了错误。然后,我根据此处的说明从 Debian Buster 创建了另一个映像,并且在对 Dockerfile 进行了一些“清理”以适合我的应用程序之后,它就可以工作了。

于 2021-08-14T17:40:16.310 回答