我注意到许多其他问题都在谈论 lambda 并发性,但似乎没有一个与我的问题完全相同,所以这是一个新问题:
我有一个当前的 lambda 函数,它使用采用 SQS 触发器的 python 请求。我有一个预留的并发限制集,但是在测试触发 1000 个 SQS 触发器的代码时,只有 1 或 2 个函数实例运行。
SQS触发设置如下:
Activate trigger: No;
Batch size: 1000;
Batch window: 100;
Concurrent batches per shard: None;
Last processing result: None;
Maximum age of record: None;
Maximum concurrency: 800;
On-failure destination: None;
Report batch item failures: Yes;
Retry attempts: None;
Split batch on error: None;
Starting position: None;
Tumbling window duration: None;
lambda并发设置如下:
Function concurrency:
Use reserved concurrency;
Reserved concurrency:
800;
lambda函数的一般配置如下:
Memory:
128MB;
Ephemeral storage:
512MB;
Timeout:
15min0sec;
SnapStartInfo:
None;
SQS 函数设置为使用死信队列,但没有到达那里。据我所知,这些消息在飞行中停滞不前,然后似乎消失了。 Lambda 在测试我的脚本时最多运行 6 个并发执行,但通常是 2 个左右,其中 1 个失败。
我使用 boto3 使用 python 脚本将消息发送到 SQS。我知道这些可以正确到达 SQS,因为运行代码后收到的消息指标显示约为 1000。
如果有人有任何想法,请分享。我完全不知所措。
注意到@jarmod 注意到批量大小问题确实是问题所在!将批量大小更改为 1,问题就解决了!