【问题标题】:Cannot use memoryReservation in Terraform ECS provider无法在 Terraform ECS 提供程序中使用 memoryReservation
【发布时间】:2019-11-01 18:30:55
【问题描述】:

我正在运行测试,我的容器不希望有硬内存限制,因为我以编程方式将虚拟机交换为更大尺寸的虚拟机,并且需要容器能够自动利用 CPU 和内存的增量。 我想探索 memoryReservation,因为它是 softlimit,并且如果 VM 的内存不低,它将允许容器扩展。 不幸的是,这个参数在任务定义中似乎不起作用。有什么想法吗?

任务定义:

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

我会深深感激指点

【问题讨论】:

  • 您已经删除了一些导致该错误的代码,因此无法说明您在做什么,而且该代码不会导致该错误(memoryReservation 不是有效参数,所以首先会出错)。您能否编辑您的问题以包含minimal reproducible example 以重现您的错误,以便我们知道在哪里可以帮助您?
  • 道歉并更新。当我取消注释memory 并注释“memoryReservation”时,它起作用了,@ydaetskcoR
  • 内存预留由容器定义设置,而不是任务定义。
  • 我是 aws 和 terraform 的新手,很难理解您在上面的评论。您能否提供答案?提前致谢

标签: amazon-web-services terraform amazon-ecs


【解决方案1】:

ECS 任务定义由多个容器定义和一些额外参数组成,这些参数可以为整个任务设置硬限制,还可以设置诸如放置约束和网络配置之类的内容。

要设置允许任务在 ECS 中使用的内存软限制,而不是硬限制,您需要使用 container definition 中的 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
}

【讨论】:

  • MiB 和共享(每个核心 1024 个)。您可以通过点击有关任务定义的文档的链接阅读更多内容。
猜你喜欢
  • 2020-05-20
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多