Добавьте объем efs в ecs fargate

Я хочу использовать EFS с fargate, но при запуске задачи у меня возникает эта ошибка:

ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: Failed to resolve "fs-xxxxx.efs.eu-west-1.amazonaws.com" - check that your file system ID is correct

Я проверил идентификатор файловой системы, он исправлен ... как я могу получить дополнительную информацию об этой ошибке? Может быть, это связано с группами безопасности?

Это код, который я использую с terraform, я использую две точки монтирования для двух зон доступности:

resource "aws_efs_file_system" "efs_apache" {
}

resource "aws_efs_mount_target" "efs-mount" {
  count                     = 2

  file_system_id            = aws_efs_file_system.efs_apache.id
  subnet_id                 = sort(var.subnet_ids)[count.index]
  security_groups           = [aws_security_group.efs.id]
}

resource "aws_efs_access_point" "efs-access-point" {
  file_system_id = aws_efs_file_system.efs_apache.id
}

resource "aws_security_group" "efs" {
  name        = "${var.name}-efs-sg"
  description = "Allow traffic from self"
  vpc_id      = var.vpc_id

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port = 2049
    to_port   = 2049
    protocol  = "tcp"
    security_groups = [aws_security_group.fargate_sg.id]
  }
}

это фаргейт-сервис:

resource "aws_ecs_task_definition" "task_definition" {
  family                    = var.name
  requires_compatibilities  = ["FARGATE"]
  network_mode              = "awsvpc"
  execution_role_arn        = aws_iam_role.task_execution_role.arn
  task_role_arn             = aws_iam_role.task_role.arn
  cpu                       = var.cpu
  memory                    = var.memoryHardLimit
  volume {
    name      = "efs-apache"

    efs_volume_configuration {
      file_system_id = aws_efs_file_system.efs_apache.id
      root_directory = "/"
      transit_encryption      = "ENABLED"

      authorization_config {
        access_point_id = aws_efs_access_point.efs-access-point.id
        iam             = "ENABLED"
      }
    }
  }

  depends_on                = [aws_efs_file_system.efs_apache]

  container_definitions     = <<EOF
    [
      {
        "name": "${var.name}",
        "image": "${data.aws_caller_identity.current.account_id}.dkr.ecr.${data.aws_region.current.name}.amazonaws.com/${lower(var.project_name)}_app:latest",
        "memory": ${var.memoryHardLimit},
        "memoryReservation":  ${var.memorySoftLimit},
        "cpu": ${var.cpu},
        "essential": true,
        "command": [
          "/bin/sh -c \"/app/start.sh"
        ],
        "entryPoint": [
          "sh",
          "-c"
        ],
        "mountPoints": [
          {
            "containerPath": "/var/www/sites_json",
            "sourceVolume": "efs-apache",
            "readOnly": false
          }
        ],
        "portMappings": [
          {
            "containerPort": ${var.docker_container_port},
            "hostPort": ${var.docker_container_port}
          }
        ],
        "logConfiguration": {
            "logDriver": "awslogs",
            "options": {
                "awslogs-group": "${var.name}-Task-LogGroup",
                "awslogs-region": "${data.aws_region.current.name}",
                "awslogs-stream-prefix": "ecs"
            }
        }
      }
    ]
EOF
}

Как я могу решить?


person SaroVin    schedule 19.10.2020    source источник
comment
Вы проверили, работает ли ваша служба fargate в той же подсети, что и efs? Что также помогло мне (и мне сказали некоторые консультанты по aws), так это развернуть какой-то бесплатный экземпляр Linux уровня и попытаться смонтировать туда файловую систему - если это не сработает, вы можете включить подробное ведение журнала и т. Д.   -  person Matthias Herrmann    schedule 19.10.2020


Ответы (1)


Убедитесь, что вы включили разрешение DNS и имена хостов DNS в своем VPC. Для работы EFS необходимо, чтобы оба эти параметра были включены, поскольку для разрешения соединения он использует имя хоста DNS. Это заставило меня застрять на какое-то время, так как большая часть документации в Интернете посвящена группам безопасности для этой ошибки.

Ресурс провайдера terraform AWS aws_vpc устанавливает enable_dns_hostnames = false по умолчанию, поэтому вам нужно явно установить для него значение true. Конфигурация вашего terraform VPC должна выглядеть примерно так:

resource "aws_vpc" "main" {
cidr_block             = "10.255.248.0/22"
enable_dns_hostnames   = true
}
person sephr_    schedule 07.12.2020