我正在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 :如何覆盖计划任务的入口点?
答案 0 :(得分:0)
到目前为止,由于计划任务最终使用run-task
API,因此只能覆盖certain number of fields。这些字段如下:
command
environment
taskRoleArn
cpu
memory
memoryReservation
resourceRequirements
不支持其他字段的容器定义,例如entryPoint
,portMappings
和logConfiguration
。
解决方案是在原始任务定义中使用command
而不是entryPoint
,因为command
可以被覆盖,而entryPoint
则不能。