Azioni bootstrap personalizzate - AWS ParallelCluster

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Azioni bootstrap personalizzate

Se si definiscono le impostazioni di OnNodeStartconfigurazione HeadNodeCustomActions//, AWS ParallelCluster esegue codice arbitrario immediatamente dopo l'avvio del nodo. Se si definiscono le impostazioni di OnNodeConfiguredconfigurazione HeadNodeCustomActions//, AWS ParallelCluster esegue il codice dopo che la configurazione del nodo è stata completata correttamente.

A partire dalla AWS ParallelCluster versione 3.4.0, il codice può essere eseguito dopo l'aggiornamento del nodo principale, se si definiscono le impostazioni di OnNodeUpdatedconfigurazione HeadNodeCustomActions//.

Nella maggior parte dei casi, questo codice è memorizzato in Amazon Simple Storage Service (Amazon S3) e vi si accede tramite una connessione HTTPS. Il codice viene eseguito root e può essere in qualsiasi linguaggio di script supportato dal sistema operativo del cluster. Spesso il codice è in Bash o Python.

Nota

A partire dalla AWS ParallelCluster versione 3.7.0, l'impostazione predefinita del cluster Imds/ImdsSupportè. v2.0

Quando crei un nuovo cluster per l'aggiornamento alla versione 3.7.0 e versioni successive, aggiorna gli script di azione bootstrap personalizzati per renderli compatibili con IMDSv2 o imposta/to nel file di configurazione del cluster. ImdsImdsSupportv1.0

avvertimento

L'utente è responsabile della configurazione degli script e degli argomenti personalizzati come descritto nel modello di responsabilità condivisa. Verifica che gli script e gli argomenti di bootstrap personalizzati provengano da fonti attendibili per avere accesso completo ai nodi del cluster.

avvertimento

AWS ParallelCluster non supporta l'uso di variabili interne fornite tramite il /etc/parallelcluster/cfnconfig file. Questo file potrebbe essere rimosso come parte di future release.

OnNodeStartle azioni vengono richiamate prima dell'avvio di qualsiasi azione di bootstrap di distribuzione del nodo, come la configurazione di NAT, Amazon Elastic Block Store (Amazon EBS) o lo scheduler. OnNodeStartLe azioni di bootstrap possono includere la modifica dello storage, l'aggiunta di utenti aggiuntivi e l'aggiunta di pacchetti.

Nota

Se DirectoryServiceconfiguri uno OnNodeStartscript HeadNode/CustomActions/per il tuo cluster, AWS ParallelCluster configura DirectoryService e riavvia lo script prima che venga sssd eseguito lo script. OnNodeStart

OnNodeConfiguredle azioni vengono richiamate dopo il completamento dei processi di bootstrap del nodo. OnNodeConfiguredle azioni servono alle ultime azioni che si verificano prima che un'istanza venga considerata completamente configurata e completa. Alcune OnNodeConfigured azioni includono la modifica delle impostazioni dello scheduler, la modifica dell'archiviazione e la modifica dei pacchetti. È possibile passare argomenti agli script specificandoli durante la configurazione.

OnNodeUpdatedle azioni vengono richiamate dopo il completamento dell'aggiornamento del nodo principale e l'allineamento dello scheduler e dello storage condiviso alle ultime modifiche alla configurazione del cluster.

Quando OnNodeStart le nostre azioni OnNodeConfigured personalizzate hanno esito positivo, il successo viene indicato con il codice di uscita zero (0). Qualsiasi altro codice di uscita indica che il bootstrap dell'istanza non è riuscito.

Quando le azioni OnNodeUpdated personalizzate hanno esito positivo, il successo viene segnalato con il codice di uscita zero (0). Qualsiasi altro codice di uscita indica che l'aggiornamento non è riuscito.

Nota

Se si configura OnNodeUpdated, è necessario ripristinare manualmente le OnNodeUpdated azioni allo stato precedente in caso di errori di aggiornamento.

Se un'azione OnNodeUpdated personalizzata fallisce, l'aggiornamento torna allo stato precedente. Tuttavia, l'OnNodeUpdatedazione viene eseguita solo al momento dell'aggiornamento e non al momento del rollback dello stack.

È possibile specificare diversi script per il nodo principale e per ogni coda, nelle sezioni di configurazione HeadNode/CustomActionse/Scheduling/SlurmQueues. CustomActions OnNodeUpdatedpuò essere configurato solo nella HeadNode sezione.

Nota

Prima della AWS ParallelCluster versione 3.0, non era possibile specificare script diversi per i nodi head e compute. Fare riferimento a Passaggio da AWS ParallelCluster 2.x a 3.x.

Configurazione

Le seguenti impostazioni di configurazione vengono utilizzate per definire OnNodeConfiguredazioni OnNodeStarte CustomActionsargomenti HeadNode//OnNodeConfigured& & OnNodeUpdatede SchedulingCustomActions//OnNodeStart&.

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

Utilizzando l'Sequenceimpostazione (aggiunta nella AWS ParallelCluster versione 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

L'Sequenceimpostazione viene aggiunta a partire dalla AWS ParallelCluster versione 3.6.0. Quando si specificaSequence, è possibile elencare più script per un'azione personalizzata. AWS ParallelCluster continua a supportare la configurazione di un'azione personalizzata con un singolo script, senza includere. Sequence

AWS ParallelCluster non supporta l'inclusione sia di un singolo script che della stessa azione personalizzata. Sequence Ad esempio, AWS ParallelCluster fallisce se si specifica la seguente configurazione.

[...] 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 [...]

Argomenti

Nota

Nella AWS ParallelCluster versione 2.x gli $1 argomenti erano riservati, per memorizzare l'URL dello script personalizzato. Se vuoi riutilizzare gli script di bootstrap personalizzati creati per AWS ParallelCluster 2.x con AWS ParallelCluster 3.x, devi adattarli considerando lo spostamento degli argomenti. Fare riferimento a Passaggio da AWS ParallelCluster 2.x a 3.x.

Cluster di esempio con azioni bootstrap personalizzate

I passaggi seguenti creano un semplice script da eseguire dopo la configurazione del nodo, che installa i wget pacchetti R, curl e nei nodi del cluster.

  1. Creare uno script.

    #!/bin/bash echo "The script has $# arguments" for arg in "$@" do echo "arg: ${arg}" done yum -y install "${@:1}"
  2. Carica lo script con le autorizzazioni corrette su Amazon S3. Se le autorizzazioni di lettura pubbliche non sono appropriate per te, usa le sezioni HeadNode/IamScheduling/S3AccessSlurmQueuese /configuration. Per ulteriori informazioni, consulta Utilizzo degli Amazon S3.

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

    Se lo script è stato modificato in Windows, le terminazioni di riga devono essere modificate da CRLF a LF prima di caricare lo script su Amazon S3.

  3. Aggiorna la AWS ParallelCluster configurazione per includere la nuova azione. OnNodeConfigured

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

    Se il bucket non dispone dell'autorizzazione di lettura pubblica, utilizzalo s3 come protocollo URL.

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

    $ pcluster create-cluster --cluster-name mycluster \ --region <region> --cluster-configuration config-file.yaml
  5. Verificare l'output.

    • Se hai aggiunto azioni personalizzate alla HeadNode configurazione, accedi al nodo head e controlla il cfn-init.log file in cui si trova /var/log/cfn-init.log eseguendo il seguente comando:

      $ 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
    • Se hai aggiunto azioni personalizzate all'SlurmQueuesimpostazione, controlla che si cloud-init.log trovi /var/log/cloud-init.log in un nodo di calcolo. CloudWatch Utilizzatelo per visualizzare questi registri.

    Puoi visualizzare entrambi questi log nella CloudWatch console Amazon. Per ulteriori informazioni, consulta Integrazione con Amazon CloudWatch Logs.

Esempio di aggiornamento di uno script di bootstrap personalizzato per IMDSv2

Nell'esempio seguente, aggiorniamo uno script di azione bootstrap personalizzato utilizzato con IMDSv1 per l'utilizzo con IMDSv2. Lo script IMDSv1 recupera i metadati dell'ID AMI dell'istanza Amazon EC2.

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

Di seguito viene illustrato lo script di azione bootstrap personalizzato modificato per renderlo compatibile con 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

Per ulteriori informazioni, consulta la sezione Recupero dei metadati dell'istanza nella Guida per l'utente di Amazon EC2 per le istanze Linux.

Esempio di aggiornamento di una configurazione per IMDSv1

Di seguito è riportato un esempio di configurazione del cluster che supporta IMDSv1 quando si utilizzano le versioni 3.7.0 e precedenti. AWS ParallelCluster

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