Python 尽管没有错误,Amazon Lambda每分钟都会使用多个请求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

我在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-46424f45e2e5
  • 11:22:30至11:22:33-日志流A-请求。ID:d9d60271-4626-43ab-bb3a-f14be057af13
  • 从Lambda调用返回的请求ID是d9d60271-4626-43ab-bb3a-f14be057af13

    调用Lambda的堆栈如下所示:

    • Jenkins正在运行管道脚本
    • 该脚本运行一个Makefile,该Makefile执行两个连续任务。
      • 构建一个docker容器
      • 在容器内运行脚本
    • 在容器中运行的脚本是Python 3.7。它使用Boto3调用一些AWS API,然后使用
      InvocationType=“RequestResponse”
      调用lambda

    所有调用均不存在未处理的异常或任何明显错误。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执行超时

    ——正如我发布的答案所示,这是一个客户端编程问题。请撤回“接近”票。