

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 arranque personalizadas
<a name="custom-bootstrap-actions-v3"></a>

Si define los parámetros de [`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart)configuración [`HeadNode`[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)](HeadNode-v3.md)//, AWS ParallelCluster ejecuta código arbitrario inmediatamente después de que se inicie el nodo. Si define los valores de [`OnNodeConfigured`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeConfigured)configuración [`HeadNode`[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)](HeadNode-v3.md)//, AWS ParallelCluster ejecuta el código una vez que la configuración del nodo se haya completado correctamente.

A partir de la AWS ParallelCluster versión 3.4.0, el código se puede ejecutar después de la actualización del nodo principal, si se definen los ajustes de [`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated)configuración [`HeadNode`[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)](HeadNode-v3.md)//.

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 como `root` y puede estar en cualquier lenguaje de script compatible con el sistema operativo del clúster. A menudo, el código está en *Bash* o *Python*.

**nota**  
A partir de AWS ParallelCluster la versión 3.7.0, la configuración [`ImdsSupport`](Imds-cluster-v3.md#yaml-cluster-Imds-ImdsSupport)predeterminada [`Imds`](Imds-cluster-v3.md#Imds-cluster-v3.title)del clúster es. `v2.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 ellos IMDSv2 o [`ImdsSupport`](Imds-cluster-v3.md#yaml-cluster-Imds-ImdsSupport)defina [`Imds`](Imds-cluster-v3.md#Imds-cluster-v3.title)/`v1.0`en el archivo de configuración del clúster.

**aviso**  
Es su responsabilidad configurar los scripts y argumentos personalizados tal y como se describe en el modelo de [responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/). Compruebe que los scripts y argumentos de arranque personalizados provengan de fuentes en las que confía para tener acceso total a los nodos del clúster.

**aviso**  
AWS ParallelCluster no admite el uso de variables internas que se proporcionan a través del `/etc/parallelcluster/cfnconfig` archivo. Es posible que este archivo se elimine como parte de una versión futura.

Las acciones `OnNodeStart` se invocan antes de que se inicie cualquier acción de arranque de implementación de nodos, como la configuración de NAT, Amazon Elastic Block Store (Amazon EBS) o el programador. Las acciones de arranque `OnNodeStart` pueden incluir la modificación del almacenamiento, la adición de usuarios adicionales y la adición de paquetes.

**nota**  
Si configura [`DirectoryService`](DirectoryService-v3.md)un [`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart)script [`HeadNode`](HeadNode-v3.md)/[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)/para su clúster, lo AWS ParallelCluster configura `DirectoryService` y lo reinicia antes de que ejecute el `OnNodeStart` script. `sssd`

Las acciones `OnNodeConfigured` se invocan una vez finalizados los procesos de arranque del nodo. Las acciones `OnNodeConfigured` son las últimas acciones que se producen antes de que se considere que una instancia está totalmente configurada y completa. Algunas acciones `OnNodeConfigured` incluyen la modificación de la configuración del programador, del almacenamiento o de los paquetes. Puede pasar argumentos a los scripts especificándolos durante la configuración.

Las acciones `OnNodeUpdated` se ejecutan cuando se completa la actualización del nodo principal y cuando el programador y el almacenamiento compartido se ajustan a los cambios más recientes en la configuración del clúster.

Cuando las acciones personalizadas `OnNodeStart` o `OnNodeConfigured` se completan correctamente, 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.

Cuando las acciones personalizadas `OnNodeUpdated` se completan correctamente, se señala con el código de salida cero (0). Cualquier otro código de salida indica que se ha producido un error en la actualización.

**nota**  
Si configura [`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated), debe restaurar manualmente las `OnNodeUpdated` acciones al estado anterior en caso de que se produzcan errores de actualización.  
Si se produce un error en una acción personalizada `OnNodeUpdated`, la actualización vuelve al estado anterior. Sin embargo, la acción `OnNodeUpdated` 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 las secciones de [`CustomActions`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-CustomActions)configuración [`HeadNode`](HeadNode-v3.md)/[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)e [`Scheduling`[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)](Scheduling-v3.md)i//. [`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated)solo se puede configurar en la `HeadNode` sección.

**nota**  
Antes de AWS ParallelCluster 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](moving-from-v2-to-v3.md).

**Topics**
+ [Parámetros de configuración para definir acciones y argumentos](custom-bootstrap-actions-config-v3.md)
+ [Argumentos](custom-bootstrap-actions-args-v3.md)
+ [Ejemplo de clúster con acciones de arranque personalizadas](custom-bootstrap-actions-example-cluster-v3.md)
+ [Ejemplo de cómo actualizar un script de arranque personalizado para IMDSv2](custom-bootstrap-actions-example-imdsv2-v3.md)
+ [Ejemplo de cómo actualizar una configuración para IMDSv1](custom-bootstrap-actions-example-imdsv1-v3.md)

# Parámetros de configuración para definir acciones y argumentos
<a name="custom-bootstrap-actions-config-v3"></a>

Los siguientes ajustes de configuración se utilizan para definir las acciones y argumento [`HeadNode`](HeadNode-v3.md)/[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)/[`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart) y [`OnNodeConfigured`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeConfigured) y [`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated) y [`Scheduling`](Scheduling-v3.md)/[`CustomActions`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-CustomActions)/[`OnNodeStart`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeStart) y [`OnNodeConfigured`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeConfigured).

```
HeadNode:
  [...]
  CustomActions:
    OnNodeStart:
      # Script URL. This is run before any of the bootstrap scripts are run
      Script: s3://amzn-s3-demo-bucket/on-node-start.sh
      Args:
        - arg1
    OnNodeConfigured:
      # Script URL. This is run after all the bootstrap scripts are run
      Script: s3://amzn-s3-demo-bucket/on-node-configured.sh
      Args:
        - arg1
    OnNodeUpdated:
      # Script URL. This is run after the head node update is completed.
      Script: s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/on-node-start.sh
          Args:
            - arg1
        OnNodeConfigured:
          Script: s3://amzn-s3-demo-bucket/on-node-configured.sh
          Args:
            - arg1
      Iam:
        S3Access:
          - BucketName: bucket_name
            EnableWriteAccess: false
```

Usando la `Sequence` configuración (agregada en la AWS ParallelCluster versió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:
        - Script: s3://amzn-s3-demo-bucket/on-node-start1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/on-node-configured1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/on-node-updated1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/on-node-start1.sh
              Args:
                - arg1
            - Script: s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/on-node-configured1.sh
              Args:
                - arg1
            - Script: s3://amzn-s3-demo-bucket/on-node-configured2.sh
              Args:
                - arg1
            [...]
      Iam:
        S3Access:
          - BucketName: bucket_name
            EnableWriteAccess: false
```

La `Sequence` configuración se añade a partir de la AWS ParallelCluster versión 3.6.0. Si especifica `Sequence`, puede mostrar varios scripts para una acción personalizada. AWS ParallelCluster sigue admitiendo la configuración de una acción personalizada con un único script, sin incluir `Sequence`.

AWS ParallelCluster no admite incluir tanto un único script como `Sequence` para la misma acción personalizada. Por ejemplo, AWS ParallelCluster se 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://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/on-node-start1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-start2.sh
          Args:
            - arg1
[...]
```

# Argumentos
<a name="custom-bootstrap-actions-args-v3"></a>

En la AWS ParallelCluster versión 2.x, `$1` los argumentos eran reservados, para almacenar la URL del script personalizado. Si quiere reutilizar los scripts bootstrap personalizados creados para la versión AWS ParallelCluster 2.x con la versión AWS ParallelCluster 3.x, debe adaptarlos teniendo en cuenta el cambio de los argumentos. Consulte [Pasar de AWS ParallelCluster 2.x a 3.x](moving-from-v2-to-v3.md).

# Ejemplo de clúster con acciones de arranque personalizadas
<a name="custom-bootstrap-actions-example-cluster-v3"></a>

Los siguientes pasos crean un script simple que se ejecuta después de configurar el nodo y que instala los paquetes `R,` `curl` y `wget` 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}"
   ```

1. Cargue el script con los permisos correctos en Amazon S3. Si los permisos de lectura públicos no son adecuados para usted, utilice las secciones de configuración [`HeadNode`](HeadNode-v3.md)/[`Iam`](HeadNode-v3.md#HeadNode-v3-Iam)/[`S3Access`](HeadNode-v3.md#yaml-HeadNode-Iam-S3Access) y [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues). Para obtener más información, consulte [Uso de Amazon S3](s3_resources-v3.md).

   ```
   $ aws s3 cp --acl public-read /path/to/myscript.sh s3://amzn-s3-demo-bucket/myscript.sh
   ```
**importante**  
Si la secuencia de comandos se editó en Windows, los finales de línea deben cambiarse de CRLF a LF antes de cargar la secuencia de comandos en Amazon S3.

1. Actualice la AWS ParallelCluster configuración para incluir la nueva `OnNodeConfigured` acción.

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

   Si el bucket no tiene permiso de lectura pública, utilice `s3` como protocolo de la URL.

   ```
   CustomActions:
     OnNodeConfigured:
       Script: s3://amzn-s3-demo-bucket/myscript.sh
       Args:
         - "R"
         - "curl"
         - "wget"
   ```

1. Lance el clúster.

   ```
   $ pcluster create-cluster --cluster-name mycluster \
     --region <region> --cluster-configuration config-file.yaml
   ```

1. Verifique el resultado.
   + Si ha agregado acciones personalizadas a la `HeadNode` configuración, inicie sesión en el nodo principal y compruebe el `cfn-init.log` archivo ubicado en `/var/log/cfn-init.log` él ejecutando 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 agregado acciones personalizadas a la configuración de `SlurmQueues`, compruebe `cloud-init.log` ubicado en `/var/log/cloud-init.log` en un nodo de computación. Se utiliza CloudWatch para ver estos registros.

   Puedes ver ambos registros en la CloudWatch consola de Amazon. Para obtener más información, consulte [Integración con Amazon CloudWatch Logs](cloudwatch-logs-v3.md).

# Ejemplo de cómo actualizar un script de arranque personalizado para IMDSv2
<a name="custom-bootstrap-actions-example-imdsv2-v3"></a>

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 identificador de AMI de la instancia de Amazon 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 él.

```
#!/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, consulte [Recuperar metadatos de instancias](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#instancedata-meta-data-retrieval-examples) en la *Guía del usuario de Amazon EC2 para instancias de Linux.*

# Ejemplo de cómo actualizar una configuración para IMDSv1
<a name="custom-bootstrap-actions-example-imdsv1-v3"></a>

El siguiente es un ejemplo de una configuración de clúster que es compatible IMDSv1 con AWS ParallelCluster las versiones 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
```