python - 使用 boto 调用 lambda 不考虑超时

标签 python timeout aws-lambda boto boto3

我正在使用 boto3 调用 lambda 函数,其中:

import boto3
import json

client = boto3.client('lambda')
response = client.invoke(
            InvocationType='RequestResponse',
            FunctionName=test_lambda_arn,
            LogType='Tail',
            Payload=json.dumps(data)
)

它在 626 秒后引发 botocore.vendored.requests.exceptions.ReadTimeout 异常。我已将此 lambda 配置为在 100 秒后超时。当我用 boto 创建它时我就这样做了。当我进入 AWS 控制台时,它显示该 lambda 的超时时间为 1 分 40 秒。

那么为什么 invoke 命令会在 626 秒后超时,而不是在 100 秒后超时?

是因为重试吗?如果是这样,我如何禁用重试?

编辑:在 CloudWatch 日志中,我可以看到每个 client.invoke 调用的多个调用。因此会发生一些自动重试的事情。这里是the docs对于client.invoke

最佳答案

创建 botocore config具有较长 read_timeout 值(可能还有其他内容)的对象,并在创建 lambda 客户端时将其传入:

import botocore
import boto3
            
cfg = botocore.config.Config(retries={'max_attempts': 0}, read_timeout=840, connect_timeout=600, region_name="us-east-1" )
           
client = boto3.client(
    'lambda', config=cfg, region_name="us-east-1",
     aws_access_key_id="*********", aws_secret_access_key="*********")

payload = {"input_array": input_arr}

result = client.invoke(
     FunctionName="**********", InvocationType='RequestResponse',
     LogType='Tail', Payload=json.dumps(payload,cls=NumpyArrayEncoder))
        

range = result['Payload'].read()
range_json = json.loads(range)

关于python - 使用 boto 调用 lambda 不考虑超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44147352/

相关文章:

node.js - 带有 AWS Lambda 错误 "Cannot find module"的无服务器框架

amazon-web-services - S3 put()事件lambda触发器中可以包含多少条记录?

python 异常值 Nutri 函数

angularjs - 循环内的 Angular $timeout 失败

python - 如何正确处理提供的错误 urlsafe key ?

python - 0.5秒后如何在python 2.4中发出警报信号

wcf - 处理 WCF 服务中的超时

javascript - 如何在没有 try/catch block 的情况下使用异步 lambda 并仍然具有自定义错误消息?

python - 如何检索目录中最近创建的文件

python - 操纵日期字段 pandas