我有各种 Fargate 任务。它们运行良好。然后我还有一些额外的任务,它们需要比愚蠢的旧 Fargate 允许的更多的磁盘空间。这些任务必须在我分配给其各自集群的 EC2 实例上运行。
我使用 cloudwatch 事件触发这些任务。
因为我拥有的这些由 EC2 支持的任务太少了,所以让这些 EC2 实例闲置着似乎很愚蠢。
我的想法是根据需要创建/销毁 EC2 实例,可能使用 Lambda。
我建议的顺序:
- Cloudwatch 启动事件
- Lambda 自动将 ECS 集群的 EC2 实例扩展到 1
- EC2 Cloudwatch 就绪事件
- ECS 任务已启动
- ECS 任务完成并触发 Cloudwatch 事件
- Lambda 缩小集群规模
这可行吗? 有没有模式或更好的方法来做到这一点? 如果有办法直接从 cloudwatch 事件触发自动缩放,那么 Lambda 函数可能就没有必要了?
请注意,这些任务是不是已安排,因此这不是安排自动缩放的问题
答案1
使用 AWS Batch。这是一项专门为您的情况设计的服务,可以由 CloudWatch Events 触发
答案2
这应该没问题。您还可以在 EC2 ASG 所需容量删除步骤的同时提高 ECS 服务所需容量,除非您正在启动独立任务。ECS 服务将继续尝试启动任务,直到实例注册到集群。
您如何知道何时需要启动任务/实例,触发因素是什么?无论它是什么,您都可以使用它直接触发 Lambada 函数。或者,如果它是 CloudWatch 指标,则跳过 CW 事件和 Lambda 函数,并让 CW 警报直接增加 ASG 和 ECS 所需容量(或者例如,如果启动因素是 SQS 队列中的某个东西)