ECS计划的任务容器对entryPoint的覆盖不起作用

时间:2019-04-11 15:24:30

标签: amazon-cloudwatch amazon-ecs terraform-provider-aws

我正在Terraform中创建排定的ECS任务。当我尝试覆盖entryPoint的容器定义时,结果任务将不使用覆盖的entryPoint。但是,如果我尝试覆盖command,它可以正常工作(除了现有入口点之外,还添加了一个新命令)。我在文档中找不到任何使我相信不支持entryPoint覆盖的东西,但是可能是这样吗?

下面是Terrawatch中Cloudwatch事件目标的代码

resource "aws_cloudwatch_event_target" "ecs_task" {
  target_id = "run-${var.task_name}-scheduled"
  arn       = "${var.cluster_arn}"
  rule      = "${aws_cloudwatch_event_rule.ecs_task_event_rule.name}"
  role_arn  = "${aws_iam_role.ecs_event.arn}"

  ecs_target = {
    launch_type = "${var.launch_type}"
    network_configuration = {
      subnets = ["${var.subnet_ids}"]
      security_groups = ["${var.security_group_ids}"]
    }
    task_count = 1
    task_definition_arn = "${var.task_arn}"
  }

  input = <<DOC
{
  "containerOverrides": [
    {
      "name": "${var.task_name}",
      "entryPoint": ${jsonencode(var.command_overrides)}
    }
  ]
}
DOC
}

这将在AWS控制台上创建一个新的计划任务,其中输入字段如下:

{
    "containerOverrides": [
        {
            "name": "my-container-name",
            "entryPoint": [
                "sh",
                "/my_script.sh"
            ]
        }
    ]
}

但是此规则启动的任务没有入口点覆盖,而是使用原始任务定义中定义的入口点。

TLDR :如何覆盖计划任务的入口点?

1 个答案:

答案 0 :(得分:0)

到目前为止,由于计划任务最终使用run-task API,因此只能覆盖certain number of fields。这些字段如下:

  • command
  • environment
  • taskRoleArn
  • cpu
  • memory
  • memoryReservation
  • resourceRequirements

不支持其他字段的容器定义,例如entryPointportMappingslogConfiguration

解决方案是在原始任务定义中使用command而不是entryPoint,因为command可以被覆盖,而entryPoint则不能。