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

Date de la dernière mise à jour : 12/03/2021

Je souhaite 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

Pour monter un volume Amazon EFS sur vos conteneurs, via AWS Batch, sans créer d'AMI personnalisée, utilisez un modèle de lancement.

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

Résolution

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de 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 partitionné. Pour plus d'informations, consultez la section Mime Multi Part Archive sur le site Web Cloud-init.

Exemple de fichier MIME partitionné

Remarque : L'exemple suivant de fichier MIME en plusieurs parties 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éé à 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.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?