¿Cómo puedo montar un volumen de Amazon EFS en AWS Batch en un entorno de computación administrado?

5 minutos de lectura
0

Quiero montar un volumen de Amazon Elastic File System (Amazon EFS) en AWS Batch. ¿Cómo puedo hacerlo en un entorno de computación administrado sin crear imágenes de máquina de Amazon (AMI) personalizadas?

Descripción breve

Nota: AWS Batch ahora admite el montaje de volúmenes de EFS directamente en los contenedores que se crean, como parte de la definición del trabajo. Este es un método más sencillo que la resolución indicada en este artículo. Para obtener más información, consulte Especificación del sistema de archivos de Amazon EFS en su definición de trabajo y el parámetro efsVolumeConfiguration en Propiedades de contenedor.

Use una plantilla de lanzamiento para montar un volumen de Amazon EFS en una instancia de EC2 y, a continuación, en un contenedor. Esto también le permite montar el volumen de EFS en contenedores mediante AWS Batch sin crear una AMI personalizada.

Importante: Al crear un volumen de Amazon EFS, utilice la misma Amazon Virtual Private Cloud (Amazon VPC) y las mismas subredes que están asignadas a su entorno de computación.

Resolución

Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

1.    Cree un sistema de archivos de Amazon EFS.

2.    Anote el ID del sistema de archivos (por ejemplo: fs-12345678). Necesita el ID del sistema de archivos para ejecutar la plantilla de lanzamiento.

3.    Cree una plantilla de lanzamiento que incluya una sección de datos de usuario y utilice el formato de archivo de varias partes MIME. Para obtener más información, consulte Mime Multi Part Archive en el sitio web de Cloud-init.

Ejemplo de archivo MIME de varias partes

Nota: El siguiente archivo MIME de varias partes de ejemplo configura el recurso de computación para instalar el paquete amazon-efs-utils. A continuación, el archivo monta un sistema de archivos de Amazon EFS existente en /mnt/efs:.

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

packages:
- amazon-efs-utils

runcmd:
- file_system_id_01=fs-12345678
- efs_directory=/mnt/efs

- mkdir -p ${efs_directory}
- echo "${file_system_id_01}:/ ${efs_directory} efs tls,_netdev" >> /etc/fstab
- mount -a -t efs defaults

--==MYBOUNDARY==--

Importante: Sustituya fs-12345678 por el ID de su sistema de archivos.

4.    Cree un archivo llamado mount-efs.json.

Nota: Ajuste el tamaño del volumen según sus necesidades.

**Ejemplo de plantilla de lanzamiento ** de Amazon Linux 2

{
  "LaunchTemplateName": "user-data",
  "LaunchTemplateData": {
    "BlockDeviceMappings": [
      {
        "Ebs": {
          "DeleteOnTermination": true,
          "VolumeSize": 30,
          "VolumeType": "gp2"
        },
        "DeviceName": "/dev/xvda"
      }
    ],
    "UserData": "TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PU1ZQk9VTkRBUlk9PSIKCi0tPT1NWUJPVU5EQVJZPT0KQ29udGVudC1UeXBlOiB0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0idXMtYXNjaWkiCgpwYWNrYWdlczoKLSBhbWF6b24tZWZzLXV0aWxzCgpydW5jbWQ6Ci0gZmlsZV9zeXN0ZW1faWRfMDE9ZnMtODc0MTc4MDYgICAgIAotIGVmc19kaXJlY3Rvcnk9L21udC9lZnMKCi0gbWtkaXIgLXAgJHtlZnNfZGlyZWN0b3J5fQotIGVjaG8gIiR7ZmlsZV9zeXN0ZW1faWRfMDF9Oi8gJHtlZnNfZGlyZWN0b3J5fSBlZnMgdGxzLF9uZXRkZXYiID4+IC9ldGMvZnN0YWIKLSBtb3VudCAtYSAtdCBlZnMgZGVmYXVsdHMKCi0tPT1NWUJPVU5EQVJZPT0tLQ=="
  }
}

**Ejemplo de plantilla de lanzamiento ** de Amazon Linux 1

{
  "LaunchTemplateName": "userdata",
  "LaunchTemplateData": {
    "BlockDeviceMappings": [
      {
        "Ebs": {
          "DeleteOnTermination": true,
          "VolumeSize": 8,
          "VolumeType": "gp2"
        },
        "DeviceName": "/dev/xvda"
      },
      {
        "Ebs": {
          "DeleteOnTermination": true,
          "VolumeSize": 22,
          "VolumeType": "gp2"
        },
        "DeviceName": "/dev/xvdcz"
      }
    ],
    "UserData": "TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PU1ZQk9VTkRBUlk9PSIKCi0tPT1NWUJPVU5EQVJZPT0KQ29udGVudC1UeXBlOiB0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0idXMtYXNjaWkiCgpwYWNrYWdlczoKLSBhbWF6b24tZWZzLXV0aWxzCgpydW5jbWQ6Ci0gZmlsZV9zeXN0ZW1faWRfMDE9ZnMtODc0MTc4MDYgICAgIAotIGVmc19kaXJlY3Rvcnk9L21udC9lZnMKCi0gbWtkaXIgLXAgJHtlZnNfZGlyZWN0b3J5fQotIGVjaG8gIiR7ZmlsZV9zeXN0ZW1faWRfMDF9Oi8gJHtlZnNfZGlyZWN0b3J5fSBlZnMgdGxzLF9uZXRkZXYiID4+IC9ldGMvZnN0YWIKLSBtb3VudCAtYSAtdCBlZnMgZGVmYXVsdHMKCi0tPT1NWUJPVU5EQVJZPT0tLQ=="
  }
}

Importante: Si agrega datos de usuario a una plantilla de lanzamiento en la consola de Amazon Elastic Compute Cloud (Amazon EC2), asegúrese de realizar una de las siguientes acciones:
Pegue los datos de usuario como texto sin formato.
-o-
Suba los datos de usuario desde un archivo.

Si utiliza la AWS CLI o un AWS SDK, primero debe codificar en base64 los datos de usuario. A continuación, envíe esa cadena como el valor del parámetro UserData cuando llame a CreateLaunchTemplate, como se muestra en la plantilla JSON de ejemplo.

5.    Ejecute el siguiente comando de AWS CLI para crear una plantilla de lanzamiento basada en el archivo mount-efs.json que creó en el paso 4:

aws ec2 --region us-east-1 create-launch-template --cli-input-json file://mount-efs.json

Nota: Sustituya us-east-1 por su región de AWS.

Ejemplo de salida del comando create-launch-template

{
  "LaunchTemplate": {
    "LaunchTemplateId": "lt-06935eb650e40f886",
    "LaunchTemplateName": "user-data",
    "CreateTime": "2019-12-26T09:40:46.000Z",
    "CreatedBy": "arn:aws:iam::12345678999:user/alice",
    "DefaultVersionNumber": 1,
    "LatestVersionNumber": 1
  }
}

6.    Cree un nuevo entorno de computación y asocie ese entorno a su plantilla de lanzamiento.

Nota: Cuando AWS Batch genera instancias, el volumen de Amazon EFS ahora se monta en las instancias.

7.    Compruebe si el volumen de Amazon EFS está montado con la instancia de contenedor usando SSH para conectarse a la instancia lanzada por AWS Batch. A continuación, ejecute el siguiente comando df de Linux:

$ df -h

Ejemplo de salida del comando df

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G   92K  3.9G   1% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/xvda1       50G  854M   49G   2% /
127.0.0.1:/     8.0E     0  8.0E   0% /mnt/efs

Nota: /mnt/efs se monta automáticamente.

8.    Cree una definición de trabajo en AWS Batch que incluya el volumen y el punto de montaje.

Ejemplo de definición de trabajo de AWS Batch

{
  "jobDefinitionName": "userdata",
  "jobDefinitionArn": "arn:aws:batch:us-east-1:12345678999:job-definition/userdata:1",
  "revision": 1,
  "status": "ACTIVE",
  "type": "container",
  "parameters": {},
  "containerProperties": {
    "image": "busybox",
    "vcpus": 1,
    "memory": 1024,
    "command": [],
    "volumes": [
      {
        "host": {
          "sourcePath": "/mnt/efs"
        },
        "name": "efs"
      }
    ],
    "environment": [],
    "mountPoints": [
      {
        "containerPath": "/mnt/efs",
        "sourceVolume": "efs"
      }
    ],
    "ulimits": [],
    "resourceRequirements": []
  }
}

9.    Envíe un trabajo de AWS Batch usando la definición de trabajo que creó en el paso 8.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años