锁定 AWS Lambda 函数以避免并发运行代码的某些关键部分

Bog*_*_Ch 6 concurrency amazon-web-services aws-lambda

问题:我们有一个调用第 3 方 API 的 AWS Lambda 函数。该第 3 方系统存在一些并发问题,因此在某些情况下,如果我们从同时运行的 lambda 函数的多个实例调用该 API,我们最终会在第 3 方系统中创建重复的对象。该系统的供应商不承诺快速解决该问题,因此目前我们需要避免调用该 API 的代码部分的并发

当文件被放入 S3 存储桶时,我们的 Lambda 函数就会被触发,因此当同时放入多个文件时,每个文件都会通过并行运行该函数的实例来处理。

出于性能原因,我们希望继续并发处理文件,因此我们不考虑使用队列(如 SQS)将文件放入队列,然后依次调用每个文件的 lambda 函数的解决方案。

编写一种最简单的方法是什么

threading.lock()
Run Code Online (Sandbox Code Playgroud)

命令来阻止调用第 3 方 API 的代码的关键部分在并行实例中执行?

我们认为我们可以通过更新 DynamoDB 中的值并检查它是否被锁定来实现这一点,但目前我们不使用 DynamoDb ,我们的解决方案包含 S3 存储桶和无服务器组件,例如 AWS Step Functions、Lambda 函数、粘合作业,因此仅仅为了控制锁的单一目的而引入数据库听起来有点矫枉过正

有任何想法欢迎提出