我有一个 EventBridge 规则,它在其中一个 ECS 任务启动(状态:RUNNING)时调用 Lambda 函数(目标)。Lambda 函数做了一些事情,然后它应该在最后停止 ECS 任务。
我有以下 EventBridge 规则:
{
"source": ["aws.ecs"],
"detail-type": ["ECS Task State Change"],
"detail": {
"clusterArn": ["<cluster-arn>"],
"lastStatus": ["RUNNING"],
"desiredStatus": ["RUNNING"]
}
}
它调用 Lambda 函数。
以下是 Lambda 函数的简化版本:
import { ECSClient, StopTaskCommand } from "@aws-sdk/client-ecs";
export const handler = async (event, context, callback) => {
// event has the EventBridge event capture from the AWS ECS Task
// Do something
const ecs = new ECSClient({ region: "<region>" })
var taskArn = event.detail.containers[0].taskArn;
var stopTask = new StopTaskCommand({
cluster: "<cluster-arn>",
reason: "<reason>",
task: taskArn
});
try {
const data = await ecs.send(stopTask);
} catch (error) {
console.log(error)
}
}
当我启动 ECS 任务时,会调用 Lambda 函数并开始运行。在它完成它应该做的事情后,它会停止调用它的 ECS 任务。aws-sdk
我为此使用v3,taskArn
从event
Lambda 函数的参数中获取。Lambda 函数可以成功停止 ECS 任务(我从发送命令的结果中收到 200 HTTP 响应代码)。但是,然后再次调用 Lambda 函数,并一直重复此过程(我检查了该函数的 CloudWatch 日志)。
我不确定为什么 Lambda 函数会再次启动,因为据我所知,EventBridge 规则不应该触发它。