入口点的 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
不支持其他字段的容器定义,例如entryPoint
、portMappings
和logConfiguration
。
解决方案是在原始任务定义中使用command
而不是entryPoint
,因为command
可以被覆盖但entryPoint
不能。
【讨论】:
以上是关于入口点的 ECS 计划任务容器覆盖不起作用的主要内容,如果未能解决你的问题,请参考以下文章