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

6 minutos de lectura
0

Quiero montar un sistema de archivos de Amazon Elastic File System (Amazon EFS) en un contenedor o tarea de Amazon Elastic Container Service (Amazon ECS) que se ejecute en AWS Fargate.

Breve descripción

Para montar un sistema de archivos de Amazon EFS en una tarea o contenedor de Fargate, primero debe crear una definición de tarea. A continuación, ponga la definición de la tarea a disposición de los contenedores de la tarea en todas las zonas de disponibilidad de su región de AWS. Sus tareas de Fargate utilizarán Amazon EFS para montar automáticamente el sistema de archivos en las tareas que especifique en la definición de la tarea.

Importante: La solución siguiente es válida para la versión 1.4.0 o posterior de la plataforma Fargate, que cuenta con un almacenamiento persistente que puede definir a nivel de tarea y contenedor en Amazon ECS. Las versiones 1.3.0 o anteriores de la plataforma Fargate no admiten el almacenamiento persistente mediante Amazon EFS.

Antes de completar los pasos del apartado Resolución, debe disponer de lo siguiente:

Resolución

Creación y configuración de un sistema de archivos de Amazon EFS

1.    Cree un sistema de archivos de Amazon EFS y, a continuación, anote el ID de EFS y el ID del grupo de seguridad.

Nota: El sistema de archivos de Amazon EFS, el clúster de Amazon ECS y las tareas de Fargate deben estar en la misma VPC.

2.    Para permitir las conexiones entrantes en el puerto 2049 (sistema de archivos de red o NFS) desde el grupo de seguridad asociado a su tarea o servicio de Fargate, edite las reglas del grupo de seguridad de su sistema de archivos de EFS.

3.    Actualice el grupo de seguridad de su servicio de Amazon ECS para permitir las conexiones salientes en el puerto 2049 al grupo de seguridad del sistema de archivos de Amazon EFS.

Creación de una definición de tarea

1.    Abra la consola de Amazon ECS.

2.    En el panel de navegación, elija Definiciones de tareas y, a continuación, Crear una nueva definición de tarea.

3.    En el apartado Seleccione la compatibilidad con el tipo de lanzamiento, elija FARGATE y Paso siguiente.

4.    En el apartado Configurar definiciones de tareas y contenedores, en Nombre de definición de tarea, introduzca un nombre para la definición de la tarea.

5.    En el apartado Volúmenes, seleccione Agregar volumen.

6.    En Nombre, introduzca un nombre para su volumen.

7.    En Tipo de volumen, escriba EFS.

8.    En ID del sistema de archivos, introduzca el ID de su sistema de archivos de Amazon EFS.

Nota: Puede especificar opciones personalizadas para Directorio raíz, Cifrado en tránsito y Autorización de IAM de EFS. También puede aceptar el valor predeterminado, donde «/» es el directorio raíz.

9.    Seleccione Añadir.

10.    En el apartado Definiciones de contenedores, elija Agregar contenedor.

11.    En el apartado ALMACENAMIENTO Y REGISTRO, en el subapartado Puntos de montaje, seleccione el volumen que creó para Volumen de origen en el paso 5.

12.    En Ruta del contenedor, elija la ruta del contenedor.

13.    (Opcional) En el apartado ENTORNO, en Punto de entrada, introduzca su punto de entrada.

14.    En Comando, introduzca el comando [df ,-h] para mostrar el sistema de archivos montado. 

Nota: Puede utilizar el punto de entrada y el comando para comprobar si el sistema de archivos de Amazon EFS se ha montado correctamente. De forma predeterminada, el contenedor se cierra una vez que el comando df-h se haya ejecutado correctamente. El ejemplo de definición de tareas en JSON del paso 16 usa un bucle de tiempo infinito para mantener la tarea en ejecución.

15.    Seleccione Añadir.

16.    Rellene los campos restantes en el asistente de definición de tareas y, a continuación, seleccione Crear.

En el ejemplo siguiente, la definición de la tarea crea un volumen de datos denominado efs-test. El contenedor nginx monta el volumen de datos del host en la ruta Any_Container_Path.

{
    "family": "sample-fargate-test",
    "networkMode": "awsvpc",
    "executionRoleArn": "arn:aws:iam::1234567890:role/ecsTaskExecutionRole",
    "containerDefinitions": [
        {
            "name": "fargate-app",
            "image": "nginx",
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "entryPoint": [
                "sh",
		"-c"
            ],
            "command": [
                "df -h && while true; do echo \"RUNNING\"; done"
            ],
            "mountPoints": [
                {
                    "sourceVolume": "efs-test",
                    "containerPath": "Any_Container_Path"
                }
            ],
            "logConfiguration": {
              "logDriver": "awslogs",
              "options": {
                "awslogs-group": "AWS_LOG_GROUP_PATH",
                "awslogs-region": "AWS_REGION",
                "awslogs-stream-prefix": "AWS_STREAM_PREFIX"
              }
            }
        }
    ],

    "volumes": [
        {
            "name": "efs-test",
            "efsVolumeConfiguration": {
                "fileSystemId": "fs-123xx4x5"
            }
        }
    ],

    "requiresCompatibilities": [
           "FARGATE"
       ],

    "cpu": "256",
    "memory": "512"
}

Nota: Sustituya fileSystemId, logConfiguration, containerPath y otros valores de marcador de posición con los valores de su configuración personalizada. Además, asegúrese de que la definición de la tarea tenga una función de ejecución Amazon Resource Name (ARN) que admita el controlador de registro awslogs.

Ejecución de una tarea de Fargate y comprobación de los registros de tareas

1.    Ejecute una tarea de Fargate con la definición de tarea que creó anteriormente.

Importante: Asegúrese de ejecutar la tarea en la versión 1.4.0 de la plataforma Fargate.

2.    Para verificar si el sistema de archivos de Amazon EFS está montado correctamente en el contenedor de Fargate, compruebe sus registros de tareas.

El resultado de df-h es similar al siguiente:

2020-10-27 15:15:35
Filesystem 1K-blocks Used Available Use% Mounted on

2020-10-27 15:15:35
overlay 30832548 9859324 19383976 34% /

2020-10-27 15:15:35
tmpfs 65536 0 65536 0% /dev

2020-10-27 15:15:35
shm 2018788 0 2018788 0% /dev/shm

2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /sys/fs/cgroup

2020-10-27 15:15:35
fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ 9007199254739968 0 9007199254739968 0% /Any_Container_Path

2020-10-27 15:15:35
/dev/xvdcz 30832548 9859324 19383976 34% /etc/hosts

2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /proc/acpi

2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /sys/firmware

2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /proc/scsi

RUNNING

Información relacionada

Security in Amazon EFS

Tutorial: Using Amazon EFS file systems with Amazon ECS using the classic console

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años