Невозможно использовать memoryReservation в провайдере Terraform ECS - PullRequest
0 голосов
/ 01 ноября 2019

Я выполняю тесты, в которых нежелательно, чтобы у моих контейнеров были жесткие ограничения памяти, поскольку я программно меняю виртуальные машины на более крупные, и мне нужно, чтобы контейнеры могли автоматически использовать приращение в процессоре и памяти. Я хочу исследовать memoryReservation, так как оно является softlimit и позволит масштабировать контейнеры, если объем памяти ВМ невелик. К сожалению, этот параметр не работает в определении задачи. Есть идеи?

Определение задачи:

resource "aws_ecs_task_definition" "quorum" {
  family                   = "quorum-${var.consensus_mechanism}-${var.tx_privacy_engine}-${var.network_name}"
  container_definitions    = "${replace(element(compact(local.container_definitions), 0), "/\"(true|false|[0-9]+)\"/", "$1")}"
  requires_compatibilities = ["${var.ecs_mode}"]
  # cpu                      = "4096"
  # memory                   = "81920"
  memoryReservation        = "8192"
  network_mode             = "${var.ecs_network_mode}"
  task_role_arn            = "${aws_iam_role.ecs_task.arn}"
  execution_role_arn       = "${aws_iam_role.ecs_task.arn}"

  volume {
    name = "${local.shared_volume_name}"
  }

  volume {
    name      = "docker_socket"
    host_path = "/var/run/docker.sock"
  }

}

Ошибка:

[FINAL] Summary execution: 
Wrote summarry output to:  .mjolnir//output.log
2 errors occurred:
        * aws_ecs_service.quorum: 5 errors occurred:
        * aws_ecs_service.quorum[3]: Resource 'aws_ecs_task_definition.quorum' not found for variable 'aws_ecs_task_definition.quorum.revision'
        * aws_ecs_service.quorum[0]: Resource 'aws_ecs_task_definition.quorum' not found for variable 'aws_ecs_task_definition.quorum.revision'
        * aws_ecs_service.quorum[4]: Resource 'aws_ecs_task_definition.quorum' not found for variable 'aws_ecs_task_definition.quorum.revision'
        * aws_ecs_service.quorum[2]: Resource 'aws_ecs_task_definition.quorum' not found for variable 'aws_ecs_task_definition.quorum.revision'
        * aws_ecs_service.quorum[1]: Resource 'aws_ecs_task_definition.quorum' not found for variable 'aws_ecs_task_definition.quorum.revision'


        * output._status: Resource 'aws_ecs_task_definition.quorum' not found for variable 'aws_ecs_task_definition.quorum.revision'


Restoring env variables.

Error occured: 4

Буду глубоко признателен за указатели

1 Ответ

1 голос
/ 01 ноября 2019

Определения задач ECS состоят из нескольких определений контейнеров с некоторыми дополнительными параметрами, которые могут устанавливать жесткие ограничения для всей задачи, а также устанавливать такие вещи, как ограничения размещения и сетевая конфигурация.

Чтобы установить мягкую памятьограничить использование задачи в ECS, а не жесткое ограничение, которое вам нужно использовать memoryReservation из определения контейнера вместо определения задачи.

Код в вашем вопросе нене показывает, как вы определяете определения контейнеров в вашей локальной сети, но базовый пример установки ограничений мягкой памяти в задаче ECS будет выглядеть примерно так:

resource "aws_ecs_task_definition" "service" {
  family                = "service"
  container_definitions = <<EOF
[
  {
    "name": "first",
    "image": "service-first",
    "cpu": 10,
    "memoryReservation": 512,
    "essential": true,
    "portMappings": [
      {
        "containerPort": 80,
        "hostPort": 80
      }
    ]
  },
  {
    "name": "second",
    "image": "service-second",
    "cpu": 10,
    "memoryReservation": 256,
    "essential": true,
    "portMappings": [
      {
        "containerPort": 443,
        "hostPort": 443
      }
    ]
  }
]
EOF
}
...