Python 尽管没有错误,Amazon Lambda每分钟都会使用多个请求ID重新调用一次
我在Python3.7中有一个Lambda函数,可以通过Boto3显式同步调用。配置为超时5分钟。第一次调用进行了一分钟,第二次调用使用另一个请求ID启动。另一分钟后,再次重试该请求,这次它很快完成。当它检测到系统状态发生变化时。调用序列示例Python 尽管没有错误,Amazon Lambda每分钟都会使用多个请求ID重新调用一次,python,jenkins,aws-lambda,boto3,Python,Jenkins,Aws Lambda,Boto3,我在Python3.7中有一个Lambda函数,可以通过Boto3显式同步调用。配置为超时5分钟。第一次调用进行了一分钟,第二次调用使用另一个请求ID启动。另一分钟后,再次重试该请求,这次它很快完成。当它检测到系统状态发生变化时。调用序列示例 11:20:29至11:21:53-日志流A-请求。ID:68cfbd89-9f4c-4e8c-9de0-b9e548983692 11:21:30至11:22:56-日志流B-请求。ID:1b569ffb-67b8-4e82-8e99-46424f45e
- Jenkins正在运行管道脚本
- 该脚本运行一个Makefile,该Makefile执行两个连续任务。
- 构建一个docker容器
- 在容器内运行脚本
- 在容器中运行的脚本是Python 3.7。它使用Boto3调用一些AWS API,然后使用
调用lambdaInvocationType=“RequestResponse”
所有调用均不存在未处理的异常或任何明显错误。Lambda在回我的电话吗?这个堆栈中的任何其他元素,尤其是Jenkins,是否可以“透明地”重试任务?如果是,我将如何确定这一点?问题最终由客户端的Boto3引起,而不是Lambda!当lambda不返回任何内容超过一分钟时,默认情况下bot3超时。要解决此问题,我必须覆盖Boto的默认配置:
lambda_config = botocore.config.Config(region_name=region, read_timeout=300)
lambda_client = boto3.client('lambda', config=lambda_config)
我演示这是一个客户端问题的方法是,将参数reserved_concurrent_executions设置为1,从而阻止Lambda的并发执行,并注意到我从Boto获得了一个异常。这通常是由于读取cli时间导致的,该时间在多次调用Lambda时返回。将--cli读取超时参数添加到 aws lambda调用 或者如果使用boto,则按照上面YitzikC的回答进行操作 对于aws cli,命令如下所示
aws lambda invoke--函数名--cli读取超时900--日志类型尾部--region/dev/stdout
确保所有投票关闭的人的cli读取超时等于或大于lambda fun执行超时——正如我发布的答案所示,这是一个客户端编程问题。请撤回“接近”票。