如何防止多次调用AWS Lambda函数容器



[UPDATE 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响应,而现在我只能看到日志消息。

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

回答我自己的问题

显然,如果您希望使用与AWS提供的不同的基本映像,则必须在"AWS运行时接口客户端"中执行代码。我最初使用了一个Python-Alpine映像,并尝试按照本文末尾的步骤进行构建,但是构建过程遇到了一些错误,原因我还没有研究过。然后,我根据这里的说明从Debian Buster创建了另一个图像,并在一些"清理"之后;

最新更新