用boto调用lambda并不尊重超时

时间:2017-05-24 01:08:39

标签: 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调用的多个调用。因此,有一些自动重试的事情发生。以下是client.invoke的{​​{3}}。

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:0)

我在boto3 git repo上发布了这个问题。他们将向client.invoke添加一个选项以禁用自动重试。

与此同时,here's a workaround