Actions de bootstrap personnalisées - AWS ParallelCluster

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Actions de bootstrap personnalisées

Si vous définissez les paramètres de OnNodeStartconfiguration HeadNodeCustomActions//, AWS ParallelCluster exécute du code arbitraire immédiatement après le démarrage du nœud. Si vous définissez les paramètres de OnNodeConfiguredconfiguration HeadNodeCustomActions//, AWS ParallelCluster exécute le code une fois que la configuration du nœud est correctement terminée.

À partir de la AWS ParallelCluster version 3.4.0, le code peut être exécuté après la mise à jour du nœud principal, si vous définissez les paramètres de OnNodeUpdatedconfiguration HeadNodeCustomActions//.

Dans la plupart des cas, ce code est stocké dans Amazon Simple Storage Service (Amazon S3) et accessible via une connexion HTTPS. Le code est exécuté root et peut être exécuté dans n'importe quel langage de script pris en charge par le système d'exploitation du cluster. Le code est souvent en Bash ou en Python.

Note

À partir de AWS ParallelCluster la version 3.7.0, le ImdsSupportparamètre Imdscluster/ par défaut estv2.0.

Lorsque vous créez un nouveau cluster pour effectuer une mise à niveau vers la version 3.7.0 et les versions ultérieures, mettez à jour vos scripts d'action bootstrap personnalisés pour qu'ils soient compatibles avec IMDSv2 ou définissez Imds/ImdsSupportto v1.0 dans votre fichier de configuration de cluster.

Avertissement

Vous êtes responsable de la configuration des scripts et arguments personnalisés, comme décrit dans le modèle de responsabilité partagée. Vérifiez que vos scripts et arguments bootstrap personnalisés proviennent de sources fiables offrant un accès complet aux nœuds de votre cluster.

Avertissement

AWS ParallelCluster ne prend pas en charge l'utilisation de variables internes fournies par le biais du /etc/parallelcluster/cfnconfig fichier. Ce fichier sera peut-être supprimé dans le cadre d'une future version.

OnNodeStartles actions sont appelées avant le lancement de toute action d'amorçage du déploiement d'un nœud, telle que la configuration de NAT, d'Amazon Elastic Block Store (Amazon EBS) ou du planificateur. OnNodeStartles actions bootstrap peuvent inclure la modification du stockage, l'ajout d'utilisateurs supplémentaires et l'ajout de packages.

Note

Si vous DirectoryServiceconfigurez un OnNodeStartscript HeadNode/CustomActions/pour votre cluster, AWS ParallelCluster configurez DirectoryService et redémarrez lesssd, avant qu'il n'exécute le OnNodeStart script.

OnNodeConfiguredles actions sont appelées une fois les processus d'amorçage du nœud terminés. OnNodeConfiguredles actions correspondent aux dernières actions effectuées avant qu'une instance ne soit considérée comme entièrement configurée et complète. Certaines OnNodeConfigured actions incluent la modification des paramètres du planificateur, la modification du stockage et la modification des packages. Vous pouvez transmettre des arguments aux scripts en les spécifiant lors de la configuration.

OnNodeUpdatedles actions sont appelées une fois que la mise à jour du nœud principal est terminée et que le planificateur et le stockage partagé sont alignés sur les dernières modifications de configuration du cluster.

Lorsque OnNodeStart les actions OnNodeConfigured personnalisées réussissent, le succès est indiqué par le code de sortie zéro (0). Tout autre code de sortie indique que le bootstrap de l'instance a échoué.

Lorsque les actions OnNodeUpdated personnalisées réussissent, leur réussite est signalée par le code de sortie zéro (0). Tout autre code de sortie indique que la mise à jour a échoué.

Note

Si vous configurez OnNodeUpdated, vous devez restaurer manuellement les OnNodeUpdated actions à leur état précédent en cas d'échec de mise à jour.

Si une action OnNodeUpdated personnalisée échoue, la mise à jour revient à l'état précédent. Toutefois, l'OnNodeUpdatedaction n'est exécutée qu'au moment de la mise à jour et non au moment de la restauration de la pile.

Vous pouvez spécifier différents scripts pour le nœud principal et pour chaque file d'attente, dans les sections de CustomActionsconfiguration HeadNodeSchedulingSlurmQueues/CustomActionset//. OnNodeUpdatedne peut être configuré que dans la HeadNode section.

Note

Avant AWS ParallelCluster la version 3.0, il n'était pas possible de spécifier des scripts différents pour les nœuds de tête et de calcul. Veuillez consulter Passer de la version AWS ParallelCluster 2.x à la version 3.x.

Configuration

Les paramètres de configuration suivants sont utilisés pour définir les HeadNodeOnNodeConfiguredactions OnNodeStartet OnNodeConfiguredles arguments Scheduling/CustomActions/OnNodeStart& & et//. CustomActionsOnNodeUpdated

HeadNode: [...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: # Script URL. This is run after all the bootstrap scripts are run Script: s3://bucket-name/on-node-configured.sh Args: - arg1 OnNodeUpdated: # Script URL. This is run after the head node update is completed. Script: s3://bucket-name/on-node-updated.sh Args: - arg1 # Bucket permissions Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false Scheduling: Scheduler: slurm [...] SlurmQueues: - Name: queue1 [...] CustomActions: OnNodeStart: Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: Script: s3://bucket-name/on-node-configured.sh Args: - arg1 Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

En utilisant le Sequence paramètre (ajouté dans la AWS ParallelCluster version 3.6.0) :

HeadNode: [...] CustomActions: OnNodeStart: # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...] OnNodeConfigured: # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-configured1.sh Args: - arg1 - Script: s3://bucket-name/on-node-configured2.sh Args: - arg1 [...] OnNodeUpdated: # Script URLs. The scripts are run in the same order as listed in the configuration, after the head node update is completed. Sequence: - Script: s3://bucket-name/on-node-updated1.sh Args: - arg1 - Script: s3://bucket-name/on-node-updated2.sh Args: - arg1 [...] # Bucket permissions Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false Scheduling: Scheduler: slurm [...] SlurmQueues: - Name: queue1 [...] CustomActions: OnNodeStart: # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...] OnNodeConfigured: # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run Sequence: - Script: s3://bucket-name/on-node-configured1.sh Args: - arg1 - Script: s3://bucket-name/on-node-configured2.sh Args: - arg1 [...] Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

Le Sequence paramètre est ajouté à partir de la AWS ParallelCluster version 3.6.0. Lorsque vous le spécifiezSequence, vous pouvez répertorier plusieurs scripts pour une action personnalisée. AWS ParallelCluster continue de prendre en charge la configuration d'une action personnalisée avec un seul script, sans inclureSequence.

AWS ParallelCluster ne permet pas d'inclure à la fois un seul script et Sequence pour la même action personnalisée. Par exemple, AWS ParallelCluster échoue si vous spécifiez la configuration suivante.

[...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/on-node-start.sh Args: - arg1 # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...]

Arguments

Note

Dans la AWS ParallelCluster version 2.x, les $1 arguments étaient réservés, pour stocker l'URL du script personnalisé. Si vous souhaitez réutiliser les scripts bootstrap personnalisés créés pour AWS ParallelCluster 2.x avec AWS ParallelCluster 3.x, vous devez les adapter en tenant compte du décalage des arguments. Veuillez consulter Passer de la version AWS ParallelCluster 2.x à la version 3.x.

Exemple de cluster avec des actions bootstrap personnalisées

Les étapes suivantes créent un script simple à exécuter une fois le nœud configuré, qui installe les wget packages R, curl et dans les nœuds du cluster.

  1. Créez un script.

    #!/bin/bash echo "The script has $# arguments" for arg in "$@" do echo "arg: ${arg}" done yum -y install "${@:1}"
  2. Téléchargez le script avec les autorisations appropriées sur Amazon S3. Si les autorisations de lecture publiques ne vous conviennent pas, utilisez HeadNodeles sections de SlurmQueuesconfiguration Scheduling//S3Accesset/. Iam Pour plus d’informations, consultez Utilisation des services dans Amazon S3.

    $ aws s3 cp --acl public-read /path/to/myscript.sh s3://<bucket-name>/myscript.sh
    Important

    Si le script a été modifié sous Windows, les fins de ligne doivent passer de CRLF à LF avant que le script ne soit chargé sur Amazon S3.

  3. Mettez à jour la AWS ParallelCluster configuration pour inclure la nouvelle OnNodeConfigured action.

    CustomActions: OnNodeConfigured: Script: https://<bucket-name>.s3.<region>.amazonaws.com/myscript.sh Args: - "R" - "curl" - "wget"

    Si le bucket ne dispose pas d'une autorisation de lecture publique, s3 utilisez-le comme protocole URL.

    CustomActions: OnNodeConfigured: Script: s3://<bucket-name>/myscript.sh Args: - "R" - "curl" - "wget"
  4. Lancement du cluster

    $ pcluster create-cluster --cluster-name mycluster \ --region <region> --cluster-configuration config-file.yaml
  5. Vérifiez la sortie.

    • Si vous avez ajouté des actions personnalisées à la HeadNode configuration, connectez-vous au nœud principal et vérifiez le cfn-init.log fichier qui s'y trouve /var/log/cfn-init.log en exécutant la commande suivante :

      $ less /var/log/cfn-init.log 2021-09-03 10:43:54,588 [DEBUG] Command run postinstall output: The script has 3 arguments arg: R arg: curl arg: wget Loaded plugins: dkms-build-requires, priorities, update-motd, upgrade-helper Package R-3.4.1-1.52.amzn1.x86_64 already installed and latest version Package curl-7.61.1-7.91.amzn1.x86_64 already installed and latest version Package wget-1.18-4.29.amzn1.x86_64 already installed and latest version Nothing to do
    • Si vous avez ajouté des actions personnalisées au SlurmQueues paramètre, vérifiez l'cloud-init.logemplacement /var/log/cloud-init.log dans un nœud de calcul. CloudWatch À utiliser pour consulter ces journaux.

    Vous pouvez consulter ces deux journaux dans la CloudWatch console Amazon. Pour plus d’informations, consultez Intégration avec Amazon CloudWatch Logs avec Amazon Logs.

Exemple de mise à jour d'un script bootstrap personnalisé pour IMDSv2

Dans l'exemple suivant, nous mettons à jour un script d'action bootstrap personnalisé qui a été utilisé avec IMDSv1 pour être utilisé avec IMDSv2. Le script IMDSv1 récupère les métadonnées de l'ID AMI de l'instance Amazon EC2.

#!/bin/bash AMI_ID=$(curl http://169.254.169.254/latest/meta-data/ami-id) echo $AMI_ID >> /home/ami_id.txt

Ce qui suit montre le script d'action bootstrap personnalisé modifié pour être compatible avec IMDSv2.

#!/bin/bash AMI_ID=$(TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id) echo $AMI_ID >> /home/ami_id.txt

Pour plus d'informations, consultez Récupération des métadonnées d'instance dans le Guide de l'utilisateur Amazon EC2 pour les instances Linux.

Exemple de mise à jour d'une configuration pour IMDSv1

Voici un exemple de configuration de cluster qui prend en charge IMDSv1 lors de l'utilisation des AWS ParallelCluster versions 3.7.0 et antérieures.

Region: us-east-1 Imds: ImdsSupport: v1.0 Image: Os: alinux2 HeadNode: InstanceType: t2.micro Networking: SubnetId: subnet-abcdef01234567890 Ssh KeyName: key-name CustomActions: OnNodeConfigured: Script: Script-path Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 CustomActions: OnNodeConfigured: Script: Script-path ComputeResources: - Name: t2micro Instances: - InstanceType: t2.micro MinCount: 11 Networking: SubnetIds: - subnet-abcdef01234567890