【发布时间】:2021-04-02 15:23:58
【问题描述】:
我有一个调用多个“工人”的“主”aws lambda 函数。我正在异步调用工作人员,因此他们不会向主服务器返回任何 json。下面是一些类似的代码:
大师:
def lambda_handler(event, context):
config = #### LOAD LIST OF THINGS TO DO FROM A CONFIG FILE ON AN S3 BUCET ###
client = boto3.client('lambda',
config = Config(retries={'max_attempts': 0}))
for t in config['tasks']:
client.invoke(FunctionName={worker_arn},
InvocationType='Event',
Payload=json.dumps(config['tasks'][t]))
工人
def lambda_handler(event, context):
#### DO STUFF ####
#### DUMP STATE INFO SOMEWHERE (TO AN S3 BUCKET?) ###
由于工作人员是由“事件”而不是“请求响应”调用的,所以他们do not return any json info。该链接线程建议将状态数据转储到 S3 存储桶。但是,多个并发进程在编辑 S3 存储桶上的单个文件时会遇到问题,因为它们会覆盖彼此的状态。为异步 lambda 调用持久化状态信息的最佳做法是什么?
【问题讨论】:
-
您似乎在手动创建工作流。相反,请考虑使用Step Functions。
-
步进函数能否让我同时调用几十个工作函数并收集它们的响应以从基本 lambda 返回任何错误?使用阶跃函数似乎需要大量开销。
-
Step Functions 支持动态并行。您可以使用 Map Fan-Out 模式。我不会说这里有很大的开销,尤其是与尝试推出自己的编排相比。
-
这听起来像是正确的方法。谢谢。
标签: python-3.x amazon-web-services amazon-s3 aws-lambda boto3