Don*_*son 12 amazon-s3 amazon-sqs amazon-web-services amazon-ecs terraform
为了澄清起见,我想做的是当特定队列中有项目时触发 Fargate 任务。我已经使用本教程来了解我现在的情况。这工作正常,但我遇到的问题是每个文件上传(s3存储桶的结构是s3_bucket_name/{unknown_name}/known_file_names)都会导致任务被触发,我只希望/需要它每个{unknown_name}触发一次。此后,我更改了配置,以在检测到 test_file.txt 文件时将项目添加到队列中。是否可以在这样的队列上触发fargate任务?如果是这样,怎么办?
Mar*_*k B 15
SQS 不会触发或“推送”任何消息。正如评论中提到的,AWS Lambda 具有 SQS 集成,可以自动为您轮询 SQS 并使用新消息触发 Lambda 函数,您可以使用该函数来创建 Fargate 任务。
不过,我建议像这样重构您的 Fargate 任务:
Object="known_file_names" 被放入 's3_bucket_name/{unknown_name}' ---> 事件未触发
Object="unknown_name" 被放入 's3_bucket_name' --> 事件已触发
您希望当文件放入没有前缀的 S3 存储桶时触发事件,而如果有前缀则不触发事件。然而,S3 不允许这样做。你可以做完全相反的事情。您可以限制事件仅在与前缀匹配时触发。
这是发送运行任务请求的模板 python lambda 函数: https://github.com/shitijkarsolia/ecs-Fargate-tasks-fatlambda/blob/master/lambda/run_fat_lambda.py
注意: 但是这种架构有一个缺陷。消息到达 SQS 后,Lambda 函数运行(发送 Fargate 运行任务请求)并向 SQS 返回成功。结果,该消息将从队列中删除。因此,如果 Fargate 容器中的处理因任何原因失败,则消息将永远丢失,并且无法重试处理。
更好的架构是: S3Put 事件将消息发布到 SNS 主题。SQS 和单独的 Lambda 函数是该 SNS 的订阅者。Lambda 函数将运行任务请求发送到 Fargate。Fargate 容器轮询 SQS 队列并在成功处理时显式删除消息。
| 归档时间: |
|
| 查看次数: |
29922 次 |
| 最近记录: |