Yit*_*ikC 4 python jenkins boto3 aws-lambda
我在 Python 3.7 中有一个 Lambda 函数,它通过 Boto3 显式同步调用。它配置了 5 分钟的超时。当第一次调用进行一分钟时,第二次调用将使用另一个请求 ID 启动。一分钟后,再次重试该请求,这次很快就完成了。因为它检测到系统状态已更改。调用序列示例
从我的 Lambda 调用返回的请求 ID 是 d9d60271-4626-43ab-bb3a-f14be057af13。
调用Lambda的堆栈如下:
InvocationType="RequestResponse".所有调用都不会因未处理的异常或任何明显的错误而退出。Lambda 是否正在重试我的呼叫?该堆栈的任何其他元素(尤其是 Jenkins)是否可以“透明地”重试该任务,如果是这样,我将如何确定这一点?
结果问题出在客户端的 Boto3,而不是 Lambda!当 lambda 超过一分钟没有返回任何内容时,Boto3 默认会超时。为了解决这个问题,我必须覆盖 Boto 的默认配置:
lambda_config = botocore.config.Config(region_name=region, read_timeout=300)
lambda_client = boto3.client('lambda', config=lambda_config)
Run Code Online (Sandbox Code Playgroud)
我证明这是一个客户端问题的方法是将参数reserved_concurrent_executions 设置为1,从而防止我的Lambda 并发执行,并注意到我从Boto 收到了异常。
这通常是由于 cli 时间读出而发生,该读出在 lambda 的多次调用中返回。将 --cli-read-timeout 参数添加到 aws lambda 调用,或者如果使用 boto,则按照上面 YitzikC 的回答进行操作
对于 aws cli,命令如下所示
aws lambda invoke --function-name <fn name> --cli-read-timeout 900 --log-type Tail --region <region> /dev/stdout
确保 cli 读取超时等于或大于 lambda fun 执行超时
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |