入口点的 ECS 计划任务容器覆盖不起作用

Posted

技术标签:

【中文标题】入口点的 ECS 计划任务容器覆盖不起作用【英文标题】:ECS scheduled task containerOverrides for entryPoint not working 【发布时间】:2019-09-02 07:12:19 【问题描述】:

我正在 Terraform 中创建计划的 ECS 任务。当我尝试覆盖entryPoint 的容器定义时,生成的任务不会使用覆盖的entryPoint。但是,如果我尝试覆盖 command,它可以正常工作(除了现有入口点之外添加一个新命令)。我在文档中找不到任何内容让我相信不支持 entryPoint 覆盖但可能是这种情况?

以下是 terraform 中 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】:

截至今天,只有 certain number of fields 可以被覆盖,因为计划任务最终使用 run-task API。这些字段如下:

command environment taskRoleArn cpu memory memoryReservation resourceRequirements

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

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

【讨论】:

以上是关于入口点的 ECS 计划任务容器覆盖不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥计划任务执行固定速率中的代码不起作用?

使用节点运行脚本的计划任务将不起作用

带引号的任务计划程序参数不起作用

Amazon ECS - 实例之间的持久数据

通过 Windows 任务计划程序调用 SSIS 包时,发送邮件任务在 SSIS 中不起作用

设置为以系统帐户运行时计划任务不起作用