问题描述
我是 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 任务: