我已经部署了ECS任务,该任务可以备份数据库。完成此操作后,任务将保持运行状态。有谁知道如何结束任务?
我使用Docker容器(春季启动),并使用Terraform部署任务。
编辑: 我的Terraform看起来像这样:
resource "aws_ecs_task_definition" "task_definition" {
family = "${var.application_name}"
container_definitions = "${data.template_file.container_definition_tpl.rendered}"
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
execution_role_arn = "arn:aws:iam::${var.account_id}:role/app_execution_role"
task_role_arn = "arn:aws:iam::${var.account_id}:role/app_task_role"
cpu = 256
memory = 512
}
resource "aws_cloudwatch_event_rule" "scheduled_task" {
name = "${var.name}_${var.environment}_scheduled_task"
description = "Run ${var.name}_${var.environment} task at a scheduled time rate (1 day)"
schedule_expression = "cron(* 9 * ? *)"
}
resource "aws_cloudwatch_event_target" "scheduled_task" {
target_id = "${var.name}_${var.environment}_scheduled_task_target"
rule = "${aws_cloudwatch_event_rule.scheduled_task.name}"
arn = "${data.aws_ecs_cluster.ecs_cluster.id}"
role_arn = "${aws_iam_role.ecs_events.arn}"
ecs_target {
task_count = 1
task_definition_arn = "${aws_ecs_task_definition.task_definition.arn}"
launch_type="FARGATE"
platform_version="LATEST"
network_configuration {
assign_public_ip = false
security_groups= [data.aws_security_group.ecs_security_group.id]
subnets =data.aws_subnet_ids.private_subnet_ids.ids
}
}
我有一个计划的任务,每天运行一次。但是它创建了一个新任务,另一个任务仍然是RUNNUNG,所以一个星期后我将有7个任务。
答案 0 :(得分:2)
最后,解决方案非常简单。
问题:
该任务在ECS服务中运行,也称为计划事件。这引起了很多问题,因为任务在给定的时间运行了两次。
解决方案:
最后,解决方案是删除ECS服务,因为该作业不满足ECS服务的要求。答案是仅通过计划任务调用该任务。另外,该实现还必须关闭容器,以确保在任务完成时,该任务将自动关闭,并且那里没有不必要的任务。
答案 1 :(得分:1)
我们的ECS计划任务遇到了类似情况。错误的错误处理,同步问题或使用锁定的API,可能有很多原因导致它卡住。
我建议您看一下您的代码,尝试找出所提到的任何类别,如果找不到,也可以: