

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="pre_post_install"></a>

AWS ParallelCluster puede ejecutar código arbitrario antes (preinstalación) o después (después de la instalación) de la acción de arranque principal al crear el clúster. 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 raíz 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*.

Se llama a las acciones previas a la instalación antes de cualquier arranque de implementación de clúster, como la configuración de NAT, () y el programador. La modificación del almacenamiento o añadir usuarios o paquetes adicionales son acciones de preinstalación típicas.

Las acciones posteriores a la instalación se ejecutan una vez finalizados los procesos de arranque del clúster. Las acciones posteriores a la instalación son las últimas que se llevan a cabo antes de que una instancia se considere completamente configurada y completa. Algunas acciones 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. Estos se transfieren con comillas dobles a las acciones previas o posteriores a la instalación.

Si una acción previa o posterior a la instalación produce un error, el arranque de instancia también falla. El éxito aparece con un código de salida de 0. Cualquier otro código de salida indica que se ha producido un error en el arranque de la instancia.

Puede diferenciar entre el nodo principal en ejecución y el nodo de cómputo. Obtenga el archivo `/etc/parallelcluster/cfnconfig` y evalúe la variable de entorno `cfn_node_type`, cuyos valores posibles son "`MasterServer`" y "`ComputeFleet`" para el nodo principal y de computación, respectivamente.

```
#!/bin/bash

. "/etc/parallelcluster/cfnconfig"

case "${cfn_node_type}" in
    MasterServer)
        echo "I am the head node" >> /tmp/head.txt
    ;;
    ComputeFleet)
        echo "I am a compute node" >> /tmp/compute.txt
    ;;
    *)
    ;;
esac
```

## Configuración
<a name="pre_post_install-configuration"></a>

Se utilizan las siguientes opciones de configuración para definir acciones de preinstalación o posinstalación y argumentos.

```
# URL to a preinstall script. This is run before any of the boot_as_* scripts are run
# (no default)
pre_install = https://<bucket-name>.s3.amazonaws.com/my-pre-install-script.sh
# Arguments to be passed to preinstall script
# (no default)
pre_install_args = argument-1 argument-2
# URL to a postinstall script. This is run after any of the boot_as_* scripts are run
# (no default)
post_install = https://<bucket-name>.s3.amazonaws.com/my-post-install-script.sh
# Arguments to be passed to postinstall script
# (no default)
post_install_args = argument-3 argument-4
```

## Argumentos
<a name="arguments"></a>

Los dos primeros argumentos, `$0` y `$1`, se reservan para el nombre del script y la dirección url.

```
$0 => the script name
$1 => s3 url
$n => args set by pre/post_install_args
```

## Ejemplo
<a name="example"></a>

Los siguientes pasos crean un script de posinstalación sencillo que instala los paquetes R en un clúster.

1. Cree un script.

   ```
   #!/bin/bash
   
   echo "post-install script has $# arguments"
   for arg in "$@"
   do
       echo "arg: ${arg}"
   done
   
   yum -y install "${@:2}"
   ```

1. Cargue el script con los permisos correctos en Amazon S3. Si los permisos de lectura públicos no son adecuados para usted, utilice uno de [`s3_read_resource`](cluster-definition.md#s3-read-resource) los dos [`s3_read_write_resource`](cluster-definition.md#s3-read-write-resource) parámetros para conceder el acceso. Para obtener más información, consulte [Uso de Amazon S3](s3_resources.md).

   ```
   $ aws s3 cp --acl public-read /path/to/myscript.sh s3://bucket-name/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 acción posterior a la instalación.

   ```
   [cluster default]
   ...
   post_install = https://bucket-name.s3.amazonaws.com/myscript.sh
   post_install_args = 'R curl wget'
   ```

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

   ```
   [cluster default]
   ...
   post_install = s3://bucket-name/myscript.sh
   post_install_args = 'R curl wget'
   ```

1. Lance el clúster.

   ```
   $ pcluster create mycluster
   ```

1. Verifique el resultado.

   ```
   $ less /var/log/cfn-init.log
   2019-04-11 10:43:54,588 [DEBUG] Command runpostinstall output: post-install script has 4 arguments
   arg: s3://bucket-name/test.sh
   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
   ```