Comment monter un volume Amazon EFS dans AWS Batch au sein d'un environnement de calcul géré ?

Lecture de 5 minute(s)
0

Je veux monter un volume Amazon Elastic File System (Amazon EFS) dans AWS Batch. Comment puis-je le faire dans un environnement de calcul géré sans créer d'images Amazon Machine Image (AMI) personnalisées ?

Brève description

Remarque : dans le cadre de la définition de tâche, AWS Batch prend désormais en charge le montage des volumes EFS directement sur les conteneurs créés. Il s'agit d'une méthode plus simple que la solution décrite dans cet article. Pour plus d'informations, veuillez consulter la section Spécification d'un système de fichiers Amazon EFS dans votre définition de tâche ainsi que le paramètre efsVolumeConfiguration dans les propriétés du conteneur.

Utilisez un modèle de lancement pour monter un volume Amazon EFS sur une instance EC2, puis sur un conteneur. Ainsi, il vous sera également possible de monter le volume EFS sur des conteneurs via AWS Batch sans créer d'AMI personnalisée.

Important : lorsque vous créez un volume Amazon EFS, utilisez le même Amazon Virtual Private Cloud (Amazon VPC) et les mêmes sous-réseaux que ceux attribués à votre environnement de calcul.

Solution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente d'AWS CLI .

1.    Créez un système de fichiers Amazon EFS.

2.    Notez l'ID du système de fichiers (par exemple : fs-12345678). Vous avez besoin de l'ID du système de fichiers pour exécuter votre modèle de lancement.

3.    Créez un modèle de lancement qui inclut une section dédiée aux données utilisateur et qui utilise le format de fichier MIME en plusieurs parties. Pour plus d'informations, veuillez consulter la section Archive MIME multi-partie sur le site Web Cloud-init (Langue Français non garanti).

Exemple de fichier MIME multi-partie

Remarque : l'exemple suivant de fichier MIME multi-partie configure la ressource de calcul pour installer le package amazon-efs-utils. Ensuite, le fichier monte un système de fichiers Amazon EFS existant sur /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==--

Important : Remplacez fs-12345678 par l'ID de votre système de fichiers.

4.    Créez un fichier appelé mount-efs.json.

Remarque : ajustez la taille de votre volume en fonction de vos besoins.

Exemple de modèle de lancement Amazon Linux 2

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

Exemple de modèle de lancement 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=="
  }
}

Important : Si vous ajoutez des données utilisateur à un modèle de lancement dans la console Amazon Elastic Compute Cloud (Amazon EC2), assurez-vous d'effectuer l'une des opérations suivantes :
Collez les données utilisateur sous forme de texte brut.
-ou-
Chargez les données utilisateur à partir d'un fichier.

Si vous utilisez l'interface de ligne de commande AWS (AWS CLI) ou un kit SDK AWS, vous devez d'abord encoder les données utilisateur en base64. Ensuite, soumettez cette chaîne en tant que valeur du paramètre UserData lorsque vous appelez CreateLaunchTemplate comme on le voit dans l'exemple de modèle JSON.

5.    Exécutez la commande AWS CLI suivante pour créer un modèle de lancement basé sur le fichier mount-efs.json que vous avez créé lors de l'étape 4 :

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

Remarque : remplacez us-east-1 par votre propre région AWS.

Exemple de sortie de commande 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.    Créez un nouvel environnement de calcul et associez-le à votre modèle de lancement.

Remarque : le volume Amazon EFS est désormais monté sur les instances quand AWS Batch met en service des instances.

7.    Vérifiez si le volume Amazon EFS est monté avec l'instance de conteneur en utilisant SSH pour vous connecter à l'instance lancée par AWS Batch. Ensuite, exécutez la commande Linux df suivante :

$ df -h

Exemple de sortie de commande 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

Remarque : /mnt/efs est monté automatiquement.

8.    Créez une définition de tâche dans AWS Batch qui inclut le volume et le point de montage.

Exemple de définition de tâche 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.    Soumettez une tâche AWS Batch en utilisant la définition de tâche créée à l'étape 8.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans