Acciones de bootstrap personalizadas - AWS ParallelCluster

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Acciones de bootstrap personalizadas

Si define elHeadNode/CustomActions/OnNodeStartajustes de configuración,AWS ParallelClusterejecuta código arbitrario inmediatamente después de que se inicie el nodo. Si define elHeadNode/CustomActions/OnNodeConfiguredajustes de configuración,AWS ParallelClusterejecuta el código una vez completada correctamente la configuración del nodo.

Empezando porAWS ParallelClusterversión 3.4.0, el código se puede ejecutar después de la actualización del nodo principal, si define elHeadNode/CustomActions/OnNodeUpdatedajustes de configuración.

En la mayoría de los casos, este código se almacena en Amazon Simple Storage Service (Amazon S3) y se accede a él a través de una conexión HTTPS. El código se ejecuta comorooty puede estar en cualquier lenguaje de escritura compatible con el sistema operativo del clúster. A menudo, el código está enBashoPitón.

nota

Empezando porAWS ParallelClusterversión 3.7.0, el clústerImds/ImdsSupportel valor predeterminado esv2.0.

Al crear un clúster nuevo para actualizarlo a la versión 3.7.0 y versiones posteriores, actualice los scripts de acción de arranque personalizados para que sean compatibles con IMDSv2 o configureImds/ImdsSupportav1.0en el archivo de configuración del clúster.

aviso

Usted es responsable de configurar los scripts y argumentos personalizados tal y como se describe en laModelo de responsabilidad compartida. Compruebe que los scripts y argumentos de bootstrap personalizados provienen de fuentes en las que confía para tener acceso total a los nodos del clúster.

aviso

AWS ParallelClusterno admite el uso de variables internas que se proporcionan a través del/etc/parallelcluster/cfnconfigarchivo. Es posible que este archivo se elimine como parte de una versión futura.

OnNodeStartse invocan las acciones antes de iniciar cualquier acción de arranque de despliegue de nodos, como la configuración de NAT, Amazon Elastic Block Store (Amazon EBS) o el programador.OnNodeStartLas acciones de arranque pueden incluir la modificación del almacenamiento, la adición de usuarios adicionales y la adición de paquetes.

nota

Si configurasDirectoryServicey unHeadNode/CustomActions/OnNodeStartscript para su clúster,AWS ParallelClusterconfiguraDirectoryServicey reinicia elsssd, antes de ejecutar elOnNodeStartguión.

OnNodeConfiguredlas acciones se invocan una vez finalizados los procesos de arranque del nodo.OnNodeConfiguredlas acciones son las últimas acciones que se producen antes de que una instancia se considere completamente configurada y completa. AlgunasOnNodeConfiguredlas acciones incluyen cambiar la configuración del programador, modificar el almacenamiento y modificar los paquetes. Puede pasar argumentos a los scripts especificándolos durante la configuración.

OnNodeUpdatedLas acciones se ejecutan cuando se completa la actualización del nodo principal y cuando el planificador y el almacenamiento compartido se alinean con los cambios más recientes en la configuración del clúster.

¿CuándoOnNodeStartoOnNodeConfiguredlas acciones personalizadas se realizan correctamente, el éxito se indica con el código de salida cero (0). Cualquier otro código de salida indica que se ha producido un error en el arranque de la instancia.

¿CuándoOnNodeUpdatedlas acciones personalizadas se realizan correctamente, se indica con el código de salida cero (0). Cualquier otro código de salida indica que la actualización ha fallado.

nota

Si configuraOnNodeUpdated, debe restaurar manualmente elOnNodeUpdatedacciones al estado anterior en caso de errores de actualización.

Si unOnNodeUpdatedla acción personalizada falla, la actualización vuelve al estado anterior. Sin embargo, elOnNodeUpdatedla acción solo se ejecuta en el momento de la actualización y no en el momento de la reversión de la pila.

Puede especificar diferentes scripts para el nodo principal y para cada cola, en elHeadNode/CustomActionsyScheduling/SlurmQueues/CustomActionssecciones de configuración.OnNodeUpdatedsolo se puede configurar en elHeadNodesección.

nota

AntesAWS ParallelClusteren la versión 3.0, no era posible especificar scripts diferentes para los nodos principales y de cómputo. Consulte Pasar de AWS ParallelCluster 2.x a 3.x.

Configuración

Los siguientes ajustes de configuración se utilizan para definirHeadNode/CustomActions/OnNodeStart&OnNodeConfigured&OnNodeUpdatedyScheduling/CustomActions/OnNodeStart&OnNodeConfiguredacciones y argumentos.

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

Uso delSequenceconfiguración (agregada enAWS ParallelClusterversión 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: - Script1: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script2: 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: - Script1: s3://bucket-name/on-node-configured1.sh Args: - arg1 - Script2: 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: - Script1: s3://bucket-name/on-node-updated1.sh Args: - arg1 - Script2: 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: - Script1: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script2: 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: - Script1: s3://bucket-name/on-node-configured1.sh Args: - arg1 - Script2: s3://bucket-name/on-node-configured2.sh Args: - arg1 [...] Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

ElSequencela configuración se añade empezando porAWS ParallelClusterversión 3.6.0. Cuando especificasSequence, puede enumerar varios scripts para una acción personalizada.AWS ParallelClustersigue admitiendo la configuración de una acción personalizada con un único script, sin incluirSequence.

AWS ParallelClusterno admite incluir un único guion ySequencepara la misma acción personalizada. Por ejemplo,AWS ParallelClusterse produce un error si se especifica la siguiente configuración.

[...] 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: - Script1: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script2: s3://bucket-name/on-node-start2.sh Args: - arg1 [...]

Argumentos

nota

EnAWS ParallelCluster2.x el$1los argumentos eran reservados, para almacenar la URL del script personalizado. Si desea volver a utilizar los scripts de bootstrap personalizados creados paraAWS ParallelCluster2.x conAWS ParallelCluster3.x hay que adaptarlos teniendo en cuenta el cambio de los argumentos. Consulte Pasar de AWS ParallelCluster 2.x a 3.x.

Ejemplo de clúster con acciones de arranque personalizadas

Los siguientes pasos crean un script simple que se ejecuta después de configurar el nodo y que instala elR, curlywgetpaquetes en los nodos del clúster.

  1. Cree un script.

    #!/bin/bash echo "The script has $# arguments" for arg in "$@" do echo "arg: ${arg}" done yum -y install "${@:1}"
  2. Cargue el script con los permisos correctos en Amazon S3. Si los permisos de lectura públicos no son adecuados para usted, utiliceHeadNode/Iam/S3AccessyScheduling/SlurmQueuessecciones de configuración. Para obtener más información, consulte Amazon S3.

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

    Si el script se editó en Windows, los finales de línea deben cambiarse de CRLF a LF antes de cargar el script en Amazon S3.

  3. Actualice elAWS ParallelClusterconfiguración para incluir la nuevaOnNodeConfiguredacción.

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

    Si el depósito no tiene permiso de lectura pública, utilices3como protocolo URL.

    CustomActions: OnNodeConfigured: Script: s3://<bucket-name>/myscript.sh Args: - "R" - "curl" - "wget"
  4. Lance el clúster.

    $ pcluster create-cluster --cluster-name mycluster \ --region <region> --cluster-configuration config-file.yaml
  5. Verifique el resultado.

    • Si ha agregado acciones personalizadas alHeadNodeconfiguración, inicie sesión en el nodo principal y compruebe lacfn-init.logarchivo ubicado en/var/log/cfn-init.logejecutando el siguiente 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
    • Si ha añadido acciones personalizadas a laSlurmQueuesconfiguración, compruebe lacloud-init.logubicado en/var/log/cloud-init.logen un nodo de cómputo. Utilice CloudWatch para ver estos registros.

    Puede ver ambos registros en Amazon CloudWatch consola. Para obtener más información, consulte Integración con Amazon CloudWatch Logs.

Ejemplo de actualización de un script de arranque personalizado para IMDSv2

En el siguiente ejemplo, actualizamos un script de acción de arranque personalizado que se usó con IMDSv1 para usarlo con IMDSv2. El script IMDSv1 recupera los metadatos del ID de AMI de la instancia EC2.

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

A continuación se muestra el script de acción de arranque personalizado modificado para que sea compatible 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

Para obtener más información, consulteRecupere los metadatos de la instanciaen elGuía del usuario de EC2 para instancias de Linux.

Ejemplo de actualización de una configuración para IMDSv1

El siguiente es un ejemplo de una configuración de clúster que admite IMDSv1 cuando se usaAWS ParallelClusterversiones 3.7.0 y anteriores.

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