【问题标题】:Is there a way to directly trigger an ECS Task (i.e. without Lambda) on object upload to S3 using the Serverless Framework?有没有办法在使用无服务器框架将对象上传到 S3 时直接触发 ECS 任务(即没有 Lambda)?
【发布时间】:2021-02-22 04:01:19
【问题描述】:
问题:在将对象上传到 S3 时触发 ECS 任务。这个AWS tutorial 让它看起来是可能的,但是似乎没有太多关于如何使用无服务器框架来模拟它的信息。
约束:正如AWS tutorial 中所解释的,在不使用中间 Lambda 的情况下触发 ECS 任务
免责声明:我对无服务器(技术和这个框架)非常陌生,所以我可能从根本上误解了一些东西。尽管如此,我还是非常渴望学习和使用这些令人难以置信的工具进行构建,并希望得到任何帮助/指导!
【问题讨论】:
标签:
amazon-s3
amazon-ecs
serverless-framework
【解决方案1】:
您的问题陈述自相矛盾 - 您是想使用 Lambda + Serverless 触发 ECS 任务,还是不使用 Lambda?无服务器是一个框架,用于在 AWS 上构建和部署 Lambda 函数,或在任意数量的 IAAS 提供商上构建和部署无服务器函数。如果您不想要 Lambda 解决方案,则无需使用 Serverless。
选项 1 - 从 EventBridge 触发 ECS 任务
这是您链接的教程中详细介绍的选项。 EventBridge 是一项 AWS 服务,可将各种 AWS、第三方或自定义事件连接到多个受支持的目标。
- 当对象上传到 S3 时,已经存在一个事件发布到 EventBridge 上的默认事件总线。
- 设置在此事件触发时触发的事件规则。
- 在此事件规则上设置一个目标,该目标在触发事件时运行 ECS 任务。 (所以每当一个对象上传到 S3 时)。
S3上传事件->事件规则->目标->运行ECS任务
您可以在 AWS 控制台上或使用 API 执行此操作。
选项 2 - 触发 Lambda 函数
看来您对此不感兴趣。但是在这里列出是因为您提到了无服务器。
- 编写一个 Lambda 函数,该函数使用 AWS API 在 ECS 任务被调用时运行它。
- 您可以使用无服务器开发和部署此功能。
- 关于如何调用此 Lambda 函数,您有几个选项
- 每当有对象上传到 S3 时,创建一个 SNS 主题并发布到该主题。您可以在 S3 存储桶上进行设置。将您的 Lambda 函数与此 SNS 主题挂钩。
- 使用上述 AWS 事件并将 Lambda 函数设置为您的目标。使用 Serverless 的示例是 here