Присоединить том EFS в ECS

При попытке смонтировать файловую систему EFS вместе с ECS я получаю следующую ошибку:

ResourceInitializationError: не удалось вызвать команды EFS utils для настройки томов EFS: stderr: mount.nfs4: сброс соединения одноранговым узлом: неудачное выполнение команды EFS utils; код: 32

Мой стек:

--- 
  AWSTemplateFormatVersion: "2010-09-09"
  Description: "Template Test"
  Outputs: 
    FileSystemID: 
      Description: "File system ID"
      Value: 
        Ref: FileSystem
  Parameters: 
    VolumeName: 
      Default: myEFSvolume
      Description: "The name to be used for the EFS volume"
      MinLength: "1"
      Type: String
  Resources: 
    ECSCluster: 
      Properties: 
        ClusterName: jenkins-cluster
      Type: "AWS::ECS::Cluster"
    EFSMountTarget1: 
      Properties: 
        FileSystemId: 
          Ref: FileSystem
        SecurityGroups: 
          - "sg-0082cea75ba714505"
        SubnetId: "subnet-0f0b0d3aaada62b6c"
      Type: "AWS::EFS::MountTarget"
    FileSystem: 
      Properties: 
        Encrypted: true
        FileSystemTags: 
          - Key: Name
            Value: 
              Ref: VolumeName
        PerformanceMode: generalPurpose
      Type: "AWS::EFS::FileSystem"
    JenkinsService: 
      Type: "AWS::ECS::Service"
      Properties: 
        Cluster: 
          Ref: ECSCluster
        DesiredCount: 2
        LaunchType: FARGATE
        NetworkConfiguration: 
          AwsvpcConfiguration:
            AssignPublicIp: ENABLED
            SecurityGroups: 
              - "sg-0082cea75ba714505"
            Subnets: 
              - "subnet-0f0b0d3aaada62b6c"
        PlatformVersion: "1.4.0"
        ServiceName: JenkinsService
        
        TaskDefinition: 
          Ref: JenkinsTaskDef
    JenkinsTaskDef: 
      Type: "AWS::ECS::TaskDefinition"
      Properties:
        Cpu: 2048
        Memory: 4096
        Family: efs-example-task-fargate
        NetworkMode: awsvpc
        TaskRoleArn: "arn:xxxxx/ecs"
        ExecutionRoleArn: "arn:xxxxxx:role/ecs"
        RequiresCompatibilities:
          - FARGATE 
        ContainerDefinitions: 
          - Cpu: 1024
            Memory: 2048
            PortMappings:
              - HostPort: 8080
                ContainerPort: 8080
              - HostPort: 50000
                ContainerPort: 50000
            image: "xxxxxxx.dkr.ecr.us-east-1.amazonaws.com/sample:latest"
            mountPoints: 
              - containerPath: /var/jenkins_home
                readOnly: false
                sourceVolume: myEfsVolume
            name: jenkins
        volumes:
          - name: myEfsVolume  
            efsVolumeConfiguration: 
              fileSystemId: 
                Ref: FileSystem
              rootDirectory: /var/jenkins_home
              transitEncryption: ENABLED 
    

Выполняю по документации:

https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_EFSVolumeConfiguration.html


person ramondea    schedule 30.07.2020    source источник


Ответы (2)


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

person AWS PS    schedule 30.07.2020
comment
Вы можете заметить, что ваша подсеть может подключаться к тому EFS. - person Ryan Nguyen; 07.01.2021
comment
Для меня это сработало только тогда, когда я удалил все политики из файловой системы EFS. Имейте в виду, что то, что я сделал, - всего лишь временное решение, предназначенное только для тестирования. - person Ruben Alves; 01.03.2021

Прошло некоторое время, но у меня была такая же проблема, и было немного запутанно понять, как действовать дальше. При создании тома EFS вы выбираете VPC и одну группу безопасности для каждой подсети.

Вам нужно перейти к редактированию этой группы безопасности, чтобы добавить входящее правило type NFS, чтобы разрешить доступ (TCP-порт 2049) к идентификатору группы безопасности вашей кластерной службы ECS, к которой вы хотите разрешить доступ. Для этого просто выберите Custom в поле source и введите идентификатор группы безопасности службы в текстовое поле.

Дополнительную информацию см. В этой статье очень хорошо описывает весь процесс.

Я надеюсь, что это поможет другим людям в будущем.

person fagiani    schedule 22.11.2020