¿Por qué no puedo montar mis volúmenes de Amazon EFS en mis tareas de Amazon ECS?

14 minutos de lectura
0

Cuando monto volúmenes de Amazon Elastic File System (Amazon EFS) en mis tareas de Amazon Elastic Container Service (Amazon ECS), se muestran errores.

Descripción corta

Las configuraciones incorrectas en los siguientes ajustes pueden provocar problemas al montar los volúmenes de Amazon EFS en las tareas de Amazon ECS:

  • Sistema de archivos EFS
  • Grupos de seguridad y listas de control de acceso de la red (ACL de la red)
  • Puntos de enlace de Amazon Virtual Private Cloud (Amazon VPC)
  • Configuración de VPC cruzada cuando el volumen de Amazon EFS está en una VPC diferente a la de sus tareas
  • Permisos y políticas de roles de AWS Identity and Access Management (IAM)

Resolución

Determinación de la causa del problema

Use el runbook AWSSupport-TroubleshootECSTaskFailedToStart para determinar el problema. Debe utilizar el runbook en la misma región de AWS en la que se encuentren los recursos del clúster de Amazon ECS. Además, use el identificador de la tarea fallida más reciente. Si la tarea fallida forma parte de un servicio de Amazon ECS, use la tarea fallida más reciente del servicio. La tarea fallida debe estar visible en ECS:DescribeTasks durante la automatización. De forma predeterminada, las tareas de ECS detenidas están visibles durante 1 hora después de entrar en el estado Detenido.

En función de la salida de la automatización, use uno de los siguientes pasos manuales de solución de problemas.

Comprobación de la configuración del sistema de archivos EFS, el grupo de seguridad y la ACL de la red

Si ha configurado incorrectamente el sistema de archivos EFS, los grupos de seguridad o la ACL de la red, se mostrará un error similar al de los siguientes ejemplos:

«ResourceInitializationError: no se han podido invocar los comandos utils de EFS para configurar los volúmenes de EFS: stderr: b'mount.nfs4: Se ha agotado el tiempo de espera de la conexión': ejecución fallida del comando utils de EFS; código: 32»

Alternativa:

«ResourceInitializationError: no se han podido invocar los comandos utils de EFS para configurar los volúmenes de EFS: stderr: mount.nfs4: Conexión restablecida por el interlocutor: ejecución fallida del comando utils de EFS; código: 32»

Sistema de archivos EFS

Asegúrese de haber creado los objetivos de montaje del sistema de archivos EFS y de que están disponibles en la misma zona de disponibilidad y subred que sus tareas.

Para comprobar la zona de disponibilidad de los objetivos del montaje, siga estos pasos:

  1. Abra la consola de Amazon EFS.
  2. En el panel de navegación, seleccione Sistemas de archivos.
  3. Seleccione su sistema de archivos.
  4. Seleccione Red para ver la lista de los objetivos de montaje existentes y su configuración de red.
  5. Tenga en cuenta las zonas de disponibilidad de la subred en la que el sistema de archivos Amazon EFS ha montado los volúmenes.
  6. Abra la consola de Amazon ECS.
  7. En el panel de navegación, seleccione Clústeres.
  8. Seleccione su clúster.
  9. Seleccione la pestaña Tareas.
  10. Elija su ID de tarea.
  11. En Configuración, elija el ID de subred.
    Nota: Esta acción abre una nueva pestaña en su navegador en la consola de Amazon VPC.
  12. Compruebe la zona de disponibilidad de la subred para comprobar que coincide con la zona de disponibilidad del sistema de archivos Amazon EFS. Si la zona de disponibilidad del sistema de archivos Amazon EFS no coincide, cree un objetivo de montaje en la zona de disponibilidad correcta.

Grupos de seguridad y ACL de la red

El grupo de seguridad de objetivo de montaje del sistema de archivos EFS debe permitir el tráfico NFS de sus tareas a través de TCP en el puerto 2049.

Para comprobar el puerto, siga estos pasos:

  1. Abra la consola de Amazon EFS.
  2. En el panel de navegación, seleccione Sistemas de archivos.
  3. Seleccione el sistema de archivos que desea comprobar.
  4. Seleccione Red para ver la lista de los objetivos de montaje existentes y sus grupos de seguridad asociados. Compruebe las reglas de entrada para asegurarse de que permiten el tráfico TCP desde las direcciones IP de las tareas en el puerto 2049.
  5. (Opcional) Para modificar los grupos de seguridad asociados, elija Administrar.

Se recomienda restringir el acceso al puerto 2049 en función de la procedencia de la conexión. Si todos los clientes están dentro de una subred específica, use el intervalo de direcciones IP de la subred. Si todos los clientes están dentro de la VPC asociada a Amazon EFS, utilice el CIDR de la VPC. Si los clientes provienen de redes remotas, utilice un intervalo de direcciones IP que coincida con esas redes.

Las subredes deben permitir el tráfico de red entre el sistema de archivos Amazon EFS y las tareas de Amazon ECS.

Para comprobar la configuración del tráfico de red, siga estos pasos:

  1. Abra la consola de Amazon VPC.
  2. En el panel de navegación, seleccione Sus VPC.
  3. Seleccione su VPC.
  4. En Detalles, para ACL de la red principal, elija su ID.
  5. Asegúrese de que las reglas de entrada y salida de su VPC permitan el tráfico NFS a través de TCP desde las direcciones IP de las tareas en el puerto 2049.

Comprobación de la configuración de Amazon VPC

Si no ha configurado correctamente su Amazon VPC, se mostrará un error similar al del siguiente ejemplo:

«ResourceInitializationError: no se han podido invocar los comandos utils de EFS para configurar los volúmenes de EFS: stderr: No se ha podido resolver "fs-abcdefgxyz.efs.us-east-1.amazonaws.com". Compruebe que el ID del sistema de archivos es correcto y asegúrese de que la VPC tenga un objetivo de montaje EFS para este ID del sistema de archivos».

Activación de la resolución de DNS y los nombres de host

Debe activar la resolución de DNS y los nombres de host de DNS en el conjunto de opciones del protocolo de configuración dinámica de host (DHCP) de la VPC.

Nota: Los nombres de host DNS están desactivados de forma predeterminada.

Asegurarse de que el servidor DNS personalizado pueda resolver el nombre DNS de su volumen

Se recomienda usar AmazonProvidedDNS para los conjuntos de opciones DHCP de la VPC. Si en su lugar usa un servidor DNS personalizado, debe configurar un reenviador DNS condicional en el archivo de configuración del servidor DNS.

Incluya la siguiente configuración:

  • Todas las consultas de DNS a los recursos de AWS (*.amazonaws.com) deben ir al servidor DNS predeterminado de la VPC.
  • La dirección IP debe ser el intervalo de CIDR IPV4 privado principal que se aprovisiona a su VPC más dos (x.y.z.2) o 169.254.169.253. Por ejemplo, para el CIDR 10.0.0.0/16, la dirección IP predeterminada del servidor DNS de la VPC es 10.0.0.2.

Configuración de los ajustes de un volumen de Amazon EFS que esté en una VPC diferente a la de la instancia de contenedor

Para montar un volumen de Amazon EFS desde una VPC diferente a la de la instancia de contenedor, debe crear una conexión de emparejamiento de VPC entre las VPC. O bien, cree una puerta de enlace de tránsito. A continuación, utilice los siguientes pasos de solución alternativa en función del lugar en el que se ejecuten las tareas.

Instancias de Amazon EC2

Para las tareas que se ejecutan en Amazon Elastic Compute Cloud (Amazon EC2), inicie sesión en su instancia de EC2 y, a continuación, instale botocore.

Nota: efs-utils usa botocore para interactuar con otros servicios de AWS. Para conocer los pasos de instalación, consulte Instalación de botocore en el sitio web de GitHub.

Solo un servicio DNS proporcionado por Amazon en la misma VPC que el sistema de archivos EFS puede resolver el nombre DNS de Amazon EFS. Para codificar la dirección IP del montaje de Amazon EFS en el archivo /etc/hosts de la máquina, ejecute el siguiente comando:

echo "mount-target-IP-address fs-id.efs.region.amazonaws.com" | sudo tee -a /etc/hosts

Nota: Sustituya mount-target-IP-address por la dirección IP de objetivo de montaje, fs-id por el ID del sistema de archivos EFS y region por su región. Los recursos externos a la VPC aún no pueden resolver el nombre de DNS.

Tareas de Fargate

En la siguiente solución alternativa, la VPC A es la VPC en la que se ejecutan las tareas de Amazon ECS y en la que se encuentra el cliente Amazon EFS. La VPC B es la VPC del volumen de Amazon EFS. La solución alternativa utiliza Amazon Route 53 Resolver para no codificar datos. Para obtener información sobre los precios, consulte Precios de Amazon Route 53.

Requisitos previos:

  • Las VPC A y B utilizan el servicio DNS proporcionado por Amazon. O bien, su servidor DNS personalizado usa un reenviador DNS condicional en el archivo de configuración del servidor DNS.
  • Las reglas de entrada del grupo de seguridad de Amazon EFS permiten el tráfico de NFS a través de TCP en el puerto 2049 para el CIDR A de la VPC.

Si sus tareas se ejecutan en AWS Fargate, complete los siguientes pasos:

  1. Cree un punto de enlace entrante de Route 53 en la VPC B y configure los siguientes ajustes:
    Para VPC en region-name Region, seleccione VPC B.
    En el grupo de seguridad para este punto de enlace, seleccione un grupo de seguridad que permita el tráfico TCP y UDP entrante desde la VPC A en el puerto 53.
    Para las direcciones IP, cree dos direcciones IP.
    Nota: Cuando el servidor resuelve el nombre DNS, normalmente devuelve la dirección IP del punto de montaje que se encuentra en la misma zona de disponibilidad que el cliente. Al utilizar esta solución alternativa, las consultas de DNS se originan en el punto de enlace entrante. Como resultado, la zona de disponibilidad del punto de enlace entrante determina la dirección IP devuelta.
    Para devolver una dirección IP única para su sistema de archivos EFS, configure un único punto de montaje. O bien, coloque ambas direcciones IP en la misma zona de disponibilidad. Si selecciona diferentes zonas de disponibilidad, el nombre DNS devolverá una dirección IP diferente en función del punto de enlace entrante que reenvió la consulta.
  2. Cree un punto de enlace saliente de Route 53 en la VPC A y configure los siguientes ajustes:
    Para VPC en region-name Region, seleccione VPC A.
    En el grupo de seguridad para este punto de enlace, seleccione un grupo de seguridad que permita el tráfico TCP y UDP saliente a la VPC B en el puerto 53.
  3. Cree una regla de resolución de Route 53 para reenviar las consultas DNS del nombre DNS de Amazon EFS al DNS de Amazon en la VPC B.
    Configure los siguientes ajustes:
    En Nombre de dominio, introduzca el nombre DNS completo de su sistema de archivos EFS, por ejemplo, fs-abcdef.efs.eu-west-1.amazonaws.com.
    Para las VPC que utilizan esta regla, seleccione VPC A.
    Para el punto de enlace saliente, seleccione el punto de enlace saliente en la VPC A.
    Para las direcciones IP de destino, introduzca las dos direcciones IP del punto de enlace entrante de Route 53 en la VPC B.
  4. Para comprobar que puede montar el volumen de Amazon EFS con el nombre DNS, ejecute los siguientes comandos desde su cliente:
    sudo mount.efs fs-abcdefxyz /mnt
    dig fs-abcdefxyz.efs.region.amazonaws.com
    Nota: Sustituya region por su región y fs-abdcexzy por el ID del volumen del sistema de archivos.

Comprobación de los permisos y políticas de los roles de IAM

Si tiene problemas con las políticas y los permisos de los roles de IAM, se mostrará un error similar al de los siguientes ejemplos:

«ResourceInitializationError: no se han podido invocar los comandos utils de EFS para configurar los volúmenes de EFS: stderr: b'mount.nfs4: acceso denegado por el servidor durante el montaje de 127.0.0.1:/': ejecución fallida del comando utils de EFS; código: 32»

Alternativa:

«ResourceInitializationError: no se han podido invocar los comandos utils de EFS para configurar los volúmenes de EFS: stderr: b'mount.nfs4: mounting fs-xxx.efs.us-east-1.amazonaws.com:/dir ha fallado. Motivo indicado por el servidor: No existe tal archivo o directorio': ejecución fallida del comando utils de EFS; código: 32»

Los permisos que defina en los siguientes recursos pueden controlar el acceso al sistema de archivos EFS:

  • Política de IAM del rol de tarea de Amazon ECS
  • Políticas del sistema de archivos EFS
  • Permisos POSIX que están asignados a su punto de acceso
  • ACL de la red y grupos de seguridad
    Nota: Para comprobar la ACL de la red y los grupos de seguridad, consulte la sección Grupos de seguridad y ACL de la red.

Comprobación de los permisos de las tareas de Amazon ECS

Nota: Para identificar el ID del rol de ejecución de la tarea, compruebe el valor executionRoleARN en el archivo JSON de definición de la tarea. Para obtener más información sobre cómo acceder al archivo JSON, consulte Paso 5: Creación de una definición de tarea.

Asegúrese de que el rol de ejecución de tareas de Amazon ECS tenga los permisos necesarios para localizar y montar un sistema de archivos de Amazon EFS para su tarea.

Siga estos pasos:

  1. Abra la consola de IAM.
  2. En el panel de navegación, seleccione Roles.
  3. En la barra de búsqueda, escriba el nombre del rol de ejecución de la tarea y, a continuación, elija el rol de ejecución de la tarea.
  4. Elija Políticas de permisos para ampliar todas las políticas adjuntas. Asegúrese de que la lista incluye los siguientes permisos:
    elasticfilesystem:ClientMount
    elasticfilesystem:ClientWrite
    elasticfilesystem:DescribeMountTargets
    elasticfilesystem:DescribeFileSystems

Para agregar los permisos al rol de ejecución de tareas, siga estos pasos:

  1. Abra la consola de IAM.
  2. En el panel de navegación, elija Políticas.
  3. Seleccione Crear política.
  4. En Servicio, elija EFS.
  5. Amplíe la sección Acciones permitidas.
  6. Seleccione los permisos ClientMount, ClientWrite, DescribeMountTargets y DescribeFileSystems.
  7. Seleccione los recursos en los que el rol puede realizar estas acciones y, a continuación, elija Siguiente.
  8. Introduzca el nombre y la descripción de la política y, a continuación, elija Crear política.
  9. En el panel de navegación, seleccione Roles.
  10. En la barra de búsqueda, escriba el nombre del rol de ejecución de la tarea y, a continuación, elija el rol de ejecución de la tarea.
  11. Seleccione Agregar permisos y, a continuación, elija Adjuntar políticas.
  12. Seleccione la nueva política.
  13. Elija Agregar permisos.

Comprobación de la política del sistema de archivos EFS

Siga estos pasos:

  1. Abra la consola de Amazon EFS.

  2. Seleccione Sistemas de archivos y, a continuación, seleccione su sistema de archivos.

  3. Asegúrese de que la política del sistema de archivos permita al rol de ejecución de tareas para montar el volumen EFS.
    Ejemplo de política:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ECS Tasks - EFS Access",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::account-id:role/ecs-task-execution-role-name"
          },
          "Action": [
            "elasticfilesystem:ClientMount",
            "elasticfilesystem:ClientWrite",
            "elasticfilesystem:DescribeMountTargets",
            "elasticfilesystem:DescribeFileSystems",
          ]
        }
      ]
    }
  4. Para agregar más permisos de IAM a su política, agregue una nueva política de sistema de archivos. O bien, agregue instrucciones para permitir a sus clientes utilizar su volumen de Amazon EFS para modificar la política existente.

Comprobación de los permisos de POSIX

Si usa puntos de acceso con una ruta de directorio raíz personalizada, asegúrese de tener permisos de creación de directorio raíz y usuario POSIX. Para obtener más información sobre la solución de problemas, consulte Errores en el montaje con un punto de acceso.

Información relacionada

Creación de sistemas de archivos EFS

Administración de los objetivos de montaje

¿Cómo puedo montar un sistema de archivos de Amazon EFS en un contenedor o tarea de Amazon ECS que se ejecuta en Fargate?

El montaje del sistema de archivos falla inmediatamente después de la creación del sistema de archivos

Guía para desarrolladores sobre el uso de Amazon EFS con Amazon ECS y AWS Fargate (parte 2)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 meses