如何运行 AWS ECS 任务,然后在准备就绪后运行 Lambda 函数,然后最终停止任务?

问题描述

我是 AWS 的新手。我有一个 Lambda 函数,我想每天在格林威治标准时间凌晨 4:00 运行。 Lambda 函数依赖于要运行的 AWS ECS 容器任务。而不是运行 AWS ECS 容器任务总是运行(因为它对我来说成本很高),我希望能够触发运行它,然后在准备好时运行 Lambda 任务,最后当 Lambda 函数完成时,我想阻止它。

我对此进行了调查,发现我可以使用 Amazon EventBridge 规则运行 Lambda 函数。我知道我可以使用 CRON 表达式 0 4 * * ? * 在每天凌晨 4:00 运行它。但是,我不确定如何先运行 ECS Container 任务,以及如何在 Lambda 函数完成后停止任务。

其他信息:

Lambda 函数具有 Node.js 环境。

解决方法

ECS 向 EventBridge (EB) 发出 events。您可以在 EB 中设置规则来捕获感兴趣的事件并触发您的 lambda 函数作为事件的目标。

示例 EB 规则可以是:

{
  "source": [
    "aws.ecs"
  ],"detail-type": [
    "ECS Task State Change"
  ],"detail": {
    "lastStatus": [
      "RUNNING"
    ]
  }
}

规则的其他自定义是可能的。

还有如何在 Lambda 函数完成时停止任务。

您的 lambda 可以使用适用于 ECS 的 AWS 开发工具包并停止任务。 EB 事件捕获将包含启动了哪个任务的信息。

您还可以通过步进函数来编排您的 lambda 和 ecs 任务: