Comment puis-je monter un système de fichiers Amazon FSx for Lustre existant sur AWS Batch dans un environnement de calcul géré ?

Dernière mise à jour : 23/02/2022

Je souhaite monter un système de fichiers Amazon FSx for Lustre existant sur AWS Batch dans un environnement de calcul géré. Est-il possible de le configurer sans créer aucune Amazon Machine Image (AMI) personnalisée ?

Brève description

Utilisez un modèle de lancement Amazon Elastic Compute Cloud (Amazon EC2) avec AWS Batch. Cette configuration vous autorise à monter un système de fichiers Amazon FSx for Lustre existant sur vos conteneurs sans créer aucune AMI personnalisé.

Important : lorsque vous créez le système de fichiers, 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.

Résolution

1.    Créez un système de fichiers Amazon FSx for Lustre. Choisissez ensuite un type de déploiement de système de fichiers permanents ou scratch.

Conseil : utilisez des systèmes de fichiers persistants pour le stockage et les charges de travail à plus long terme. Utilisez des systèmes de fichiers scratch pour le stockage temporaire et le traitement des données à plus court terme.

2.    Copiez 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, consultez Archive MIME en plusieurs parties sur le site Web Cloud-init.

Exemple de fichier MIME en plusieurs parties Amazon Linux 2

Important : remplacez fs-12345678 par l'ID de votre système de fichiers. Remplacez us-east-1 par votre région AWS. Remplacez xxxxxxxx par le nom de votre montage Amazon FSx à huit caractères.

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

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

runcmd:
- file_system_id_01=fs-09c9ae4593b53a741
- region=us-east-1
- fsx_directory=/scratch
- fsx_mount_name=xxxxxxxx
- amazon-linux-extras install -y lustre2.10
- mkdir -p ${fsx_directory}
- mount -t lustre -o noatime,flock ${file_system_id_01}.fsx.${region}.amazonaws.com@tcp:/${fsx_mount_name} ${fsx_directory}

--==MYBOUNDARY==--

Remarque : cet exemple de fichier MIME en plusieurs parties configure la ressource de calcul pour installer le package Lustr 2.10 à partir de la bibliothèque Extras. Le fichier monte également un système de fichiers Amazon FSx for Lustre existant sur /scratch. Pour obtenir des instructions d'installation pour d'autres distributions Linux, consultez Installation du client Lustre.

4.    Lancez le modèle pour appeler les données utilisateur.

5.    Créez un fichier appelé mount-fsx-lustre.json.

Remarque : ajustez la taille du volume en fonction de votre cas d'utilisation.

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=="
  }
}

Remarque : si vous ajoutez des données utilisateur à un modèle de lancement dans la console Amazon EC2, procédez comme suit : collez les données utilisateur en texte brut ou chargez les données utilisateur à partir d'un fichier.

Si vous utilisez AWS Command Line Interface (AWS CLI) ou un kit SDK AWS, vous devez d'abord encoder les données utilisateur en base64. Envoyez ensuite cette chaîne en tant que valeur du paramètre UserData lorsque vous appelez CreateLaunchTemplate.

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

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

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

Exemple de sortie de commande create-launch-template

{
  "LaunchTemplate": {
    "LaunchTemplateId": "lt-08cb09d54bcf551f3",
    "LaunchTemplateName": "fsx-test",
    "CreateTime": "2020-06-30T17:13:22.000Z",
    "CreatedBy": "arn:aws:iam::12345678999:user/test",
    "DefaultVersionNumber": 1,
    "LatestVersionNumber": 1
  }
}

7.    Créez un nouvel environnement de calcul et associez-le à votre modèle de lancement.

Important : par défaut, les environnements de calcul gérés par AWS Batch utilisent une version approuvée de l'AMI optimisée pour Amazon Elastic Container Service (Amazon ECS) pour les ressources de calcul. Vous devez définir explicitement l'ID d'AMI pour les AMI Amazon Linux 2 optimisées pour Amazon ECS et les autres distributions Linux.

Lorsque AWS Batch met en place des instances, le système de fichiers Amazon FSx for Lustre est désormais monté sur les instances de conteneur.

8.    Vérifiez si le système de fichiers est monté avec l'instance de conteneur en utilisant SSH pour vous connecter à l'instance lancée par AWS Batch. Exécutez ensuite la commande Linux df suivante :

$ df -h

Exemple de sortie de commande df

Filesystem                                  Size      Used    Avail    Used%   Mounted on
devtmpfs                                    3.9G        0       3.9G     0%       /dev
tmpfs                                       3.9G        0       3.9G     0%       /dev/shm
tmpfs                                       3.9G     448K       3.9G     1%       /run
tmpfs                                       3.9G        0       3.9G     0%       /sys/fs/cgroup
/dev/xvda1                                   30G     4.2G        25G    15%       /
172.31.79.79@tcp:/xxxxxxxx                  1.1T     4.5M       1.1T     1%       /scratch
tmpfs                                       798M       0        798M     0%       /run/user/1000

Remarque : /scratch est monté automatiquement.

9.    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": "Fsx-sample",
  "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": "/scratch"
        },
        "name": "Scratch"
      }
    ],
    "environment": [],
    "mountPoints": [
      {
        "containerPath": "/scratch",
        "sourceVolume": "Scratch"
      }
    ],
    "ulimits": [],
    "resourceRequirements": []
  }
}

10.    Envoyez une tâche AWS Batch en utilisant la définition de tâche créée à l'étape 9.


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


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