

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.

# Cómo utiliza Image Builder la Ejecutor y orquestador de tareas de AWS aplicación para gestionar los componentes
<a name="toe-component-manager"></a>

EC2 Image Builder utiliza la aplicación Ejecutor y orquestador de tareas de AWS (TOE de AWS) para organizar flujos de trabajo complejos, modificar las configuraciones del sistema y probar las imágenes sin necesidad de códigos o scripts de DevOps adicionales. Esta aplicación administra y ejecuta los componentes que implementan su esquema de documento declarativo.

TOE de AWS es una aplicación independiente que Image Builder instala en sus instancias de compilación y prueba al crear una imagen. También puede instalarla manualmente en las EC2 instancias para crear sus propios componentes personalizados. No requiere ninguna configuración adicional y también se puede ejecutar en las instalaciones.

**Topics**
+ [TOE de AWS descargas](#toe-downloads)
+ [Regiones compatibles](#toe-supported-regions)
+ [TOE de AWS referencia de comando](#toe-commands)
+ [Configuración manual para desarrollar componentes personalizados con TOE de AWS](toe-get-started.md)
+ [Utilice el marco de documentos de TOE de AWS componentes para componentes personalizados](toe-use-documents.md)
+ [Módulos de acción compatibles con el administrador de TOE de AWS componentes](toe-action-modules.md)
+ [Configurar la entrada para el comando TOE de AWS run](toe-run-config-input.md)

## TOE de AWS descargas
<a name="toe-downloads"></a>

Para instalarlo TOE de AWS, elija el enlace de descarga correspondiente a su arquitectura y plataforma. Si se conecta a un punto final de VPC para su servicio (Image Builder, por ejemplo), debe tener una política de punto final personalizada adjunta que incluya el acceso al depósito de S3 para TOE de AWS las descargas. De lo contrario, las instancias de compilación y prueba no podrán descargar el script de arranque (`bootstrap.sh`) ni instalar la TOE de AWS aplicación. Para obtener más información, consulte [Creación de una política de puntos de conexión de VPC para Generador de Imágenes](vpc-interface-endpoints.md#vpc-endpoint-policy).

**importante**  
AWS está eliminando gradualmente la compatibilidad con las versiones 1.0 y 1.1 de TLS. Para acceder al depósito de S3 para realizar TOE de AWS descargas, el software de su cliente debe usar la versión 1.2 o posterior de TLS. Para obtener más información, consulte esta [entrada de blog de seguridad de AWS](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/).


| Arquitectura | Plataforma | Enlace de descarga | Ejemplo | 
| --- | --- | --- | --- | 
| 386 |  AL 2 y 2023 RHEL 7, 8 y 9 Ubuntu 16.04, 18.04, 20.04, 22.04 y 24.04 CentOS 7 y 8 SUSE 12 y 15  | `https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/386/awstoe`  | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/386/awstoe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/386/awstoe) | 
| AMD64 |  AL 2 y 2023 RHEL 7, 8 y 9 Ubuntu 16.04, 18.04, 20.04, 22.04 y 24.04 CentOS 7 y 8 Flujo 8 de CentOS SUSE 12 y 15  | https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/amd64/awstoe | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe) | 
| AMD64 |  macOS 10.14.x (Mojave), 10.15.x (Catalina), 11.x (Big Sur), 12.x (Monterey)  | https://awstoe-region.s3.region.amazonaws.com/latest/darwin/amd64/awstoe | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/darwin/amd64/awstoe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/darwin/amd64/awstoe) | 
|  AMD64  |  Windows Server 2012 R2, 2016, 2019 y 2022  |   `https://awstoe-<region>.s3.<region>.amazonaws.com/latest/windows/amd64/awstoe.exe`  | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/windows/amd64/awstoe.exe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/windows/amd64/awstoe.exe) | 
| ARM64 |  AL 2 y 2023 RHEL 7, 8 y 9 Ubuntu 16.04, 18.04, 20.04, 22.04 y 24.04 CentOS 7 y 8 Flujo 8 de CentOS SUSE 12 y 15  | https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/arm64/awstoe | [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/arm64/awstoe](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/arm64/awstoe) | 

## Regiones compatibles
<a name="toe-supported-regions"></a>

TOE de AWS se admite como aplicación independiente en las siguientes regiones.


| Región de AWS nombre | Región de AWS | 
| --- | --- | 
|  Este de EE. UU. (Ohio)  |  us-east-2  | 
|  Este de EE. UU. (Norte de Virginia)  |  us-east-1  | 
|  AWS GovCloud (Este de EE. UU.)  |  us-gov-east-1  | 
|  AWS GovCloud (Estados Unidos-Oeste)  |  us-gov-west-1  | 
|  Oeste de EE. UU. (Norte de California)  | us-west-1 | 
|  Oeste de EE. UU. (Oregón)  | us-west-2 | 
|  África (Ciudad del Cabo)  | af-south-1 | 
|  Asia-Pacífico (Hong Kong)  | ap-east-1 | 
|  Asia Pacífico (Osaka)  | ap-northeast-3 | 
|  Asia-Pacífico (Seúl)  | ap-northeast-2 | 
|  Asia Pacífico (Mumbai)  | ap-south-1 | 
|  Asia-Pacífico (Hyderabad)  | ap-south-2 | 
|  Asia-Pacífico (Singapur)  | ap-southeast-1 | 
|  Asia-Pacífico (Sídney)  | ap-southeast-2 | 
|  Asia-Pacífico (Yakarta)  | ap-southeast-3 | 
|  Asia-Pacífico (Tokio)  | ap-northeast-1 | 
|  Canadá (centro)  | ca-central-1 | 
|  Europa (Fráncfort)  | eu-central-1 | 
|  Europa (Zúrich)  | eu-central-2 | 
|  Europa (Estocolmo)  | eu-north-1 | 
|  Europa (Milán)  | eu-south-1 | 
|  Europa (España)  | eu-south-2 | 
|  Europa (Irlanda)  | eu-west-1 | 
|  Europa (Londres)  | eu-west-2 | 
|  Europa (París)  | eu-west-3 | 
|  Israel (Tel Aviv)  | il-central-1 | 
|  Medio Oriente (EAU)  | me-central-1 | 
|  Medio Oriente (Baréin)  | me-south-1 | 
|  América del Sur (São Paulo)  | sa-east-1 | 
|  China (Pekín)  | cn-north-1 | 
|  China (Ningxia)  | cn-northwest-1 | 

## TOE de AWS referencia de comando
<a name="toe-commands"></a>

TOE de AWS es una aplicación de administración de componentes de línea de comandos que se ejecuta en EC2 instancias de Amazon. Cuando Image Builder lanza una instancia de EC2 compilación o prueba, se instala TOE de AWS en la instancia. A continuación, ejecuta TOE de AWS los comandos AWS CLI para instalar o validar los componentes que se especifican en la receta de la imagen o del contenedor.

**nota**  
Algunos módulos de TOE de AWS acción requieren permisos elevados para ejecutarse en un servidor Linux. Para usar permisos elevados, añada el prefijo a la sintaxis del comando con **sudo** o ejecute el comando **sudo su** una vez al iniciar sesión antes de ejecutar los comandos que aparecen a continuación. Para obtener más información sobre los módulos de TOE de AWS acción, consulte[Módulos de acción compatibles con el administrador de TOE de AWS componentes](toe-action-modules.md).

***[ejecutar](#cmd-run)***  
Use el comando **run** para ejecutar los scripts de documentos de YAML para uno o más documentos componentes.

***[validar](#cmd-validate)***  
Ejecute el comando **validate** para validar la sintaxis del documento YAML de uno o más documentos componentes.

### comando awstoe run
<a name="cmd-run"></a>

Este comando ejecuta los scripts de los documentos de componentes de YAML en el orden en que se incluyen en el archivo de configuración especificado por el parámetro `--config` o en la lista de documentos de componentes especificada por el parámetro `--documents`.

**nota**  
Debe especificar exactamente uno de los siguientes parámetros, nunca ambos:  
--config  
--documents

#### Sintaxis
<a name="run-syntax"></a>

```
awstoe run [--config <file path>] [--cw-ignore-failures <?>] 
      [--cw-log-group <?>] [--cw-log-region us-west-2] [--cw-log-stream <?>] 
      [--document-s3-bucket-owner <owner>] [--documents <file path,file path,...>] 
      [--execution-id <?>] [--log-directory <file path>] 
      [--log-s3-bucket-name <name>] [--log-s3-bucket-owner <owner>] 
      [--log-s3-key-prefix <?>] [--parameters name1=value1,name2=value2...] 
      [--phases <phase name>] [--state-directory <directory path>] [--version <?>] 
      [--help] [--trace]
```

#### Parámetros y opciones
<a name="run-parameters"></a>Parámetros

**--config *`./config-example.json`***  
Forma abreviada: -c *`./config-example.json`*  
El archivo de configuración *(condicional).* Este parámetro contiene la ubicación del archivo JSON que contiene los ajustes de configuración de los componentes que ejecuta este comando. Si especifica los ajustes del comando **run** en un archivo de configuración, no debe especificar el parámetro `--documents`. Para obtener más información sobre la configuración de entrada, consulte [Configurar la entrada para el comando TOE de AWS run](toe-run-config-input.md).  
Los campos de ubicación válidos se incluyen:  
+ Una ruta de archivo local (*`./config-example.json`*)
+ Un URI de S3 (`s3://bucket/key`)

**--cw-ignore-failures**  
Forma abreviada: N/A  
Ignore los errores de registro de los CloudWatch registros.

**--cw-log-group**  
Forma abreviada: N/A  
El `LogGroup` nombre de los CloudWatch registros.

**--cw-log-region**  
Forma abreviada: N/A  
La AWS región que se aplica a los CloudWatch registros.

**--cw-log-stream**  
Forma abreviada: N/A  
El `LogStream` nombre de los CloudWatch registros, que indica TOE de AWS dónde transmitir el `console.log` archivo.

**--document-s3-bucket-owner**  
Forma abreviada: N/A  
ID de cuenta de propietario del bucket de documentos basados en URI de S3.

**--documentos *`./doc-1.yaml`,`./doc-n.yaml`***  
Forma abreviada: -d *`./doc-1.yaml`*,*`./doc-n`*  
Los documentos componentes *(condicionales).* Este parámetro contiene una lista de ubicaciones de archivos separadas por comas para que se ejecuten los documentos del componente YAML. Si especifica documentos YAML para el comando **run** mediante el parámetro `--documents`, no debe especificar el parámetro `--config`.  
Los campos de ubicación válidos se incluyen:  
+ rutas de archivos locales (*./component-doc-example.yaml*).
+ S3 URIs (`s3://bucket/key`).
+ Versión de compilación del componente Image Builder ARNs (arn:aws:imagebuilder:us-west-:component/ /2021.12.02/1). *2:123456789012* *my-example-component*
No hay espacios entre los elementos de la lista, solo comas.

**--execution-id**  
Forma abreviada: -i  
Este es el identificador único que se aplica a la ejecución del comando **run** actual. Este identificador se incluye en los nombres de los archivos de salida y de registro para identificarlos de forma exclusiva y vincularlos a la ejecución del comando actual. Si se omite esta configuración, genera TOE de AWS un GUID.

**--log-directory**  
Forma abreviada: -i  
El directorio de destino donde se TOE de AWS almacenan todos los archivos de registro de la ejecución de este comando. De forma predeterminada, este directorio está ubicado en el siguiente directorio principal: `TOE_<DATETIME>_<EXECUTIONID>`. Si no especifica el directorio de registro, TOE de AWS utiliza el directorio de trabajo actual (`.`).

**--log-s3-nombre de bucket**  
Forma abreviada: -b  
Si los registros de los componentes se almacenan en Amazon S3 (recomendado), TOE de AWS carga los registros de las aplicaciones de los componentes en el bucket de S3 mencionado en este parámetro.

**--log-s3-bucket-owner**  
Forma abreviada: N/A  
Si los registros de los componentes se almacenan en Amazon S3 (recomendado), este es el ID de la cuenta del propietario del depósito en el que se TOE de AWS escriben los archivos de registro.

**--log-s3-key-prefix**  
Forma abreviada: -k  
Si los registros de los componentes se almacenan en Amazon S3 (recomendado), este es el prefijo de clave de objeto S3 para la ubicación del registro en el bucket.

**--parameters *name1* =*value1*, *name2* =*value2*...**  
Forma abreviada: N/A  
Los parámetros son variables mutables que se definen en el documento del componente, con ajustes que la aplicación que realiza la llamada puede proporcionar en el tiempo de ejecución.

**--phases**  
Forma abreviada: -p  
Una lista separada por comas que especifica qué fases se van a ejecutar desde los documentos de los componentes de YAML. Si un documento de componentes incluye fases adicionales, no se ejecutarán.

**--directorio de estados**  
Forma abreviada: -s  
La ruta del archivo donde se almacenan los archivos de seguimiento de estado.

**--version**  
Forma abreviada: -v  
Especifica la versión de la aplicación del componente.Opciones

**--help**  
Forma abreviada: -h  
Muestra un manual de ayuda para utilizar las opciones de la aplicación de administración de componentes.

**--trace**  
Forma abreviada: -t  
Permite el registro detallado en la consola.

### comando awstoe validate
<a name="cmd-validate"></a>

Al ejecutar este comando, valida la sintaxis del documento YAML para cada uno de los documentos componentes especificados por el parámetro `--documents`.

#### Sintaxis
<a name="validate-syntax"></a>

```
awstoe validate [--document-s3-bucket-owner <owner>] 
      --documents <file path,file path,...> [--help] [--trace]
```

#### Parámetros y opciones
<a name="validate-parameters"></a>Parámetros

**--document-s3-bucket-owner**  
Forma abreviada: N/A  
Se proporcionó el identificador de cuenta de origen de los documentos basados en la URI de S3.

**--documentos *`./doc-1.yaml`,`./doc-n.yaml`***  
Forma abreviada: -d *`./doc-1.yaml`*,*`./doc-n`*  
Los documentos que lo componen *(obligatorios).* Este parámetro contiene una lista de ubicaciones de archivos separadas por comas para que se ejecuten los documentos del componente YAML. Los campos de ubicación válidos se incluyen:  
+ rutas de archivos locales () *./component-doc-example.yaml*
+ S3 URIs (`s3://bucket/key`)
+ Versión de compilación del componente Image Builder ARNs (arn:aws:imagebuilder:us-west-:component/ /2021.12.02/1) *2:123456789012* *my-example-component*
No hay espacios entre los elementos de la lista, solo comas.Opciones

**--help**  
Forma abreviada: -h  
Muestra un manual de ayuda para utilizar las opciones de la aplicación de administración de componentes.

**--trace**  
Forma abreviada: -t  
Permite el registro detallado en la consola.

# Configuración manual para desarrollar componentes personalizados con TOE de AWS
<a name="toe-get-started"></a>

La aplicación Ejecutor y orquestador de tareas de AWS (TOE de AWS) es una aplicación independiente que crea, valida y ejecuta comandos dentro de un marco de definición de componentes. AWS los servicios se pueden utilizar TOE de AWS para organizar los flujos de trabajo, instalar software, modificar las configuraciones del sistema y probar compilaciones de imágenes.

Siga estos pasos para instalar manualmente la TOE de AWS aplicación y utilizarla como una aplicación independiente para desarrollar componentes personalizados. Image Builder se encarga de estos pasos si utiliza la consola o los AWS CLI comandos de Image Builder para crear componentes personalizados. Para obtener más información, consulte [Cree componentes personalizados con Generador de imágenes](create-component.md).

# Verificar la firma de la descarga de la TOE de AWS instalación
<a name="awstoe-verify-sig"></a>

En esta sección se describe el proceso recomendado para comprobar la validez de la descarga de la instalación en sistemas operativos basados TOE de AWS en Linux, macOS y Windows.

**Topics**
+ [Verificar la firma de la descarga de la TOE de AWS instalación en Linux o macOS](#awstoe-verify-sig-linux)
+ [Compruebe la firma de la descarga de la TOE de AWS instalación en Windows](#awstoe-verify-sig-win)

## Verificar la firma de la descarga de la TOE de AWS instalación en Linux o macOS
<a name="awstoe-verify-sig-linux"></a>

En este tema se describe el proceso recomendado para comprobar la validez de la descarga de la instalación en sistemas operativos basados TOE de AWS en Linux o macOS.

Siempre que descargue una aplicación de Internet, le recomendamos que autentique la identidad del publicador del software. Además, compruebe que la aplicación no esté alterada o dañada desde su publicación. Esto le protege ante una posible instalación de una versión de la aplicación que contenga un virus u otro código malintencionado.

Si después de seguir los pasos descritos en este tema determina que el software de la aplicación de TOE de AWS ha sido modificado o está dañado, no ejecute el archivo de instalación. En su lugar, póngase en contacto con Soporte Si desea obtener más información sobre sus opciones de soporte, consulte. [Soporte](https://aws.amazon.com/premiumsupport/)

TOE de AWS los archivos de los sistemas operativos basados en Linux y macOS se firman mediante `GnuPG` una implementación de código abierto del estándar Pretty Good Privacy (OpenPGP) para firmas digitales seguras. `GnuPG`(también conocido como`GPG`) permite comprobar la autenticación y la integridad mediante una firma digital. Amazon EC2 publica una clave pública y firmas que puede usar para verificar las herramientas de CLI de Amazon EC2 descargadas. Para obtener más información acerca de `PGP` y `GnuPG` (`GPG`), consulte [http://www.gnupg.org](https://www.gnupg.org/).

El primer paso consiste en establecer una relación de confianza con el editor del software. Descargue la clave pública del editor de software, compruebe que el propietario de la clave pública es quien afirma ser y, a continuación, agregue la clave pública a su *llavero*. Su llavero es una colección de claves públicas conocidas. Tras establecer la autenticidad de la clave pública, puede usarla para verificar la firma de la aplicación.

**Topics**
+ [Instalación de las herramientas de la GPG](#awstoe-verify-signature-of-binary-download-install-tools)
+ [Autenticación e importación de la clave pública](#awstoe-verify-signature-of-binary-download-authenticate-import-public-key)
+ [Verificar la firma del paquete](#awstoe-verify-signature-of-binary-package)

### Instalación de las herramientas de la GPG
<a name="awstoe-verify-signature-of-binary-download-install-tools"></a>

Si su sistema operativo es Linux, Unix o macOS, las herramientas GPG probablemente ya estarán instaladas. Para comprobar si las herramientas están instaladas en el sistema, escriba **gpg** en un símbolo del sistema. Si las herramientas de GPG están instaladas, verá un símbolo del sistema de GPG. Si las herramientas de GPG no están instaladas, verá un mensaje de error que afirma que no se puede encontrar el comando. Puede instalar el paquete GnuPG desde un repositorio.

Para instalar las herramientas de GPG, seleccione el sistema operativo que coincida con su instancia.

------
#### [ Debian-based Linux ]

En un terminal, ejecute el comando siguiente:

```
apt-get install gnupg
```

------
#### [ Red Hat–based Linux ]

En un terminal, ejecute el comando siguiente:

```
yum install gnupg
```

------
#### [ macOS ]

En un terminal, ejecute el comando siguiente:

```
brew install gnupg
```

------

### Autenticación e importación de la clave pública
<a name="awstoe-verify-signature-of-binary-download-authenticate-import-public-key"></a>

El siguiente paso del proceso consiste en autenticar la clave TOE de AWS pública y añadirla como clave de confianza al conjunto de `GPG` claves.

**Para autenticar e importar la clave pública TOE de AWS**

1. Obtenga una copia de la clave pública de `GPG` siguiendo uno de estos métodos:
   + Descargue la clave desde

      https://awstoe - **<region>** .s3. **<region>**.amazonaws. com/assets/awstoe.gpg. Por ejemplo, [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/assets/awstoe.gpg](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/assets/awstoe.gpg).
   + Copie la clave desde el siguiente texto y péguela en un archivo llamado `awstoe.gpg`. Asegúrese de incluir todo lo que se indica a continuación:

     ```
     -----BEGIN PGP PUBLIC KEY BLOCK-----
     Version: GnuPG v2
     
     mQENBF8UqwsBCACdiRF2bkZYaFSDPFC+LIkWLwFvtUCRwAHtD8KIwTJ6LVn3fHAU
     GhuK0ZH9mRrqRT2bq/xJjGsnF9VqTj2AJqndGJdDjz75YCZYM+ocZ+r5HSJaeW9i
     S5dykHj7Txti2zHe0G5+W0v7v5bPi2sPHsN7XWQ7+G2AMEPTz8PjxY//I0DvMQns
     Sle3l9hz6wCClz1l9LbBzTyHfSm5ucTXvNe88XX5Gmt37OCDM7vfli0Ctv8WFoLN
     6jbxuA/sV71yIkPm9IYp3+GvaKeT870+sn8/JOOKE/U4sJV1ppbqmuUzDfhrZUaw
     8eW8IN9A1FTIuWiZED/5L83UZuQs1S7s2PjlABEBAAG0GkFXU1RPRSA8YXdzdG9l
     QGFtYXpvbi5jb20+iQE5BBMBCAAjBQJfFKsLAhsDBwsJCAcDAgEGFQgCCQoLBBYC
     AwECHgECF4AACgkQ3r3BVvWuvFJGiwf9EVmrBR77+Qe/DUeXZJYoaFr7If/fVDZl
     6V3TC6p0J0Veme7uXleRUTFOjzbh+7e5sDX19HrnPquzCnzfMiqbp4lSoeUuNdOf
     FcpuTCQH+M+sIEIgPno4PLl0Uj2uE1o++mxmonBl/Krk+hly8hB2L/9n/vW3L7BN
     OMb1Ll9PmgGPbWipcT8KRdz4SUex9TXGYzjlWb3jU3uXetdaQY1M3kVKE1siRsRN
     YYDtpcjmwbhjpu4xm19aFqNoAHCDctEsXJA/mkU3erwIRocPyjAZE2dnlkL9ZkFZ
     z9DQkcIarbCnybDM5lemBbdhXJ6hezJE/b17VA0t1fY04MoEkn6oJg==
     =oyze
     -----END PGP PUBLIC KEY BLOCK-----
     ```

1. En una línea de comandos del directorio en el que guardó **awstoe.gpg**, utilice el siguiente comando para importar la clave pública a su conjunto de TOE de AWS claves.

   ```
   gpg --import awstoe.gpg
   ```

   El comando devuelve resultados similares a los siguientes:

   ```
   gpg: key F5AEBC52: public key "AWSTOE <awstoe@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```

   Anote el valor de clave, lo necesitará en el siguiente paso. En el ejemplo anterior, el valor de la clave es `F5AEBC52`.

1. Verifique la huella digital ejecutando el siguiente comando, sustituyendo el *valor de la clave* por el valor del paso anterior:

   ```
   gpg --fingerprint key-value
   ```

   Este comando devuelve resultados similares a los siguientes:

   ```
   pub   2048R/F5AEBC52 2020-07-19
         Key fingerprint = F6DD E01C 869F D639 15E5  5742 DEBD C156 F5AE BC52
   uid       [ unknown] AWSTOE <awstoe@amazon.com>
   ```

   Además, la huella digital debe ser idéntica a la cadena `F6DD E01C 869F D639 15E5 5742 DEBD C156 F5AE BC52` que se muestra en el ejemplo anterior. Compare la huella digital devuelta con la publicada en esta página. Deberían coincidir. Si no coinciden, no instale el script de TOE de AWS instalación y póngase en contacto con nosotros. Soporte

### Verificar la firma del paquete
<a name="awstoe-verify-signature-of-binary-package"></a>

Después instalar las herramientas de `GPG`, autenticar e importar la clave pública de TOE de AWS y comprobar la clave pública es de confianza, estará listo para verificar la firma del script de instalación. 

**Para verificar la firma del script de instalación de**

1. En un símbolo del sistema, ejecute el siguiente comando para descargar el archivo binario de la aplicación:

   ```
   curl -O https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/<architecture>/awstoe
   ```

   Por ejemplo:

   ```
   curl -O https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe
   ```

   Los valores admitidos para la **architecture** pueden ser `amd64`, `386` y `arm64`.

1. En un símbolo del sistema, ejecute el siguiente comando para descargar el archivo de firma para el archivo binario de aplicación correspondiente desde la misma ruta de prefijo de clave S3:

   ```
   curl -O https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/<architecture>/awstoe.sig
   ```

   Por ejemplo:

   ```
   curl -O https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe.sig
   ```

   Los valores admitidos para la **architecture** pueden ser `amd64`, `386` y `arm64`.

1. Compruebe la firma ejecutando el siguiente comando en una línea de comandos en el directorio donde guardó `awstoe.sig` y en el archivo TOE de AWS de instalación. Ambos archivos deben estar presentes.

   ```
   gpg --verify ./awstoe.sig ~/awstoe
   ```

   El resultado debería tener un aspecto similar al siguiente:

   ```
   gpg: Signature made Mon 20 Jul 2020 08:54:55 AM IST using RSA key ID F5AEBC52
   gpg: Good signature from "AWSTOE awstoe@amazon.com" [unknown]
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: F6DD E01C 869F D639 15E5 5742 DEBD C156 F5AE BC52
   ```

   Si el resultado contiene la expresión `Good signature from "AWSTOE <awstoe@amazon.com>"`, significa que la firma se ha verificado correctamente y que se puede ejecutar el script de instalación de TOE de AWS .

   Si el resultado incluye la expresión `BAD signature`, compruebe si ha realizado el procedimiento correctamente. Si sigue recibiendo esta respuesta, no ejecute el archivo de instalación descargado anteriormente y póngase en contacto con Soporte.

A continuación, se describen en detalle las advertencias que podría recibir: 
+ **ADVERTENCIA: Esta clave no está certificada con una firma de confianza. Nada indica que la firma pertenezca al propietario.** Lo ideal sería que visitara una AWS oficina y recibiera la clave en persona. Sin embargo, lo habitual es que la descargue desde un sitio web. En este caso, el sitio web es un AWS sitio web. 
+ **gpg: no se han encontrado claves en las que se pueda confiar de forma definitiva.** Esto significa que la clave específica no es "definitivamente fiable" para usted (o para otras personas en las que usted confía).

Para obtener más información, consulte [http://www.gnupg.org](http://www.gnupg.org).

## Compruebe la firma de la descarga de la TOE de AWS instalación en Windows
<a name="awstoe-verify-sig-win"></a>

En este tema se describe el proceso recomendado para comprobar la validez del archivo de instalación de la Ejecutor y orquestador de tareas de AWS aplicación en sistemas operativos basados en Windows. 

Siempre que descargue una aplicación de Internet, le recomendamos que compruebe la identidad del editor del software y verifique que la aplicación no ha sido alterada ni se ha visto corrompida desde que se publicó. Esto le protege ante una posible instalación de una versión de la aplicación que contenga un virus u otro código malintencionado.

Si después de seguir los pasos descritos en este tema determina que el software de la aplicación de TOE de AWS ha sido modificado o está dañado, no ejecute el archivo de instalación. En su lugar, póngase en contacto con. Soporte

Para verificar la validez del archivo binario de awstoe descargado en los sistemas operativos basados en Windows, debe asegurarse de que la huella digital de su certificado de firma de Amazon Services LLC sea igual a este valor:

**9D CA 72 17 DA FF B8 2F E4 C4 67 77 36 2F A4 AA C9 08 82 15**

**nota**  
Durante el período de despliegue de un nuevo binario, es posible que el certificado de firmante no coincida con la nueva huella digital. Si el certificado del firmante no coincide, verifique que el valor de la huella digital sea:   
**BA 81 25 EE AC 64 2E A9 F3 C5 93 CA 6D 3E B7 93 7D 68 75 74**

Para verificar este valor, siga este procedimiento: 

1. Haga clic con el botón derecho en el archivo `awstoe.exe` descargado y abra la ventana **Properties (Propiedades)**.

1. Elija la pestaña **Firmas digitales**.

1. En **Signature List**, elija **Amazon Services LLC** y, a continuación, **Details**.

1. Elija la pestaña **General** si aún no lo ha hecho, y luego elija **Ver certificado**.

1. Elija la pestaña **Detalles** y luego elija **Todos** en la lista desplegable **Mostrar**, si aún no está seleccionada.

1. Desplácese hacia abajo hasta que vea el campo **Huella digital** y, a continuación, seleccione **Huella digital**. Así se muestra el valor completo de la huella digital en la ventana inferior.
   + Si el valor de la huella digital en la ventana inferior es idéntico a este valor:

     **9D CA 72 17 DA FF B8 2F E4 C4 67 77 36 2F A4 AA C9 08 82 15**

     entonces el TOE de AWS binario descargado es auténtico y se puede instalar de forma segura.
   + Si el valor de la huella digital en la ventana de detalles inferior no coincide con el valor anterior, no ejecute `awstoe.exe`.

**Topics**
+ [Verificar la firma de la descarga de la TOE de AWS instalación](awstoe-verify-sig.md)
+ [Paso 1: Instalar TOE de AWS](#toe-start-install)
+ [Paso 2: Defina AWS las credenciales](#toe-start-credentials)
+ [Paso 3: desarrollar los documentos de los componentes a nivel local](#toe-start-develop)
+ [Paso 4: Validar TOE de AWS los componentes](#toe-start-validate)
+ [Paso 5: ejecutar TOE de AWS los componentes](#toe-start-run)

## Paso 1: Instalar TOE de AWS
<a name="toe-start-install"></a>

Para desarrollar componentes localmente, descargue e instale la TOE de AWS aplicación.

1. 

**Descargue la TOE de AWS aplicación**

   Para instalarla TOE de AWS, elija el enlace de descarga adecuado para su arquitectura y plataforma. Para ver la lista completa de los enlaces de descarga de las aplicaciones, consulte [TOE de AWS descargas](toe-component-manager.md#toe-downloads)
**importante**  
AWS está eliminando gradualmente la compatibilidad con las versiones 1.0 y 1.1 de TLS. Para acceder al depósito de S3 para realizar TOE de AWS descargas, el software de su cliente debe usar la versión 1.2 o posterior de TLS. Para obtener más información, consulte esta [entrada de blog de seguridad de AWS](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/).

1. 

**Verificación de la firma**

   Los pasos para verificar la descarga dependen de la plataforma de servidor en la que ejecute la TOE de AWS aplicación después de instalarla. Para verificar la descarga en un servidor Linux, consulte [Verificación de la firma en Linux o macOS](awstoe-verify-sig.md#awstoe-verify-sig-linux). Para comprobar la descarga en un servidor Windows, consulte [Verificación de la firma en Windows](awstoe-verify-sig.md#awstoe-verify-sig-win).

**nota**  
TOE de AWS se invoca directamente desde su ubicación de descarga. No es necesario realizar un paso de instalación independiente. Esto también significa que TOE de AWS puede realizar cambios en el entorno local.  
Para asegurarse de aislar los cambios durante el desarrollo de los componentes, le recomendamos que utilice una EC2 instancia para desarrollar y probar TOE de AWS los componentes.

## Paso 2: Defina AWS las credenciales
<a name="toe-start-credentials"></a>

 TOE de AWS requiere AWS credenciales para conectarse a otros Servicios de AWS, como Amazon S3 y Amazon CloudWatch, al ejecutar tareas, como: 
+ Descargar TOE de AWS documentos desde una ruta de Amazon S3 proporcionada por el usuario.
+ Ejecutar módulos de acción `S3Download` o `S3Upload`.
+ La transmisión de registros a CloudWatch, cuando está habilitada.

Si TOE de AWS ejecutas una EC2 instancia, la ejecución TOE de AWS utiliza los mismos permisos que la función de IAM asociada a la EC2 instancia.

Para obtener más información sobre las funciones de IAM para EC2, consulte [Funciones de IAM para Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html). EC2

Los siguientes ejemplos muestran cómo configurar las AWS credenciales mediante las variables de `AWS_SECRET_ACCESS_KEY` entorno `AWS_ACCESS_KEY_ID` y. 

Para establecer estas variables en Linux, MacOS, o Unix, utilice `export`:

```
export AWS_ACCESS_KEY_ID=your_access_key_id
```

```
export AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

Para configurar estas variables en Windows mediante PowerShell, utilice`$env`.

```
$env:AWS_ACCESS_KEY_ID=your_access_key_id
```

```
$env:AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

Para establecer estas variables en Windows con símbolo del sistema, utilice `set`.

```
set AWS_ACCESS_KEY_ID=your_access_key_id
```

```
set AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

## Paso 3: desarrollar los documentos de los componentes a nivel local
<a name="toe-start-develop"></a>

Los componentes se crean con documentos YAML de texto simple. Para obtener más información sobre sintaxis de documentos, consulte [Utilice el marco de documentos de TOE de AWS componentes para componentes personalizados](toe-use-documents.md).

Los siguientes son ejemplos de documentos de componentes *Hola, mundo* que le ayudarán a empezar.

------
#### [ Linux ]

Algunos de los ejemplos de componentes de Linux de esta guía hacen referencia a un archivo de documento de componentes denominado `hello-world-linux.yml`. Puede utilizar el siguiente documento para empezar con esos ejemplos.

```
name: Hello World
description: This is hello world testing document for Linux.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the test phase.'
```

------
#### [ Windows ]

Algunos de los ejemplos de componentes de Windows de esta guía hacen referencia a un archivo de documento de componentes denominado `hello-world-windows.yml`. Puede utilizar el siguiente documento para empezar con esos ejemplos.

```
name: Hello World
description: This is Hello World testing document for Windows.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the test phase.'
```

------
#### [ macOS ]

Algunos de los ejemplos de componentes de macOS de esta guía hacen referencia a un archivo de documento de componentes denominado `hello-world-macos.yml`. Puede utilizar el siguiente documento para empezar con esos ejemplos.

```
name: Hello World
description: This is hello world testing document for macOS.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the test phase.'
```

------

## Paso 4: Validar TOE de AWS los componentes
<a name="toe-start-validate"></a>

Puede validar la sintaxis de TOE de AWS los componentes localmente con la TOE de AWS aplicación. Los siguientes ejemplos muestran el `validate` comando de la TOE de AWS aplicación para validar la sintaxis de un componente sin ejecutarlo.

**nota**  
La TOE de AWS aplicación solo puede validar la sintaxis del componente para el sistema operativo actual. Por ejemplo, cuando se ejecuta `awstoe.exe` en Windows, no se puede validar la sintaxis de un documento de Linux que utilice el módulo de acción `ExecuteBash`.

Linux o macOS

```
awstoe validate --documents /home/user/hello-world.yml
```

Windows

```
awstoe.exe validate --documents C:\Users\user\Documents\hello-world.yml
```

## Paso 5: ejecutar TOE de AWS los componentes
<a name="toe-start-run"></a>

La TOE de AWS aplicación puede ejecutar una o más fases de documentos específicos mediante el argumento de la línea de `--phases` comandos. Los valores admitidos de `--phases` son `build`, `validate` y `test`. Se pueden introducir varios valores de fase como valores separados por comas.

Al proporcionar una lista de fases, la TOE de AWS aplicación ejecuta secuencialmente las fases especificadas de cada documento. Por ejemplo, TOE de AWS ejecuta las `validate` fases `build` y de`document1.yaml`, seguidas de `validate` las fases `build` y de`document2.yaml`.

Para garantizar que sus registros se almacenen de forma segura y se conserven para la solución de problemas, le recomendamos configurar el almacenamiento de registros en Amazon S3. En Generador de Imágenes, la ubicación de Amazon S3 para publicar los registros se especifica en la configuración de infraestructura. Para obtener más información acerca de la configuración de la infraestructura, consulte [Administre la configuración de la infraestructura de Generador de imágenes](manage-infra-config.md).

Si no se proporciona una lista de fases, la TOE de AWS aplicación ejecuta todas las fases en el orden indicado en el documento YAML.

Para ejecutar fases específicas en uno o varios documentos, utilice los siguientes comandos.

Fase única

```
awstoe run --documents hello-world.yml --phases build
```

Fases múltiples

```
awstoe run --documents hello-world.yml --phases build,test
```

**Ejecución de documentos**  
Ejecución de todas las fases en un solo documento

```
awstoe run --documents documentName.yaml
```

Ejecución de todas las fases en varios documentos

```
awstoe run --documents documentName1.yaml,documentName2.yaml
```

Introduzca la información de Amazon S3 para cargar TOE de AWS los registros desde una ruta local definida por el usuario (recomendado)

```
awstoe run --documents documentName.yaml --log-s3-bucket-name amzn-s3-demo-destination-bucket --log-s3-key-prefix S3KeyPrefix --log-s3-bucket-owner S3BucketOwner --log-directory local_path
```

Ejecución de todas las fases en un solo documento y muestre todos los registros en la consola

```
awstoe run --documents documentName.yaml --trace
```

Comando de ejemplo:

```
awstoe run --documents s3://bucket/key/doc.yaml --phases build,validate
```

Ejecución del documento con un identificador único

```
awstoe run --documents documentName.yaml --execution-id user-provided-id --phases build,test
```

Obtenga ayuda con TOE de AWS

```
awstoe --help
```

# Utilice el marco de documentos de TOE de AWS componentes para componentes personalizados
<a name="toe-use-documents"></a>

Para crear un componente mediante el marco de componentes Ejecutor y orquestador de tareas de AWS (TOE de AWS), debes proporcionar un documento basado en YAML que represente las fases y los pasos que se aplican al componente que crees. Servicios de AWS utilice su componente cuando creen una nueva imagen de máquina de Amazon (AMI) o imagen de contenedor.

**Topics**
+ [Flujo de trabajo de documentos de componentes](#component-doc-workflow)
+ [Registro de componentes](#component-logging)
+ [Encadenamiento de entrada y salida](#document-chaining)
+ [Esquema y definiciones del documento](#document-schema)
+ [Ejemplos de documento](#document-example)
+ [Uso de variables en su documento de componentes personalizados](toe-user-defined-variables.md)
+ [Utilice construcciones condicionales en TOE de AWS](toe-conditional-constructs.md)
+ [Utilice operadores de comparación en los documentos TOE de AWS de componentes](toe-comparison-operators.md)
+ [Utilice operadores lógicos en los documentos TOE de AWS de componentes](toe-logical-operators.md)
+ [Utilice construcciones en bucle en TOE de AWS](toe-looping-constructs.md)

## Flujo de trabajo de documentos de componentes
<a name="component-doc-workflow"></a>

El documento del TOE de AWS componente utiliza fases y pasos para agrupar las tareas relacionadas y organizar esas tareas en un flujo de trabajo lógico para el componente.

**sugerencia**  
El servicio que usa su componente para crear una imagen puede implementar reglas sobre qué fases usar en su proceso de compilación y cuándo se permite la ejecución de esas fases. Es importante tener esto en cuenta a la hora de diseñar el componente.

**Fases**  
Las fases representan la progresión del flujo de trabajo a lo largo del proceso de compilación de imágenes. Por ejemplo, el servicio Generador de Imágenes utiliza las fases `build` y `validate` durante la *etapa de compilación* para las imágenes que produce. Utiliza las fases `test` y `container-host-test` durante la *etapa de prueba* para garantizar que la instantánea de la imagen o la imagen del contenedor generen los resultados esperados antes de crear la AMI final o distribuir la imagen del contenedor.

Cuando se ejecuta el componente, los comandos asociados a cada fase se aplican en el orden en el que aparecen en el documento del componente.

**Reglas para las fases**
+ Cada nombre de fase debe ser único dentro de un documento.
+ Puede definir muchas fases en el documento.
+ Debe incluir al menos una de las siguientes fases en su documento:
  + **compilación**: en el caso de Generador de Imágenes, esta fase se suele utilizar durante la *etapa de compilación*.
  + **validación**: en el caso de Generador de Imágenes, esta fase se suele utilizar durante la *etapa de compilación*.
  + **prueba**: en el caso de Generador de Imágenes, esta fase se suele utilizar durante la *etapa de prueba*.
+ Las fases siempre se ejecutan en el orden en que están definidas en el documento. El orden en el que se especifican para TOE de AWS los comandos del no AWS CLI tiene ningún efecto.

**Steps**  
Los pasos son unidades de trabajo individuales que definen el flujo de trabajo dentro de cada fase. Los pasos se ejecutan en orden secuencial. Sin embargo, la entrada o salida de un paso también puede introducirse a un paso posterior como entrada. Esto se llama “encadenamiento”.

**Reglas para los pasos**
+ El nombre del paso debe ser único para la fase.
+ El paso debe usar una acción compatible (módulo de acción) que devuelva un código de salida.

  Para obtener una lista completa de los módulos de acción compatibles, su funcionamiento, input/output valores y ejemplos, consulte[Módulos de acción compatibles con el administrador de TOE de AWS componentes](toe-action-modules.md).

## Registro de componentes
<a name="component-logging"></a>

TOE de AWS crea una nueva carpeta de registro en las instancias de EC2 que se utilizan para crear y probar una nueva imagen cada vez que se ejecuta el componente. En el caso de las imágenes del contenedor, la carpeta de registro se almacena en el contenedor.

Para ayudar a solucionar problemas en caso de que algo vaya mal durante el proceso de creación de la imagen, el documento de entrada y todos los archivos de salida que se TOE de AWS crean al ejecutar el componente se almacenan en la carpeta de registro.

El nombre de la carpeta de registro consta de las siguientes partes:

1. **Directorio de registro**: cuando un servicio ejecuta un TOE de AWS componente, pasa al directorio de registro junto con otras configuraciones del comando. En los siguientes ejemplos, mostramos el formato de archivo de registro que utiliza Generador de Imágenes.
   + **Linux y macOS**: `/var/lib/amazon/toe/`
   + **Windows**: `$env:ProgramFiles\Amazon\TaskOrchestratorAndExecutor\`

1. **Prefijo del archivo**: se trata de un prefijo estándar que se utiliza para todos los componentes: “`TOE_`”.

1. Tiempo de **ejecución: es una marca de tiempo** en formato YYYY-MM-DD \$1HH-MM-SS\$1UTC-0.

1. **ID de ejecución: es el GUID** que se asigna cuando se ejecutan uno o más componentes. TOE de AWS 

Ejemplo: `/var/lib/amazon/toe/TOE_2021-07-01_12-34-56_UTC-0_a1bcd2e3-45f6-789a-bcde-0fa1b2c3def4`

TOE de AWS almacena los siguientes archivos principales en la carpeta de registro:

**Archivos de entrada**
+ **document.yaml**: el documento que se utiliza como entrada para el comando. Una vez ejecutado el componente, este archivo se almacena como un artefacto.

**Archivos de salida**
+ **application.log**: el registro de la aplicación contiene información a nivel de depuración con marca de tiempo de TOE de AWS sobre lo que ocurre mientras se ejecuta el componente.
+ **detailedoutput.json**: este archivo JSON contiene información detallada sobre el estado de la ejecución, las entradas, las salidas y los errores de todos los documentos, fases y pasos que se aplican al componente a medida que se ejecuta.
+ **console.log**: el registro de la consola contiene toda la información de salida estándar (stdout) y de error estándar (stderr) que TOE de AWS se graba en la consola mientras el componente está en ejecución.
+ **chaining.json**: este archivo JSON representa las optimizaciones que se aplicaron para resolver las expresiones de encadenamiento. TOE de AWS 

**nota**  
Es posible que la carpeta de registro también contenga otros archivos temporales que no se incluyen aquí.

## Encadenamiento de entrada y salida
<a name="document-chaining"></a>

La aplicación TOE de AWS de gestión de la configuración proporciona una función para encadenar entradas y salidas mediante la escritura de referencias en los siguientes formatos:

`{{ phase_name.step_name.inputs/outputs.variable }}`

o

`{{ phase_name.step_name.inputs/outputs[index].variable }}`

La característica de encadenamiento permite reciclar el código y mejorar la capacidad de mantenimiento del documento.

**Reglas de encadenamiento**
+ Las expresiones encadenadas solo se pueden usar en la sección de entradas de cada paso.
+ Las declaraciones con expresiones encadenadas deben ir entre comillas. Por ejemplo:
  + **Expresión no válida**: `echo {{ phase.step.inputs.variable }}`
  + **Expresión válida**: `"echo {{ phase.step.inputs.variable }}"`
  + **Expresión válida**: `'echo {{ phase.step.inputs.variable }}'`
+ Las expresiones encadenadas pueden hacer referencia a variables de otros pasos y fases del mismo documento. Sin embargo, el servicio que lleva a cabo las llamadas puede tener reglas que requieran que las expresiones encadenadas funcionen solo en el contexto de una sola etapa. Por ejemplo, Generador de Imágenes no admite el encadenamiento de la *etapa de compilación* a la *etapa de prueba*, ya que ejecuta cada etapa de forma independiente.
+ Los índices de las expresiones encadenadas siguen la indexación basada en cero. El índice comienza con cero (0) para hacer referencia al primer elemento.

**Ejemplos**

Para hacer referencia a la variable de origen en la segunda entrada del siguiente paso de ejemplo, el patrón de encadenamiento es `{{ build.SampleS3Download.inputs[1].source }}`.

```
phases:
  - name: 'build'
    steps:
      - name: SampleS3Download
        action: S3Download
        timeoutSeconds: 60
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - source: 's3://sample-bucket/sample1.ps1'
            destination: 'C:\sample1.ps1'
          - source: 's3://sample-bucket/sample2.ps1'
            destination: 'C:\sample2.ps1'
```

Para hacer referencia a la variable de salida (igual a “Hola”) en el siguiente paso de ejemplo, el patrón de encadenamiento es `{{ build.SamplePowerShellStep.outputs.stdout }}`.

```
phases:
  - name: 'build'
    steps:
      - name: SamplePowerShellStep
        action: ExecutePowerShell
        timeoutSeconds: 120
        onFailure: Abort
        maxAttempts: 3
        inputs:
          commands:
            - 'Write-Host "Hello"'
```

## Esquema y definiciones del documento
<a name="document-schema"></a>

El siguiente es el esquema YAML de un documento.

```
name: (optional)
description: (optional)
schemaVersion: "string"

phases:
  - name: "string"
    steps:
      - name: "string"
        action: "string"
        timeoutSeconds: integer
        onFailure: "Abort|Continue|Ignore"
        maxAttempts: integer
        inputs:
```

Las definiciones de esquema de un documento son las siguientes:


| Campo | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| Nombre | Nombre del documento. | Cadena | No | 
| description | Descripción del documento. | Cadena |  No  | 
| schemaVersion | versión esquemática del documento, actualmente 1.0. | Cadena |  Sí  | 
| phases | Una lista de fases con sus pasos. |  Enumeración  |  Sí  | 

Las definiciones de esquema de una fase son las siguientes.


| Campo | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| Nombre | Nombre de la fase. | Cadena | Sí | 
| pasos | Lista de los pasos de la fase. | Enumeración  |  Sí  | 

Las definiciones de esquema de un paso son las siguientes.


| Campo | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | 
| --- | --- | --- | --- | --- | 
| Nombre | Nombre definido por el usuario para el paso. | Cadena |  |  | 
| acción | Palabra clave relacionada con el módulo que ejecuta el paso. | Cadena |  |  | 
| timeoutSeconds |  Número de segundos que dura el paso antes de fallar o volver a intentar.  Además, admite el valor -1, que indica un tiempo de espera infinito. No se admiten valores 0 ni otros valores negativos.  | Entero |  No  | 7200 segundos (120 minutos) | 
| onFailure |  Especifica lo que debe hacer el paso en caso de error. Los valores válidos son los siguientes:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-use-documents.html)  |  Cadena  |  No  | Anular | 
| maxAttempts | Número máximo de intentos permitidos antes del fallo del paso. | Entero |  No  | 1 | 
| inputs | Contiene los parámetros requeridos por el módulo de acción para ejecutar el paso. | Dict |  Sí  |  | 

## Ejemplos de documento
<a name="document-example"></a>

Los siguientes ejemplos muestran los documentos de los AWSTOE componentes que realizan tareas para el sistema operativo de destino.

------
#### [ Linux ]

**Ejemplo 1: ejecución de un archivo binario personalizado**  
El siguiente es un ejemplo de documento que descarga y ejecuta un archivo binario personalizado en una instancia Linux.

```
name: LinuxBin
description: Download and run a custom Linux binary file.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: Download
        action: S3Download
        inputs:
          - source: s3://<replaceable>amzn-s3-demo-source-bucket</replaceable>/<replaceable>myapplication</replaceable>
            destination: /tmp/<replaceable>myapplication</replaceable>
      - name: Enable
        action: ExecuteBash
        onFailure: Continue
        inputs:
          commands:
            - 'chmod u+x {{ build.Download.inputs[0].destination }}'
      - name: Install
        action: ExecuteBinary
        onFailure: Continue
        inputs:
          path: '{{ build.Download.inputs[0].destination }}'
          arguments:
            - '--install'
      - name: Delete
        action: DeleteFile
        inputs:
          - path: '{{ build.Download.inputs[0].destination }}'
```

------
#### [ Windows ]

**Ejemplo 1: instalación de actualizaciones de Windows**  
El siguiente es un ejemplo de documento que instala todas las actualizaciones disponibles de Windows, ejecuta un script de configuración, valida los cambios antes de crear la AMI y prueba los cambios después de crear la AMI.

```
name: RunConfig_UpdateWindows
description: 'This document will install all available Windows updates and run a config script. It will then validate the changes before an AMI is created. Then after AMI creation, it will test all the changes.'
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: DownloadConfigScript
        action: S3Download
        timeoutSeconds: 60
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - source: 's3://customer-bucket/config.ps1'
            destination: 'C:\config.ps1'

      - name: RunConfigScript
        action: ExecutePowerShell
        timeoutSeconds: 120
        onFailure: Abort
        maxAttempts: 3
        inputs:
          file: '{{build.DownloadConfigScript.inputs[0].destination}}'

      - name: Cleanup
        action: DeleteFile
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - path: '{{build.DownloadConfigScript.inputs[0].destination}}'

      - name: RebootAfterConfigApplied
        action: Reboot
        inputs:
          delaySeconds: 60

      - name: InstallWindowsUpdates
        action: UpdateOS

  - name: validate
    steps:
      - name: DownloadTestConfigScript
        action: S3Download
        timeoutSeconds: 60
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - source: 's3://customer-bucket/testConfig.ps1'
            destination: 'C:\testConfig.ps1'

      - name: ValidateConfigScript
        action: ExecutePowerShell
        timeoutSeconds: 120
        onFailure: Abort
        maxAttempts: 3
        inputs:
          file: '{{validate.DownloadTestConfigScript.inputs[0].destination}}'

      - name: Cleanup
        action: DeleteFile
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - path: '{{validate.DownloadTestConfigScript.inputs[0].destination}}'

  - name: test
    steps:
      - name: DownloadTestConfigScript
        action: S3Download
        timeoutSeconds: 60
        onFailure: Abort
        maxAttempts: 3
        inputs:
          - source: 's3://customer-bucket/testConfig.ps1'
            destination: 'C:\testConfig.ps1'

      - name: ValidateConfigScript
        action: ExecutePowerShell
        timeoutSeconds: 120
        onFailure: Abort
        maxAttempts: 3
        inputs:
          file: '{{test.DownloadTestConfigScript.inputs[0].destination}}'
```

**Ejemplo 2: Instálelo AWS CLI en una instancia de Windows**  
El siguiente es un ejemplo de documento que lo instala AWS CLI en una instancia de Windows mediante el archivo de configuración.

```
name: InstallCLISetUp
description: Install &CLI; using the setup file
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: Download
        action: S3Download
        inputs:
          - source: s3://aws-cli/AWSCLISetup.exe
            destination: C:\Windows\temp\AWSCLISetup.exe
      - name: Install
        action: ExecuteBinary
        onFailure: Continue
        inputs:
          path: '{{ build.Download.inputs[0].destination }}'
          arguments:
            - '/install'
            - '/quiet'
            - '/norestart'
      - name: Delete
        action: DeleteFile
        inputs:
          - path: '{{ build.Download.inputs[0].destination }}'
```

**Ejemplo 3: Instálelo AWS CLI con el instalador MSI**  
El siguiente es un ejemplo de documento que lo instala AWS CLI con el instalador MSI.

```
name: InstallCLIMSI
description: Install &CLI; using the MSI installer
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: Download
        action: S3Download
        inputs:
          - source: s3://aws-cli/AWSCLI64PY3.msi
            destination: C:\Windows\temp\AWSCLI64PY3.msi
      - name: Install
        action: ExecuteBinary
        onFailure: Continue
        inputs:
          path: 'C:\Windows\System32\msiexec.exe'
          arguments:
            - '/i'
            - '{{ build.Download.inputs[0].destination }}'
            - '/quiet'
            - '/norestart'
      - name: Delete
        action: DeleteFile
        inputs:
          - path: '{{ build.Download.inputs[0].destination }}'
```

------
#### [ macOS ]

**Ejemplo 1: ejecución de un archivo binario de macOS personalizado**  
El siguiente es un ejemplo de documento que descarga y ejecuta un archivo binario personalizado en una instancia de macOS.

```
name: macOSBin
description: Download and run a binary file on macOS.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: Download
        action: S3Download
        inputs:
          - source: s3://<replaceable>amzn-s3-demo-source-bucket</replaceable>/<replaceable>myapplication</replaceable>
            destination: /tmp/<replaceable>myapplication</replaceable>
      - name: Enable
        action: ExecuteBash
        onFailure: Continue
        inputs:
          commands:
            - 'chmod u+x {{ build.Download.inputs[0].destination }}'
      - name: Install
        action: ExecuteBinary
        onFailure: Continue
        inputs:
          path: '{{ build.Download.inputs[0].destination }}'
          arguments:
            - '--install'
      - name: Delete
        action: DeleteFile
        inputs:
          - path: '{{ build.Download.inputs[0].destination }}'
```

------

# Uso de variables en su documento de componentes personalizados
<a name="toe-user-defined-variables"></a>

Las variables proporcionan una forma de etiquetar los datos con nombres significativos que se pueden usar en toda la aplicación. Puedes definir variables personalizadas con formatos sencillos y legibles para flujos de trabajo complejos y hacer referencia a ellas en el documento del componente de la aplicación YAML de un TOE de AWS componente.

En esta sección, se proporciona información que te ayudará a definir las variables de tu TOE de AWS componente en el documento de componentes de la aplicación YAML, incluida la sintaxis, las restricciones de nombres y algunos ejemplos.

## Constantes
<a name="user-defined-vars-constants"></a>

Las constantes son variables inmutables que no se pueden modificar ni anular una vez definidas. Las constantes se pueden definir mediante los valores de la `constants` sección de un TOE de AWS documento.

**Reglas de nomenclatura de constantes**
+ El nombre debe tener entre 3 y 128 caracteres de extensión.
+ El nombre solo puede contener caracteres alfanuméricos (a-z, A-Z y 0-9), guiones (-) o guiones bajos (\$1).
+ El nombre debe ser único dentro del documento.
+ El nombre debe estar especificado como una cadena YAML.

**Sintaxis**

```
constants:
  - <name>:
      type: <constant type>
      value: <constant value>
```


| Nombre de la clave | Obligatorio | Descripción | 
| --- | --- | --- | 
|  `name`  |  Sí  | Nombre de la constante. Debe ser único para el documento (no debe coincidir con ningún otro nombre de parámetro o constante). | 
| `value` | Sí | Valor de la constante. | 
| `type` | Sí | Tipo de la constante. El tipo admitido es string. | 

**Valores constantes de referencia en un documento**  
Puede hacer referencia a las constantes en entradas escalonadas o en bucle dentro de su documento YAML, de la siguiente manera:
+ Las referencias constantes distinguen mayúsculas y minúsculas y el nombre debe coincidir exactamente.
+ El nombre debe estar entre corchetes dobles. `{{` *MyConstant* `}}`
+ Se permiten espacios dentro de las llaves y se recortan automáticamente. Por ejemplo, todas las referencias siguientes son válidas:

  `{{ MyConstant }}`, `{{ MyConstant}}`, `{{MyConstant }}`, `{{MyConstant}}`
+ La referencia del documento YAML debe especificarse como una cadena (entre comillas simples o dobles).

  Por ejemplo: `- {{ MyConstant }}` no es válido, ya que no se identifica como una cadena.

  Sin embargo, las siguientes referencias son válidas: `- '{{ MyConstant }}'` y `- "{{ MyConstant }}"`.

**Ejemplos**  
Constante referenciada en las entradas escalonadas

```
name: Download AWS CLI version 2
schemaVersion: 1.0
constants:
  - Source:
      type: string
      value: https://awscli.amazonaws.com/AWSCLIV2.msi
phases:
  - name: build
    steps:
      - name: Download
        action: WebDownload
        inputs:
          - source: '{{ Source }}'
            destination: 'C:\Windows\Temp\AWSCLIV2.msi'
```

Constante referenciada en las entradas de bucle

```
name: PingHosts
schemaVersion: 1.0
constants:
  - Hosts:
      type: string
      value: 127.0.0.1,amazon.com
phases:
  - name: build
    steps:
      - name: Ping
        action: ExecuteBash
        loop:
          forEach:
            list: '{{ Hosts }}'
            delimiter: ','
        inputs:
          commands:
            - ping -c 4 {{ loop.value }}
```

## Parameters
<a name="user-defined-vars-parameters"></a>

Los parámetros son variables mutables, con ajustes que la aplicación que realiza la llamada puede proporcionar en el tiempo de ejecución. Puede definir los parámetros en la sección `Parameters` del documento YAML.

**Reglas para nombres de parámetros**
+ El nombre debe tener entre 3 y 128 caracteres de extensión.
+ El nombre solo puede contener caracteres alfanuméricos (a-z, A-Z y 0-9), guiones (-) o guiones bajos (\$1).
+ El nombre debe ser único dentro del documento.
+ El nombre debe estar especificado como una cadena YAML.

### Sintaxis
<a name="vars-parameters-syntax"></a>

```
parameters:
  - <name>:
      type: <parameter type>
      default: <parameter value>
      description: <parameter description>
```


| Nombre de la clave | Obligatorio | Descripción | 
| --- | --- | --- | 
| `name` | Sí | El nombre del parámetro. Debe ser único para el documento (no debe coincidir con ningún otro nombre de parámetro o constante). | 
| `type` | Sí | El tipo de datos del parámetro. Los tipos admitidos incluyen: `string`. | 
| `default` | No | El valor predeterminado para el parámetro. | 
| `description` | No | Describe el parámetro. | 

### Valores de parámetros de referencia en un documento
<a name="vars-parameters-referencing"></a>

Puede hacer referencia a los parámetros en entradas escalonadas o en bucle dentro de su documento YAML, de la siguiente manera:
+ Las referencias de parámetros distinguen mayúsculas y minúsculas y el nombre debe coincidir exactamente.
+ El nombre debe estar entre `{{` *MyParameter* `}}` corchetes dobles.
+ Se permiten espacios dentro de las llaves y se recortan automáticamente. Por ejemplo, todas las referencias siguientes son válidas:

  `{{ MyParameter }}`, `{{ MyParameter}}`, `{{MyParameter }}`, `{{MyParameter}}`
+ La referencia del documento YAML debe especificarse como una cadena (entre comillas simples o dobles).

  Por ejemplo: `- {{ MyParameter }}` no es válido, ya que no se identifica como una cadena.

  Sin embargo, las siguientes referencias son válidas: `- '{{ MyParameter }}'` y `- "{{ MyParameter }}"`.

**Ejemplos**  
En los siguientes ejemplos, se muestra cómo utilizar los parámetros del documento YAML:
+ Consulte un parámetro en las entradas escalonadas:

  ```
  name: Download AWS CLI version 2
  schemaVersion: 1.0
  parameters:
    - Source:
        type: string
        default: 'https://awscli.amazonaws.com/AWSCLIV2.msi'
        description: The AWS CLI installer source URL.
  phases:
    - name: build
      steps:
        - name: Download
          action: WebDownload
          inputs:
            - source: '{{ Source }}'
              destination: 'C:\Windows\Temp\AWSCLIV2.msi'
  ```
+ Consulte un parámetro en las entradas de bucle:

  ```
  name: PingHosts
  schemaVersion: 1.0
  parameters:
    - Hosts:
        type: string
        default: 127.0.0.1,amazon.com
        description: A comma separated list of hosts to ping.
  phases:
    - name: build
      steps:
        - name: Ping
          action: ExecuteBash
          loop:
            forEach:
              list: '{{ Hosts }}'
              delimiter: ','
          inputs:
            commands:
              - ping -c 4 {{ loop.value }}
  ```

### Anulación de los parámetros en tiempo de ejecución
<a name="vars-parameters-set-at-runtime"></a>

Puede utilizar la `--parameters` opción AWS CLI con un par clave-valor para establecer el valor de un parámetro en tiempo de ejecución.
+ Especifique el par clave-valor del parámetro como nombre y valor, separados por un signo igual (<name>=<value>).
+ Varios parámetros deben estar separados por una coma.
+ Se ignoran los nombres de los parámetros que no se encuentran en el documento de componentes de YAML.
+ Tanto el nombre como el valor del parámetro son obligatorios.

**importante**  
Los parámetros del componente son valores de texto sin formato y se registran en AWS CloudTrail. Le recomendamos que utilice AWS Secrets Manager nuestro almacén de AWS Systems Manager parámetros para almacenar sus secretos. Para obtener más información sobre Secrets Manager, consulte [¿Qué es Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) en la *Guía del usuario de AWS Secrets Manager *. Para obtener más información acerca del almacén de parámetros de AWS Systems Manager , consulte [Almacén de parámetros de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) en la *Guía del usuario de AWS Systems Manager *.

#### Sintaxis
<a name="vars-runtime-parameters-syntax"></a>

```
--parameters name1=value1,name2=value2...
```


| Opción de la CLI | Obligatorio | Description (Descripción) | 
| --- | --- | --- | 
| --parámetros *name* =*value*,... | No | Esta opción toma una lista de pares clave-valor, con el nombre del parámetro como clave. | 

**Ejemplos**  
En los siguientes ejemplos, se muestra cómo utilizar los parámetros del documento YAML:
+ El par clave-valor del parámetro especificado en esta opción `--parameter` no es válido:

  ```
  --parameters ntp-server=
  ```
+ Establezca un par clave-valor de un parámetro con la opción `--parameter` en el AWS CLI:

  ```
  --parameters ntp-server=ntp-server-windows-qe.us-east1.amazon.com
  ```
+ Establezca varios pares clave-valor de parámetros con la opción `--parameter` en el AWS CLI:

  ```
  --parameters ntp-server=ntp-server.amazon.com,http-url=https://internal-us-east1.amazon.com
  ```

## Utilice los parámetros del almacén de parámetros de Systems Manager
<a name="toe-ssm-parameters"></a>

Puede hacer referencia a los AWS Systems Manager parámetros del almacén de parámetros (parámetros SSM) en los documentos de sus componentes añadiendo el prefijo a las variables. `aws:ssm` Por ejemplo: 

`{{ aws:ssm:/my/param }}`se resuelve en el valor del parámetro SSM. `/my/param`

Esta función admite los siguientes tipos de parámetros de SSM:
+ Cadena: se asigna al tipo de TOE de AWS cadena.
+ StringList — Se asigna al TOE de AWS `stringList` tipo.
+ SecureString — Se asigna al tipo de TOE de AWS cadena.

Para obtener más información sobre el almacén de parámetros, consulte el [almacén de AWS Systems Manager parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) en la *Guía del AWS Systems Manager usuario*.

También puede hacer referencia a AWS Secrets Manager los secretos mediante un parámetro `SecureString` SSM. Por ejemplo: `{{ aws:ssm:/aws/reference/secretsmanager/test/test-secret }}`. Para obtener más información, consulte Hacer [referencia a AWS Secrets Manager los secretos de los parámetros del almacén de parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/integration-ps-secretsmanager.html).

**importante**  
Image Builder excluye la resolución de `SecureString` parámetros de sus registros. Sin embargo, también es responsable de garantizar que la información confidencial no se registre mediante los comandos incluidos en el documento del componente. Por ejemplo, si utiliza el `echo` comando con una cadena segura, el comando escribirá un valor de texto simple en el registro.

### Permisos de IAM necesarios
<a name="toe-ssm-parameters-permissions"></a>

Para usar los parámetros de Systems Manager en sus componentes, su rol de instancia debe tener el `ssm:GetParameter` permiso para el ARN del recurso de parámetros. Por ejemplo:

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ssm:GetParameter",
			"Resource": "arn:aws:ssm:*:111122223333:parameter/ImageBuilder-*"
		}
	]
}
```

------

Para acceder a los valores cifrados, también necesitarás los siguientes permisos:
+ Agregue `kms:Decrypt` `SecureString` parámetros o AWS Secrets Manager valores cifrados con un administrador por el cliente AWS KMS key.
+ `secretsmanager:GetSecretValue`Añádelo si haces referencia a un secreto de Secrets Manager.

### Haga referencia a un parámetro SSM en un documento de componentes
<a name="toe-ssm-parameters-example"></a>

El siguiente ejemplo muestra cómo hacer referencia a un parámetro del almacén de parámetros de Systems Manager de los parámetros de Systems Manager de un componente:

```
name: UseSSMParameterVariable
description: This is a sample component document that prints out the value of an SSM Parameter. Never do this for a SecureString parameter.
schemaVersion: 1.0

phases:
  - name: verify
    steps:
      - name: EchoParameterValue
        action: ExecuteBash
        inputs:
          commands:
            - echo "Log SSM parameter name: /my/test/param, value {{ aws:ssm:/my/test/param }}."
```

### Resolución dinámica de variables de tiempo de ejecución para los parámetros de SSM
<a name="toe-dynamic-vars"></a>

AWSTOE proporciona la siguiente función integrada que puede utilizar en las referencias de variables para manipular o transformar valores en tiempo de ejecución.

#### función de resolución
<a name="toe-function-resolve"></a>

La `resolve` función resuelve una referencia de variable dentro de otra referencia de variable, lo que permite hacer referencias dinámicas a nombres de variables. Esto resulta útil cuando se trabaja con parámetros de SSM, en los que parte de la ruta del parámetro puede ser variable y transferirse como parámetro del documento.

La `resolve` función solo admite la resolución dinámica de la parte del nombre de un parámetro de SSM.

##### Sintaxis
<a name="toe-function-resolve-syntax"></a>

El `dynamic_variable` ejemplo siguiente representa el nombre de un parámetro SSM y debe ser uno de los siguientes:
+ Una referencia de parámetro SSM (por ejemplo,) `aws:ssm:/my/param`
+ Una referencia de parámetros de un documento de componentes (por ejemplo,`parameter-name`)

```
{{ aws:ssm:resolve(dynamic_variable) }}
```

##### Ejemplo: resolver un parámetro SSM en tiempo de ejecución
<a name="toe-function-resolve-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar la `resolve` función en un documento de componentes de YAML:

```
name: SsmParameterTest
description: This component verifies an SSM parameter variable reference with the echo command.
schemaVersion: 1.0

parameters:
  - parameter-name:
      type: string
      description: "test"

phases:
  - name: validate
    steps:
      - name: PrintDynamicVariable
        action: ExecuteBash
        inputs:
          commands:
            - echo "{{ aws:ssm:resolve(parameter-name) }}"
```

# Utilice construcciones condicionales en TOE de AWS
<a name="toe-conditional-constructs"></a>

Los constructos condicionales realizan diferentes acciones en el documento componente en función de si la expresión condicional especificada se evalúa como `true` o `false`. Puede utilizar el constructo `if` para controlar el flujo de ejecución del documento del componente.

## Constructo if
<a name="toe-conditional-if"></a>

Puede utilizar el constructo `if` para evaluar si un paso debe ejecutarse o no. De forma predeterminada, cuando la expresión condicional `if` se evalúa como `true`, TOE de AWS ejecuta el paso y cuando la condición se evalúa como `false`, TOE de AWS se salta el paso. Si se omite un paso, se considera un paso correcto cuando TOE de AWS evalúa si la fase y el documento se han ejecutado correctamente.

**nota**  
Una instrucción `if` solo se evalúa una vez, incluso si el paso desencadena un reinicio. Si un paso se reinicia, reconoce que la instrucción `if` ya se ha evaluado y continúa donde la dejó.

### Sintaxis
<a name="toe-conditional-if-syntax"></a>

```
if:
  - <conditional expression>:
      [then: <step action>]
      [else: <step action>]
```


| Nombre de la clave | Obligatorio | Description (Descripción) | 
| --- | --- | --- | 
| expresión condicional | Sí |  La expresión condicional puede contener exactamente uno de los siguientes tipos de operadores en el nivel superior. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-conditional-constructs.html) Si la expresión debe cumplir varias condiciones, utilice un operador lógico para especificarlas.  | 
| then | No |  Define la acción que se debe realizar si la expresión condicional se evalúa como `true`.  | 
| else | No |  Define la acción que se debe realizar si la expresión condicional se evalúa como `false`.  | 
| acción de paso | Condicional |  Al utilizar `then` o `else`, debe especificar una de las siguientes acciones de pasos: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-conditional-constructs.html)  | 

**Ejemplo 1: instalación de un paquete**  
Los siguientes pasos de ejemplo de un documento de TOE de AWS componentes utilizan operadores lógicos para probar el valor de un parámetro y ejecutar los comandos del administrador de paquetes adecuados para instalar una aplicación si el paquete está descomprimido.

```
    - name: InstallUnzipAptGet
      action: ExecuteBash
      if:
        and:
            - binaryExists: 'apt-get'
            - not:
                binaryExists: 'unzip'
      inputs:
        commands:
            - sudo apt-get update
            - sudo apt-get install -y unzip

    - name: InstallUnzipYum
      action: ExecuteBash
      if:
        and:
            - binaryExists: 'yum'
            - not:
                binaryExists: 'unzip'
      inputs:
        commands:
            - sudo yum install -y unzip

    - name: InstallUnzipZypper
      action: ExecuteBash
      if:
        and:
            - binaryExists: 'zypper'
            - not:
                binaryExists: 'unzip'
      inputs:
        commands:
            - sudo zypper refresh
            - sudo zypper install -y unzip
```

**Ejemplo 2: omisión de un paso**  
El siguiente ejemplo muestra dos formas de omitir un paso. Una usa un operador lógico y la otra usa un operador de comparación con la acción del paso `Skip`.

```
# Creates a file if it does not exist using not
- name: CreateMyConfigFile-1
  action: ExecuteBash
  if:
    not:
      fileExists: '/etc/my_config'
  inputs:
    commands:
      - echo "Hello world" > '/etc/my_config'

# Creates a file if it does not exist using then and else
- name: CreateMyConfigFile-2
  action: ExecuteBash
  if:
    fileExists: '/etc/my_config'
    then: Skip
    else: Execute
  inputs:
    commands:
      - echo "Hello world" > '/etc/my_config'
```

# Utilice operadores de comparación en los documentos TOE de AWS de componentes
<a name="toe-comparison-operators"></a>

Puede utilizar los siguientes operadores de comparación con el módulo de acción **[Assert](toe-action-modules.md#action-modules-assertion)** y con las expresiones condicionales que utilizan [Constructo ifSintaxis](toe-conditional-constructs.md#toe-conditional-if). Un operador de comparación puede operar con un único valor, por ejemplo, `stringIsEmpty`, o puede comparar un valor de referencia con un segundo valor (valor variable) para determinar si la expresión condicional se evalúa como `true` o `false`.

Si la comparación funciona con dos valores, el segundo valor puede ser una variable encadenante.

Al comparar valores de un tipo diferente, se pueden producir las siguientes conversiones de valores antes de la comparación:
+ Para las comparaciones numéricas, si el valor de la variable es una cadena, TOE de AWS convierte la cadena en un número antes de la evaluación. Si la conversión no es posible, la comparación devuelve el resultado `false`. Por ejemplo, si el valor de la variable es `"1.0"`, la conversión funciona, pero si el valor de la variable es `"a10"`, la conversión falla.
+ Para las comparaciones de cadenas, si el valor de la variable es un número, lo TOE de AWS convierte en una cadena antes de la evaluación.

## Comparación de cadenas
<a name="toe-compare-strings"></a>

Los siguientes operadores de comparación funcionan con cadenas para comparar valores, comprobar si hay espacios o una cadena vacía, o para comparar un valor de entrada con un patrón de expresiones regulares. Las comparaciones de cadenas no distinguen entre mayúsculas y minúsculas y no recortan los espacios desde el principio o el final de las entradas de cadenas.

**Operadores de comparación de cadenas**
+ [stringIsEmpty](#stringIsEmpty)
+ [stringIsWhitespace](#stringIsWhitespace)
+ [stringEquals](#stringEquals)
+ [stringLessThan](#stringLessThan)
+ [stringLessThanEquals](#stringLessThanEquals)
+ [stringGreaterThan](#stringGreaterThan)
+ [stringGreaterThanEquals](#stringGreaterThanEquals)
+ [patternMatches](#patternMatches)

**stringIsEmpty**  
El operador `stringIsEmpty` devuelve `true` si la cadena especificada no contiene ningún carácter. Por ejemplo:  

```
# Evaluates to true
stringIsEmpty: ""

# Evaluates to false
stringIsEmpty: " "
				
# Evaluates to false
stringIsEmpty: "Hello."
```

**stringIsWhitespace**  
Comprueba si la cadena especificada para `stringIsWhitespace` contiene solo espacios. Por ejemplo:  

```
# Evaluates to true
stringIsWhitespace: "   "

# Evaluates to false
stringIsWhitespace: ""
				
# Evaluates to false
stringIsWhitespace: " Hello?"
```

**stringEquals**  
Comprueba si la cadena especificada para `stringEquals` coincide exactamente con la cadena especificada en el parámetro `value`. Por ejemplo:  

```
# Evaluates to true
stringEquals: 'Testing, testing...'
value: 'Testing, testing...'

# Evaluates to false
stringEquals: 'Testing, testing...'
value: 'Hello again.'

# Evaluates to false
stringEquals: 'Testing, testing...'
value: 'TESTING, TESTING....'

# Evaluates to false
stringEquals: 'Testing, testing...'
value: '   Testing, testing...'
				
# Evaluates to false
stringEquals: 'Testing, testing...'
value: 'Testing, testing...   '
```

**stringLessThan**  
Comprueba si la cadena especificada para `stringLessThan` es inferior a la cadena especificada en el parámetro `value`. Por ejemplo:  

```
# Evaluates to true
# This comparison operator isn't case sensitive
stringlessThan: 'A'
value: 'a'

# Evaluates to true - 'a' is less than 'b'
stringlessThan: 'b'
value: 'a'

# Evaluates to true
# Numeric strings compare as less than alphabetic strings
stringlessThan: 'a'
value: '0'

# Evaluates to false
stringlessThan: '0'
value: 'a'
```

**stringLessThanEs igual a**  
Comprueba si la cadena especificada para `stringLessThanEquals` es inferior o igual a la cadena especificada en el parámetro `value`. Por ejemplo:  

```
# Evaluates to true - 'a' is equal to 'a'
stringLessThanEquals: 'a'
value: 'a'

# Evaluates to true - since the comparison isn't case sensitive, 'a' is equal to 'A'
stringLessThanEquals: 'A'
value: 'a'

# Evaluates to true - 'a' is less than 'b'
stringLessThanEquals: 'b'
value: 'a'

# Evaluates to true - '0' is less than 'a'
stringLessThanEquals: 'a'
value: '0'

# Evaluates to false - 'a' is greater than '0'
stringLessThanEquals: '0'
value: 'a'
```

**stringGreaterThan**  
Comprueba si la cadena especificada para `stringGreaterThan` es superior a la cadena especificada en el parámetro `value`. Por ejemplo:  

```
# Evaluates to false - since the comparison isn't case sensitive, 'A' is equal to 'a'
stringGreaterThan: 'a'
value: 'A'

# Evaluates to true - 'b' is greater than 'a'
stringGreaterThan: 'a'
value: 'b'

# Evaluates to true - 'a' is greater than '0'
stringGreaterThan: '0'
value: 'a'

# Evaluates to false - '0' is less than 'a'
stringGreaterThan: 'a'
value: '0'
```

**stringGreaterThanIguales**  
Comprueba si la cadena especificada para `stringGreaterThanEquals` es superior o igual a la cadena especificada en el parámetro `value`. Por ejemplo:  

```
# Evaluates to true - 'a' is equal to 'A'
stringGreaterThanEquals: 'A'
value: 'a'

# Evaluates to true - 'b' is greater than 'a'
stringGreaterThanEquals: 'a'
value: 'b'

# Evaluates to true - 'a' is greater than '0'
stringGreaterThanEquals: '0'
value: 'a'

# Evaluates to false - '0' is less than 'a'
stringGreaterThanEquals: 'a'
value: '0'
```

**patternMatches**  
Comprueba si la cadena especificada en el parámetro `value` coincide con el patrón de expresiones regulares especificado para `patternMatches`. La comparación utiliza el [paquete de expresiones regulares de Golang](https://pkg.go.dev/regexp), que se ajusta a la sintaxis. RE2 Para obtener más información sobre RE2 las reglas, consulte el repositorio [google/](https://github.com/google/re2/wiki/Syntax) re2 en. *GitHub*  
En el siguiente ejemplo, se muestra una coincidencia de patrones que devuelve `true`:  

```
patternMatches: '^[a-z]+$'
value: 'ThisIsValue'
```

## Comparación de números
<a name="toe-compare-numbers"></a>

Los siguientes operadores de comparación funcionan con números. Los valores proporcionados para estos operadores deben ser de uno de los siguientes tipos, según la especificación YAML. La admisión de comparaciones numéricas utiliza el operador de comparación de paquetes grandes de Golang, por ejemplo: [func (\$1Float) Cmp](https://pkg.go.dev/math/big#Float.Cmp).
+ Entero
+ Float (basado en float64, admite números del -1,7e\$1308 al \$11,7e\$1308)
+ Cadena que coincide con el siguiente patrón de expresiones regulares: `^[-+]?([0-9]+[.])?[0-9]+$`

**Operadores de comparación de números**
+ [numberEquals](#numberEquals)
+ [numberLessThan](#numberLessThan)
+ [numberLessThanEquals](#numberLessThanEquals)
+ [numberGreaterThan](#numberGreaterThan)
+ [numberGreaterThanEquals](#numberGreaterThanEquals)

**numberEquals**  
Comprueba si el número especificado para `numberEquals` es igual al número especificado en el parámetro `value`. Todos los ejemplos de comparación siguientes devuelven `true`:  

```
# Values provided as a positive number
numberEquals: 1
value: 1

# Comparison value provided as a string
numberEquals: '1'
value: 1

# Value provided as a string
numberEquals: 1
value: '1'

# Values provided as floats
numberEquals: 5.0
value: 5.0

# Values provided as a negative number
numberEquals: -1
value: -1
```

**numberLessThan**  
Comprueba si el número especificado para `numberLessThan` es inferior al número especificado en el parámetro `value`. Por ejemplo:  

```
# Evaluates to true
numberLessThan: 2
value: 1

# Evaluates to true
numberLessThan: 2
value: 1.9

# Evaluates to false
numberLessThan: 2
value: '2'
```

**numberLessThanEs igual a**  
Comprueba si el número especificado para `numberLessThanEquals` es inferior o igual al número especificado en el parámetro `value`. Por ejemplo:  

```
# Evaluates to true
numberLessThanEquals: 2
value: 1

# Evaluates to true
numberLessThanEquals: 2
value: 1.9

# Evaluates to true
numberLessThanEquals: 2
value: '2'

# Evaluates to false
numberLessThanEquals: 2
value: 2.1
```

**numberGreaterThan**  
Comprueba si el número especificado para `numberGreaterThan` es superior al número especificado en el parámetro `value`. Por ejemplo:  

```
# Evaluates to true
numberGreaterThan: 1
value: 2

# Evaluates to true
numberGreaterThan: 1
value: 1.1

# Evaluates to false
numberGreaterThan: 1
value: '1'
```

**numberGreaterThanIguales**  
Comprueba si el número especificado para `numberGreaterThanEquals` es superior o igual al número especificado en el parámetro `value`. Por ejemplo:  

```
# Evaluates to true
numberGreaterThanEquals: 1
value: 2

# Evaluates to true
numberGreaterThanEquals: 1
value: 1.1

# Evaluates to true
numberGreaterThanEquals: 1
value: '1'

# Evaluates to false
numberGreaterThanEquals: 1
value: 0.8
```

## Control de archivos
<a name="toe-check-files"></a>

Los siguientes operadores de comparación comprueban el hash del archivo o comprueban si existe un archivo o una carpeta.

**Operadores de archivos y carpetas**
+ [binaryExists](#binaryExists)
+ [fileExists](#fileExists)
+ [folderExists](#folderExists)
+ [fileMD5Equals](#fileMD5Equals)
+ [fileSHA1Equals](#fileSHA1Equals)
+ [fileSHA256Equals](#fileSHA256Equals)
+ [fileSHA512Equals](#fileSHA512Equals)

**binaryExists**  
Comprueba si una aplicación está disponible en la ruta actual. Por ejemplo:  

```
binaryExists: 'foo'
```
En los sistemas Linux y macOS, para una aplicación llamada*foo*, esto funciona igual que el siguiente comando bash:**type *foo* >/dev/null 2>&1**, donde **\$1? == 0** indica que la comparación se ha realizado correctamente.  
En los sistemas Windows, para una aplicación denominada*foo*, funciona igual que el PowerShell comando que **\$1LASTEXITCODE = 0** indica que la comparación **& C:\$1Windows\$1System32\$1where.exe /Q *foo*** se ha realizado correctamente.

**fileExists**  
Comprueba si un archivo existe en la ruta especificada. Puede proporcionar una ruta absoluta o relativa. Si la ubicación que especifique existe y es un archivo, la comparación se evaluará como `true`. Por ejemplo:  

```
fileExists: '/path/to/file'
```
En los sistemas Linux y macOS, funciona igual que el siguiente comando bash: **-d */path/to/file***, donde **\$1? == 0** indica que la comparación se ha realizado correctamente.  
En los sistemas Windows, funciona igual que el PowerShell comando**Test-Path -Path '*C:\$1path\$1to\$1file*' -PathType 'Leaf'**.

**folderExists**  
Comprueba si existe una carpeta en la ruta especificada. Puede proporcionar una ruta absoluta o relativa. Si la ubicación que especifique existe y es una carpeta, la comparación se evaluará como `true`. Por ejemplo:  

```
folderExists: '/path/to/folder'
```
En los sistemas Linux y macOS, funciona igual que el siguiente comando bash: **-d */path/to/folder***, donde **\$1? == 0** indica que la comparación se ha realizado correctamente.  
En los sistemas Windows, funciona igual que el PowerShell comando**Test-Path -Path '*C:\$1path\$1to\$1folder*' -PathType 'Container'**.

**el archivo MD5 es igual a**  
Comprueba si el MD5 hash de un archivo es igual a un valor especificado. Por ejemplo:  

```
fileMD5Equals: '<MD5Hash>'
path: '/path/to/file'
```

**el archivo SHA1 es igual a**  
Comprueba si el SHA1 hash de un archivo es igual a un valor especificado. Por ejemplo:  

```
fileSHA1Equals: '<SHA1Hash>'
path: '/path/to/file'
```

**el archivo SHA256 es igual a**  
Comprueba si el SHA256 hash de un archivo es igual a un valor especificado. Por ejemplo:  

```
fileSHA256Equals: '<SHA256Hash>'
path: '/path/to/file'
```

**el archivo SHA512 es igual a**  
Comprueba si el SHA512 hash de un archivo es igual a un valor especificado. Por ejemplo:  

```
fileSHA512Equals: '<SHA512Hash>'
path: '/path/to/file'
```

# Utilice operadores lógicos en los documentos TOE de AWS de componentes
<a name="toe-logical-operators"></a>

Puede utilizar los siguientes operadores lógicos para añadir o modificar expresiones condicionales en el documento componente. TOE de AWS evalúa las expresiones condicionales en el orden en que se especifican las condiciones. Para obtener más información sobre los operadores de comparación de los documentos de componentes, consulte [Utilice operadores de comparación en los documentos TOE de AWS de componentes](toe-comparison-operators.md).

**y**  
Con el operador `and`, puede evaluar dos o más comparaciones como una sola expresión. La expresión se evalúa como `true` cuando se cumplen todas las condiciones de la lista. De lo contrario, la expresión se evalúa como `false`.  
**Ejemplos:**  
En el siguiente ejemplo se realizan dos comparaciones: una cadena y un número. Ambas comparaciones son verdaderas, por lo que la expresión se evalúa como verdadera.

```
and:
  - stringEquals: 'test_string'
    value: 'test_string'
  - numberEquals: 1
    value: 1
```
En el siguiente ejemplo también se realizan dos comparaciones. La primera comparación es falsa, momento en el que se detiene la evaluación y se omite la segunda comparación. La expresión se evalúa como `false`.  

```
and:
  - stringEquals: 'test_string'
    value: 'Hello world!'
  - numberEquals: 1
    value: 1
```

**o bien**  
Con el operador `or`, puede evaluar dos o más comparaciones como una sola expresión. La expresión se evalúa como `true` cuando una de las comparaciones especificadas es verdadera. Si ninguna de las comparaciones especificadas se evalúa como `true`, la expresión se evalúa como `false`.  
**Ejemplos:**  
En el siguiente ejemplo se realizan dos comparaciones: una cadena y un número. La primera comparación es verdadera, por lo que la expresión se evalúa como `true` y se omite la segunda comparación.

```
or:
  - stringEquals: 'test_string'
    value: 'test_string'
  - numberEquals: 1
    value: 3
```
En el siguiente ejemplo también se realizan dos comparaciones. La primera comparación es falsa y la evaluación continúa. La segunda comparación es verdadera, por lo que la expresión se evalúa como `true`.  

```
or:
  - stringEquals: 'test_string'
    value: 'Hello world!'
  - numberEquals: 1
    value: 1
```
En el último ejemplo, ambas comparaciones son falsas, por lo que la expresión se evalúa como `false`.  

```
or:
  - stringEquals: 'test_string'
    value: 'Hello world!'
  - numberEquals: 1
    value: 3
```

**not**  
Con el operador `not`, puede anular una sola comparación. La expresión se evalúa como `true` si la comparación es falsa. Si la comparación es verdadera, la expresión se evalúa como `false`.  
**Ejemplos:**  
En el siguiente ejemplo, se realiza una comparación de cadenas. La comparación es falsa, por lo que la expresión se evalúa como `true`.

```
not:
  - stringEquals: 'test_string'
    value: 'Hello world!'
```
En el siguiente ejemplo también se realiza una comparación de cadenas. La comparación es verdadera, por lo que la expresión se evalúa como `false`.  

```
not:
  - stringEquals: 'test_string'
    value: 'test_string'
```

# Utilice construcciones en bucle en TOE de AWS
<a name="toe-looping-constructs"></a>

En esta sección se proporciona información que le ayudará a crear constructos en bucle en TOE de AWS. Los constructos en bucle definen una secuencia repetida de instrucciones. Puede utilizar los siguientes tipos de constructos en bucle en TOE de AWS:
+ Constructos `for`: se repiten en iteraciones sobre una secuencia acotada de números enteros.
+ Constructos `forEach`
  + Bucle `forEach` con lista de entradas: se repite en iteraciones sobre una colección finita de cadenas. 
  + Bucle `forEach` con lista delimitada: repite una colección finita de cadenas unidas por un delimitador.

**nota**  
Los constructos en bucle solo admiten tipos de datos de cadena.

**Topics**
+ [Variables de iteración de referencia](#toe-loop-iteration-variables)
+ [Tipos de constructos en bucle](#toe-loop-types)
+ [Campos de pasos](#toe-loop-step-fields)
+ [Salidas de paso e iteración](#toe-loop-step-output)

## Variables de iteración de referencia
<a name="toe-loop-iteration-variables"></a>

Para hacer referencia al índice y al valor de la variable de iteración actual, la expresión de referencia `{{ loop.* }}` debe usarse en el cuerpo de entrada de un paso que contenga un constructo en bucle. Esta expresión no se puede utilizar para hacer referencia a las variables de iteración del constructo en bucle de otro paso.

La expresión de referencia consta de los siguientes miembros:
+ `{{ loop.index }}`: la posición ordinal de la iteración actual, que está indexada en `0`. 
+ `{{ loop.value }}`: el valor asociado a la variable de iteración actual. 

### Nombres de bucles
<a name="toe-loop-iteration-variables-names"></a>

 Todos los constructos en bucle tienen un campo de nombre opcional para su identificación. Si se proporciona un nombre de bucle, este se puede utilizar para hacer referencia a las variables de iteración del cuerpo de entrada del paso. Para hacer referencia a los índices y valores de iteración de un bucle denominado, utilice `{{ <loop_name>.* }}` con `{{ loop.* }}` en el cuerpo de entrada del paso. Esta expresión no se puede utilizar para hacer referencia al constructo en bucle denominado de otro paso. 

La expresión de referencia consta de los siguientes miembros:
+ `{{ <loop_name>.index }}`: la posición ordinal de la iteración actual del bucle denominado, que está indexada en `0`.
+ `{{ <loop_name>.value }}` : el valor asociado a la variable de iteración actual del bucle denominado.

### Resolución de expresiones de referencia
<a name="toe-loop-iteration-variables-expressions"></a>

 TOE de AWS Resuelve las expresiones de referencia de la siguiente manera: 
+ `{{ <loop_name>.* }}`— TOE de AWS resuelve esta expresión mediante la siguiente lógica:
  + Si el bucle del paso que se está ejecutando actualmente coincide con el valor `<loop_name>`, la expresión de referencia se convierte en el constructo en bucle del paso que se está ejecutando actualmente.
  + `<loop_name>` se resuelve en el constructo de bucle denominado si aparece dentro del paso que se está ejecutando actualmente.
+ `{{ loop.* }}`— TOE de AWS resuelve la expresión mediante la construcción de bucle definida en el paso que se está ejecutando actualmente.

Si se utilizan expresiones de referencia en un paso que no contiene un bucle, TOE de AWS no resuelve las expresiones y aparecen en el paso sin sustituirlas. 

**nota**  
Las expresiones de referencia deben estar entre comillas dobles para que el compilador YAML las interprete correctamente.

## Tipos de constructos en bucle
<a name="toe-loop-types"></a>

Esta sección contiene información y ejemplos sobre los tipos de constructos en bucle que se pueden utilizar en TOE de AWS.

**Topics**
+ [Bucle `for`](#toe-loop-types-for)
+ [Bucle `forEach` con lista de entradas](#toe-loop-types-foreach)
+ [Bucle `forEach` con lista delimitada](#toe-loop-types-foreach-delimited)

### Bucle `for`
<a name="toe-loop-types-for"></a>

El bucle `for` itera en un rango de enteros especificado dentro de un límite delimitado por el inicio y el final de las variables. Los valores iterativos están en el conjunto `[start, end]` e incluyen los valores límite.

TOE de AWS verifica los `updateBy` valores `start``end`, y para garantizar que la combinación no dé como resultado un bucle infinito.

Esquema de bucle `for`

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      for:
        start: int
        end: int
        updateBy: int
inputs:
  ...
```


**Entrada de bucle `for`**  

| Campo | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | 
| --- | --- | --- | --- | --- | 
|  `name`  | Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase. |  Cadena  |  No  |  ""  | 
|  `start`  | Valor inicial de la iteración. No acepta expresiones encadenadas.  |  Entero  |  Sí  |  n/a  | 
| `end` | Valor final de la iteración. No acepta expresiones encadenadas.  | Entero | Sí | n/a | 
| `updateBy` | Diferencia por la que un valor iterativo se actualiza mediante la adición. Debe ser un valor negativo o positivo distinto de cero. No acepta expresiones encadenadas.  | Entero | Sí | n/a | 

Ejemplo de entrada de bucle `for`

```
  - name: "CalculateFileUploadLatencies"
    action: "ExecutePowerShell"
    loop:
      for:
        start: 100000
        end: 1000000
        updateBy: 100000
    inputs:
      commands:
        - |
          $f = new-object System.IO.FileStream c:\temp\test{{ loop.index }}.txt, Create, ReadWrite
          $f.SetLength({{ loop.value }}MB)
          $f.Close()
        - c:\users\administrator\downloads\latencyTest.exe --file c:\temp\test{{ loop.index }}.txt
        - AWS s3 cp c:\users\administrator\downloads\latencyMetrics.json s3://bucket/latencyMetrics.json
        - |
          Remove-Item -Path c:\temp\test{{ loop.index }}.txt
          Remove-Item -Path c:\users\administrator\downloads\latencyMetrics.json
```

### Bucle `forEach` con lista de entradas
<a name="toe-loop-types-foreach"></a>

El bucle `forEach` itera en una lista explícita de valores, que pueden ser cadenas y expresiones encadenadas. 

Bucle `forEach` con esquema de lista de entrada

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      forEach:
        - "string"
    inputs:
  ...
```


**Bucle `forEach` con entrada de lista de entrada**  

| Campo | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | 
| --- | --- | --- | --- | --- | 
|  `name`  | Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase. |  Cadena  |  No  |  ""  | 
|  Lista de cadenas de bucle `forEach`  |  Lista de cadenas para la iteración. Acepta expresiones encadenadas como cadenas en la lista. Las expresiones encadenadas deben estar entre comillas dobles para que el compilador YAML las interprete correctamente.  |  Lista de cadenas  |  Sí  |  n/a  | 

Bucle `forEach` con lista de entradas (ejemplo 1)

```
  - name: "ExecuteCustomScripts"
    action: "ExecuteBash"
    loop:
      name: BatchExecLoop
      forEach:
        - /tmp/script1.sh
        - /tmp/script2.sh
        - /tmp/script3.sh
    inputs:
      commands:
        - echo "Count {{ BatchExecLoop.index }}"
        - sh "{{ loop.value }}"
        - |
          retVal=$?
          if [ $retVal -ne 0 ]; then
            echo "Failed"
          else
            echo "Passed"
         fi
```

Bucle `forEach` con lista de entradas (ejemplo 2)

```
  - name: "RunMSIWithDifferentArgs"
    action: "ExecuteBinary"
    loop:
      name: MultiArgLoop
      forEach:
        - "ARG1=C:\Users ARG2=1"
        - "ARG1=C:\Users"
        - "ARG1=C:\Users ARG3=C:\Users\Administrator\Documents\f1.txt"
    inputs:
      commands:
        path: "c:\users\administrator\downloads\runner.exe"
        args:
          - "{{ MultiArgLoop.value }}"
```

Bucle `forEach` con lista de entradas (ejemplo 3)

```
  - name: "DownloadAllBinaries"
    action: "S3Download"
    loop:
      name: MultiArgLoop
      forEach:
        - "bin1.exe"
        - "bin10.exe"
        - "bin5.exe"
    inputs:
      - source: "s3://bucket/{{ loop.value }}"
        destination: "c:\temp\{{ loop.value }}"
```

### Bucle `forEach` con lista delimitada
<a name="toe-loop-types-foreach-delimited"></a>

El bucle itera sobre una cadena que contiene valores separados por un delimitador. Para recorrer en iteración los componentes de la cadena, TOE de AWS utiliza el delimitador para dividir la cadena en una matriz adecuada para la iteración. 

Bucle `forEach` con esquema de lista delimitada

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      forEach:
        list: "string"
        delimiter: ".,;:\n\t -_"
    inputs:
  ...
```


**Bucle `forEach` con entrada de lista delimitada**  

| Campo | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | 
| --- | --- | --- | --- | --- | 
|  `name`  | Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase. |  Cadena  |  No  |  ""  | 
|  `list`  | Cadena compuesta por cadenas constitutivas unidas por un carácter delimitador común. También acepta expresiones encadenadas. En el caso de expresiones encadenadas, asegúrese de que estén entre comillas dobles para que el compilador de YAML las interprete correctamente. | Cadena |  Sí  |  n/a  | 
| `delimiter` | Carácter que se usa para separar las cadenas dentro de un bloque. El valor predeterminado es el carácter de coma. Solo se permite un carácter delimitador de la lista dada: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-looping-constructs.html) No se pueden utilizar expresiones encadenadas. | Cadena | No | Coma: "," | 

**nota**  
El valor de `list` se trata como una cadena inmutable. Si la fuente de `list` se cambia durante el tiempo de ejecución, no se reflejará durante la ejecución.

Bucle `forEach` con lista delimitada (ejemplo 1)

Este ejemplo utiliza el siguiente patrón de expresión de encadenamiento para hacer referencia al resultado de otro paso: `<phase_name>.<step_name>.[inputs | outputs].<var_name>`.

```
  - name: "RunMSIs"
    action: "ExecuteBinary"
    loop:
      forEach:
        list: "{{ build.GetAllMSIPathsForInstallation.outputs.stdout }}"
        delimiter: "\n"
    inputs:
      commands:
        path: "{{ loop.value }}"
```

Bucle `forEach` con lista delimitada (ejemplo 2)

```
  - name: "UploadMetricFiles"
    action: "S3Upload"
    loop:
      forEach:
        list: "/tmp/m1.txt,/tmp/m2.txt,/tmp/m3.txt,..."
    inputs:
      commands:
        - source: "{{ loop.value }}"
          destination: "s3://bucket/key/{{ loop.value }}"
```

## Campos de pasos
<a name="toe-loop-step-fields"></a>

Los bucles son parte de un paso. Los campos relacionados con la ejecución de un paso no se aplican a las iteraciones individuales. Los campos de paso se aplican solo a nivel del paso, de la siguiente manera:
+ *timeoutSeconds*: todas las iteraciones del bucle deben ejecutarse dentro del período de tiempo especificado en este campo. Si se agota el tiempo de espera del bucle, TOE de AWS ejecuta la política de reintentos del paso y restablece el parámetro de tiempo de espera para cada nuevo intento. Si la ejecución del bucle supera el valor de tiempo de espera tras alcanzar el número máximo de reintentos, el mensaje de error del paso indica que se ha agotado el tiempo de espera de la ejecución del bucle. 
+ *onFailure*: la administración de errores se aplica al paso de la siguiente manera:
  + Si *OnFailure* está establecido en`Abort`, TOE de AWS sale del bucle y vuelve a intentar el paso de acuerdo con la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual como fallido y detiene la ejecución del proceso.

    TOE de AWS establece el código de estado de la fase principal y el documento en. `Failed`
**nota**  
No se ejecutarán más pasos después del paso con errores.
  + Si *onFailure* está establecido como `Continue`, TOE de AWS sale del bucle y vuelve a intentar el paso de acuerdo con la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual como fallido y continúa con el paso siguiente.

    TOE de AWS establece el código de estado de la fase principal y el documento en. `Failed`
  + Si *onFailure* está establecido como `Ignore`, TOE de AWS sale del bucle y vuelve a intentar el paso de acuerdo con la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual como `IgnoredFailure` y continúa hasta ejecutar el paso siguiente.

    TOE de AWS establece el código de estado de la fase principal y el documento en. `SuccessWithIgnoredFailure`
**nota**  
Esto sigue considerándose una ejecución correcta, pero incluye información que le permite saber que uno o más pasos tienen errores y se ignoraron.
+ *maxAttempts*: para cada reintento, todo el paso y todas las iteraciones se ejecutan desde el principio.
+ *status*: el estado general de la ejecución de un paso. `status` no representa el estado de las iteraciones individuales. El estado de un paso con bucles se determina de la siguiente manera:
  + Si no se puede ejecutar una sola iteración, el estado de un paso indica que se ha producido un error.
  + Si todas las iteraciones se realizan correctamente, el estado de un paso indica que se ha realizado correctamente.
+ *startTime*: hora de inicio general de la ejecución de un paso. No representa la hora de inicio de las iteraciones individuales.
+ *endTime*: la hora de finalización general de la ejecución de un paso. No representa la hora de finalización de las iteraciones individuales.
+ *failureMessage*: incluye los índices de iteración que fallaron en caso de errores sin tiempo de espera. En caso de errores de tiempo de espera, el mensaje indica que se produjo un error en la ejecución del bucle. No se proporcionan mensajes de error individuales para cada iteración para minimizar el tamaño de los mensajes de error.

## Salidas de paso e iteración
<a name="toe-loop-step-output"></a>

Cada iteración contiene una salida. Al final de una ejecución en bucle, TOE de AWS consolida todos los resultados de la iteración correcta. `detailedOutput.json` Las salidas consolidadas son una recopilación de valores que pertenecen a las claves de salida correspondientes, como se define en el esquema de salida del módulo de acción. El siguiente ejemplo muestra cómo se consolidan las salidas:

**Salida de `ExecuteBash` para la iteración 1**

```
{
	"stdout":"Hello"
}
```

**Salida de `ExecuteBash` para la iteración 2**

```
{
	"stdout":"World"
}
```

**Salida de `ExecuteBash` para el paso**

```
{
	"stdout":"Hello\nWorld"
}
```

Por ejemplo, `ExecuteBash`, `ExecutePowerShell` y `ExecuteBinary` son módulos de acción que se devuelven `STDOUT` como salida del módulo de acción. Los mensajes `STDOUT` se unen con el carácter de la nueva línea para producir la salida general del paso en `detailedOutput.json`.

TOE de AWS no consolidará los resultados de las iteraciones fallidas.

# Módulos de acción compatibles con el administrador de TOE de AWS componentes
<a name="toe-action-modules"></a>

Los servicios de creación de imágenes, como Image Builder de EC2, TOE de AWS utilizan módulos de acción para ayudar a configurar las instancias de EC2 que se utilizan para crear y probar imágenes de máquinas personalizadas. En esta sección se describen las características de los módulos de TOE de AWS acción más utilizados y cómo configurarlos, e incluye ejemplos.

los componentes se crean con documentos YAML de texto simple. Para obtener más información sobre sintaxis de documentos, consulte [Utilice el marco de documentos de TOE de AWS componentes para componentes personalizados](toe-use-documents.md).

**nota**  
Todos los módulos de acción utilizan la misma cuenta que Systems Manager Agent cuando se ejecutan: `root` en Linux y `NT Authority\SYSTEM` en Windows.

La siguiente referencia cruzada clasifica los módulos de acción por el tipo de acciones que realizan.

 

**Ejecución general**
+ [Assert (Linux, Windows, macOS)](#action-modules-assertion)
+ [ExecuteBash (Linux, macOS)](#action-modules-executebash)
+ [ExecuteBinary (Linux, Windows, macOS)](#action-modules-executebinary)
+ [ExecuteDocument (Linux, Windows, macOS)](#action-modules-executedocument)
+ [ExecutePowerShell (Windows)](#action-modules-executepowershell)

 

**Módulos de descarga y carga de archivos**
+ [S3Download (Linux, Windows, macOS)](#action-modules-s3download)
+ [S3Upload (Linux, Windows, macOS)](#action-modules-s3upload)
+ [WebDownload (Linux, Windows, macOS)](#action-modules-webdownload)

 

**Operaciones del sistema de archivos**
+ [AppendFile (Linux, Windows, macOS)](#action-modules-appendfile)
+ [CopyFile (Linux, Windows, macOS)](#action-modules-copyfile)
+ [CopyFolder (Linux, Windows, macOS)](#action-modules-copyfolder)
+ [CreateFile (Linux, Windows, macOS)](#action-modules-createfile)
+ [CreateFolder (Linux, Windows, macOS)](#action-modules-createfolder)
+ [CreateSymlink (Linux, Windows, macOS)](#action-modules-createsymlink)
+ [DeleteFile (Linux, Windows, macOS)](#action-modules-deletefile)
+ [DeleteFolder (Linux, Windows, macOS)](#action-modules-deletefolder)
+ [ListFiles (Linux, Windows, macOS)](#action-modules-listfiles)
+ [MoveFile (Linux, Windows, macOS)](#action-modules-movefile)
+ [MoveFolder (Linux, Windows, macOS)](#action-modules-movefolder)
+ [ReadFile (Linux, Windows, macOS)](#action-modules-readfile)
+ [SetFileEncoding (Linux, Windows, macOS)](#action-modules-setfileencoding)
+ [SetFileOwner (Linux, Windows, macOS)](#action-modules-setfileowner)
+ [SetFolderOwner (Linux, Windows, macOS)](#action-modules-setfolderowner)
+ [SetFilePermissions (Linux, Windows, macOS)](#action-modules-setfilepermissions)
+ [SetFolderPermissions (Linux, Windows, macOS)](#action-modules-setfolderpermissions)

 

**Acciones de instalación de software**
+ [InstallMSI (Windows)](#action-modules-install-msi)
+ [UninstallMSI (Windows)](#action-modules-uninstall-msi)

 

**Acciones del sistema**
+ [Reboot (Linux, Windows)](#action-modules-reboot)
+ [SetRegistry (Windows)](#action-modules-setregistry)
+ [UpdateOS (Linux, Windows)](#action-modules-updateos)

## Módulos de ejecución general
<a name="action-modules-general-execution"></a>

La siguiente sección contiene detalles sobre los módulos de acción que ejecutan comandos y controlan el flujo de trabajo de ejecución.

**Topics**
+ [Assert (Linux, Windows, macOS)](#action-modules-assertion)
+ [ExecuteBash (Linux, macOS)](#action-modules-executebash)
+ [ExecuteBinary (Linux, Windows, macOS)](#action-modules-executebinary)
+ [ExecuteDocument (Linux, Windows, macOS)](#action-modules-executedocument)
+ [ExecutePowerShell (Windows)](#action-modules-executepowershell)

### Assert (Linux, Windows, macOS)
<a name="action-modules-assertion"></a>

El módulo de acción **Assert** realiza comparaciones de valores utilizando [Operadores de comparación](toe-comparison-operators.md) o [Logical operators (Operadores lógicos)](toe-logical-operators.md) como entrada. El resultado de la expresión del operador (verdadero o falso) indica el estado general de éxito o fracaso del paso.

Si la expresión del operador lógico o de comparación se evalúa como `true`, el paso se marca como `Success`. De lo contrario, el paso se marca como `Failed`. Si el paso falla, el parámetro `onFailure` decide el resultado del paso.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| input | Contiene un único operador lógico o de comparación. Tenga en cuenta que los operadores lógicos pueden contener más de un operador de comparación. | Varía en función del operador | Sí | 

**Ejemplo de entrada: una comparación sencilla con el operador de comparación `stringEquals`**

En este ejemplo se obtiene el resultado `true`.

```
- name: StringComparison
  action: Assert
  inputs:
    stringEquals: '2.1.1'
    value: '{{ validate.ApplicationVersion.outputs.stdout }}'
```

**Ejemplo de entrada: comparaciones de expresiones regulares mediante el operador de comparación `patternMatches`**

Todos estos ejemplos dan como resultado `true`.

```
- name: Letters only
  action: Assert
  inputs:
    patternMatches: '^[a-zA-Z]+$'
    value: 'ThisIsOnlyLetters'

- name: Letters and spaces only
  action: Assert
  inputs:
    patternMatches: '^[a-zA-Z\s]+$'
    value: 'This text contains spaces'
  
- name: Numbers only
  action: Assert
  inputs:
    patternMatches: '^[0-9]+$'
    value: '1234567890'
```

**Ejemplo de entrada: comparaciones anidadas con operadores lógicos y variables encadenadas**

El siguiente ejemplo muestra las comparaciones anidadas con operadores lógicos que utilizan comparaciones con variables encadenadas. `Assert` evalúa `true` si se cumple alguna de las siguientes condiciones:
+ La `ApplicationVersion` es mayor que `2.0` y la `CPUArchitecture` igual a `arm64`.
+ La `CPUArchitecture` es igual a `x86_64`.

```
- name: NestedComparisons
  action: Assert
  inputs:
    or: # <- first level deep
      - and: # <- second level deep
          - numberGreaterThan: 2.0 # <- third level deep
            value: '{{ validate.ApplicationVersion.outputs.stdout }}'
          - stringEquals: 'arm64'
            value: '{{ validate.CPUArchitecture.outputs.stdout }}'
      - stringEquals: 'x86_64'
        value: '{{ validate.CPUArchitecture.outputs.stdout }}'
```

**Salida:**

El resultado de un paso `Assert` es el éxito o el fracaso del paso.

### ExecuteBash (Linux, macOS)
<a name="action-modules-executebash"></a>

El módulo de **ExecuteBash**acción le permite ejecutar scripts bash con códigos/comandos de shell integrados. Este módulo es compatible con Linux. 

Todos los comandos e instrucciones que especifique en el bloque de comandos se convierten en un archivo (por ejemplo `input.sh`) y se ejecutan con el intérprete de comandos bash. El resultado de ejecutar el archivo del intérprete de comandos es el código de salida del paso. 

El **ExecuteBash**módulo gestiona los reinicios del sistema si el script se cierra con un código de salida de. `194` Cuando esto ocurre, la aplicación realiza una de las siguientes acciones:
+ La aplicación entrega el código de salida a la persona que llama si lo ejecuta Systems Manager Agent. Systems Manager Agent gestiona el reinicio del sistema y ejecuta el mismo paso que lo inició, tal y como se describe en [Reiniciar una instancia gestionada desde scripts](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html).
+ La aplicación guarda el `executionstate` actual, configura un activador de reinicio para volver a ejecutar la aplicación y reinicia el sistema.

Tras reiniciar el sistema, la aplicación ejecuta el mismo paso que inició el reinicio. Si necesita esta funcionalidad, debe escribir scripts idempotentes que puedan gestionar múltiples invocaciones del mismo comando del intérprete de comandos.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| commands | Contiene una lista de instrucciones o comandos para ejecutar según la sintaxis de bash. Se permite el YAML multilínea. | Enumeración | Sí | 

**Ejemplo de entrada: antes y después de un reinicio**

```
name: ExitCode194Example
description: This shows how the exit code can be used to restart a system with ExecuteBash
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: RestartTrigger
        action: ExecuteBash
        inputs:
          commands:
            - |
              REBOOT_INDICATOR=/var/tmp/reboot-indicator
              if [ -f "${REBOOT_INDICATOR}" ]; then
                echo 'The reboot file exists. Deleting it and exiting with success.'
                rm "${REBOOT_INDICATOR}"
                exit 0
              fi
              echo 'The reboot file does not exist. Creating it and triggering a restart.'
              touch "${REBOOT_INDICATOR}"
              exit 194
```


**Output**  

| Campo | Description (Descripción) | Tipo | 
| --- | --- | --- | 
| stdout | Resultado estándar de la ejecución de comandos. | cadena | 

Si inicia un reinicio y devuelve el código de salida `194` como parte del módulo de acción, la compilación se reanudará en el mismo paso del módulo de acción en el que se inició el reinicio. Si inicia un reinicio sin el código de salida, es posible que se produzca un error en el proceso de compilación.

**Ejemplo de resultado: antes del reinicio (primera vez a través del documento)**

```
{
	“stdout”: “The reboot file does not exist. Creating it and triggering a restart."
}
```

**Ejemplo de resultado: después del reinicio (segunda vez a través del documento)**

```
{
	“stdout”: “The reboot file exists. Deleting it and exiting with success."
}
```

### ExecuteBinary (Linux, Windows, macOS)
<a name="action-modules-executebinary"></a>

El módulo de **ExecuteBinary**acción permite ejecutar archivos binarios con una lista de argumentos de línea de comandos.

El **ExecuteBinary**módulo gestiona los reinicios del sistema si el archivo binario se cierra con un código de salida de `194` (Linux) o `3010` (Windows). Cuando esto ocurre, la aplicación realiza una de las siguientes acciones:
+ La aplicación entrega el código de salida a la persona que llama si lo ejecuta Systems Manager Agent. Systems Manager Agent gestiona el reinicio del sistema y ejecuta el mismo paso que lo inició, tal y como se describe en [Reiniciar una instancia gestionada desde scripts](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html).
+ La aplicación guarda el `executionstate` actual, configura un activador de reinicio para volver a ejecutar la aplicación y reinicia el sistema.

Una vez reiniciado el sistema, la aplicación ejecuta el mismo paso que inició el reinicio. Si necesita esta funcionalidad, debe escribir scripts idempotentes que puedan gestionar múltiples invocaciones del mismo comando del intérprete de comandos.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| path | La ruta de acceso al archivo binario que se va a ejecutar. | Cadena | Sí | 
| arguments | Contiene una lista de argumentos de la línea de comandos que se utilizarán al ejecutar el archivo binario. | Lista de cadenas | No | 

**Ejemplo de entrada: install.NET**

```
  - name: "InstallDotnet"
    action: ExecuteBinary
    inputs:
      path: C:\PathTo\dotnet_installer.exe
      arguments:
        - /qb
        - /norestart
```


**Output**  

| Campo | Description (Descripción) | Tipo | 
| --- | --- | --- | 
| stdout | Resultado estándar de la ejecución de comandos. | cadena | 

**Ejemplo de resultados**

```
{
	"stdout": "success"
}
```

### ExecuteDocument (Linux, Windows, macOS)
<a name="action-modules-executedocument"></a>

El módulo de **ExecuteDocument**acción añade soporte para documentos de componentes anidados, al ejecutar varios documentos de componentes desde un documento. TOE de AWS valida el documento que se pasa en el parámetro de entrada en tiempo de ejecución.

**Restricciones**
+ Este módulo de acción se ejecuta una vez, no se permiten reintentos y no existe la opción de establecer límites de tiempo de espera. **ExecuteDocument**establece los siguientes valores predeterminados y devuelve un error si intenta cambiarlos.
  + `timeoutSeconds`: -1
  + `maxAttempts`: 1
**nota**  
Puede dejar estos valores en blanco y TOE de AWS utilizar los valores predeterminados.
+ Se permite la anidación de documentos con una profundidad de hasta tres niveles, pero no más. Tres niveles de anidación se traducen en cuatro niveles de documento, ya que el nivel superior no está anidado. En este escenario, el documento de nivel inferior no debe incluir a ningún otro documento.
+ No se permite la ejecución cíclica de los documentos componentes. Cualquier documento que se llame a sí mismo fuera de una construcción en bucle, o que llame a otro documento en un nivel superior de la cadena de ejecución actual, inicia un ciclo que puede dar como resultado un bucle sin fin. Cuando TOE de AWS detecta una ejecución cíclica, la detiene y registra el error.

![\[Restricciones de nivel de anidación para el módulo de ExecuteDocument acción.\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/images/toe-component-document-nesting.png)


Si un documento componente intenta ejecutarse por sí mismo o ejecutar alguno de los documentos componentes que se encuentran más arriba en la cadena de ejecución actual, se produce un error en la ejecución.

**Entrada**


| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| document |  Ruta del documento componente. Entre las opciones válidas se incluyen: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Cadena | Sí | 
| document-s3-bucket-owner |  ID de la cuenta del propietario del bucket de S3 para el bucket de S3 donde se almacenan los documentos de los componentes. *(Se recomienda si utiliza S3 URIs en el documento de componentes).*  | Cadena | No | 
| phases |  Fases que se ejecutarán en el documento de componentes, expresadas como una lista separada por comas. Si no se especifica ninguna fase, se ejecutan todas las fases.  | Cadena | No | 
| parameters |  Parámetros de entrada que se pasan al documento del componente en tiempo de ejecución como pares de valores clave.  | Lista de mapas de parámetros | No | 

**Entrada de mapa de parámetros**


| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| name |  El nombre del parámetro de entrada que se va a pasar al documento del componente que está ejecutando el módulo de **ExecuteDocument**acción.  | Cadena | Sí | 
| value |  El valor de un parámetro de entrada.  | Cadena | Sí | 

**Ejemplos de entradas**  
Los ejemplos siguientes muestran variaciones de las entradas del documento de componentes, en función de la ruta de instalación.

**Ejemplo de entrada: ruta del documento local**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: Sample-1.yaml
          phases: build
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Ejemplo de entrada: URI de S3 como ruta de documento**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: s3://my-bucket/Sample-1.yaml
          document-s3-bucket-owner: 123456789012
          phases: build,validate
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Ejemplo de entrada: ARN del componente Generador de Imágenes de EC2 como ruta de documento**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        inputs:
          document: arn:aws:imagebuilder:us-west-2:aws:component/Sample-Test/1.0.0
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Uso de un ForEach bucle para ejecutar documentos**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        loop:
          name: 'myForEachLoop'
          forEach:
            - Sample-1.yaml
            - Sample-2.yaml
        inputs:
          document: "{{myForEachLoop.value}}"
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Uso de un bucle For para ejecutar documentos**

```
# main.yaml
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ExecuteNestedDocument
        action: ExecuteDocument
        loop:
          name: 'myForLoop'
          for:
            start: 1
            end: 2
            updateBy: 1
        inputs:
          document: "Sample-{{myForLoop.value}}.yaml"
          phases: test
          parameters:
            - name: parameter-1
              value: value-1
            - name: parameter-2
              value: value-2
```

**Output**  
TOE de AWS crea un archivo de salida llamado `detailedoutput.json` cada vez que se ejecuta. El archivo contiene detalles sobre cada fase y paso de cada documento componente que se invoca mientras se está ejecutando. Para el módulo de **ExecuteDocument**acciones, encontrará un breve resumen del tiempo de ejecución en el `outputs` campo y detalles sobre las fases, los pasos y los documentos en los que se ejecuta`detailedOutput`.

```
{
	\"executedStepCount\":1,\"executionId\":\"97054e22-06cc-11ec-9b14-acde48001122\",\"failedStepCount\":0,\"failureMessage\":\"\",\"ignoredFailedStepCount\":0,\"logUrl\":\"\",\"status\":\"success\"
}",
```

El objeto de resumen de resultados de cada documento componente contiene los siguientes detalles, como se muestra aquí, con valores de ejemplo:
+ executedStepCount«:1
+ "executionId":"12345a67-89bc-01de-2f34-abcd56789012"
+ «failedStepCount«:0
+ "failureMessage":""
+ «ignoredFailedStepContar»: 0
+ "logUrl":""
+ "status":"success"

**Ejemplo de resultados**  
El siguiente ejemplo muestra el resultado del módulo de **ExecuteDocument**acciones cuando se produce una ejecución anidada. En este ejemplo, el documento componente `main.yaml` ejecuta correctamente el documento componente `Sample-1.yaml`.

```
{
    "executionId": "12345a67-89bc-01de-2f34-abcd56789012",
    "status": "success",
    "startTime": "2021-08-26T17:20:31-07:00",
    "endTime": "2021-08-26T17:20:31-07:00",
    "failureMessage": "",
    "documents": [
        {
            "name": "",
            "filePath": "main.yaml",
            "status": "success",
            "description": "",
            "startTime": "2021-08-26T17:20:31-07:00",
            "endTime": "2021-08-26T17:20:31-07:00",
            "failureMessage": "",
            "phases": [
                {
                    "name": "build",
                    "status": "success",
                    "startTime": "2021-08-26T17:20:31-07:00",
                    "endTime": "2021-08-26T17:20:31-07:00",
                    "failureMessage": "",
                    "steps": [
                        {
                            "name": "ExecuteNestedDocument",
                            "status": "success",
                            "failureMessage": "",
                            "timeoutSeconds": -1,
                            "onFailure": "Abort",
                            "maxAttempts": 1,
                            "action": "ExecuteDocument",
                            "startTime": "2021-08-26T17:20:31-07:00",
                            "endTime": "2021-08-26T17:20:31-07:00",
                            "inputs": "[{\"document\":\"Sample-1.yaml\",\"document-s3-bucket-owner\":\"\",\"phases\":\"\",\"parameters\":null}]",
                            "outputs": "[{\"executedStepCount\":1,\"executionId\":\"98765f43-21ed-09cb-8a76-fedc54321098\",\"failedStepCount\":0,\"failureMessage\":\"\",\"ignoredFailedStepCount\":0,\"logUrl\":\"\",\"status\":\"success\"}]",
                            "loop": null,
                            "detailedOutput": [
                                {
                                    "executionId": "98765f43-21ed-09cb-8a76-fedc54321098",
                                    "status": "success",
                                    "startTime": "2021-08-26T17:20:31-07:00",
                                    "endTime": "2021-08-26T17:20:31-07:00",
                                    "failureMessage": "",
                                    "documents": [
                                        {
                                            "name": "",
                                            "filePath": "Sample-1.yaml",
                                            "status": "success",
                                            "description": "",
                                            "startTime": "2021-08-26T17:20:31-07:00",
                                            "endTime": "2021-08-26T17:20:31-07:00",
                                            "failureMessage": "",
                                            "phases": [
                                                {
                                                    "name": "build",
                                                    "status": "success",
                                                    "startTime": "2021-08-26T17:20:31-07:00",
                                                    "endTime": "2021-08-26T17:20:31-07:00",
                                                    "failureMessage": "",
                                                    "steps": [
                                                        {
                                                            "name": "ExecuteBashStep",
                                                            "status": "success",
                                                            "failureMessage": "",
                                                            "timeoutSeconds": 7200,
                                                            "onFailure": "Abort",
                                                            "maxAttempts": 1,
                                                            "action": "ExecuteBash",
                                                            "startTime": "2021-08-26T17:20:31-07:00",
                                                            "endTime": "2021-08-26T17:20:31-07:00",
                                                            "inputs": "[{\"commands\":[\"echo \\\"Hello World!\\\"\"]}]",
                                                            "outputs": "[{\"stdout\":\"Hello World!\"}]",
                                                            "loop": null,
                                                            "detailedOutput": null
                                                        }]
                                                }]
                                        }]
                                }]
                        }]
                
                }]
        }]
}
```

### ExecutePowerShell (Windows)
<a name="action-modules-executepowershell"></a>

El módulo de **ExecutePowerShell**acción permite ejecutar PowerShell scripts con códigos o comandos de shell integrados. Este módulo es compatible con la plataforma Windows y Windows. PowerShell

Todo lo commands/instructions especificado en el bloque de comandos se convierte en un archivo de script (por ejemplo`input.ps1`) y se ejecuta con WindowsPowerShell. El resultado de ejecutar el archivo del intérprete de comandos es el código de salida.

El **ExecutePowerShell**módulo gestiona los reinicios del sistema si el comando shell se cierra con un código de salida de. `3010` Cuando esto ocurre, la aplicación realiza una de las siguientes acciones: 
+ La aplicación entrega el código de salida a la persona que llama si lo ejecuta el Systems Manager Agent. Systems Manager Agent gestiona el reinicio del sistema y ejecuta el mismo paso que lo inició, tal y como se describe en [Reiniciar una instancia gestionada desde scripts](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html).
+ La aplicación guarda el `executionstate` actual, configura un activador de reinicio para volver a ejecutar la aplicación y reinicia el sistema.

Tras reiniciar el sistema, la aplicación ejecuta el mismo paso que inició el reinicio. Si necesita esta funcionalidad, debe escribir scripts idempotentes que puedan gestionar múltiples invocaciones del mismo comando del intérprete de comandos.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| commands | Contiene una lista de instrucciones o comandos que se deben ejecutar según PowerShell la sintaxis. Se permite el YAML multilínea. | Lista de cadenas | Sí. Debe especificar los `commands` o el `file` no ambos.  | 
| file | Contiene la ruta a un archivo de PowerShell script. PowerShell se ejecutará en este archivo mediante el argumento de la línea de -file comandos. La ruta debe apuntar a un archivo .ps1. | Cadena | Sí. Debe especificar los `commands` o el `file` no ambos.  | 

**Ejemplo de entrada: antes y después de un reinicio**

```
name: ExitCode3010Example
description: This shows how the exit code can be used to restart a system with ExecutePowerShell
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: RestartTrigger
        action: ExecutePowerShell
        inputs:
          commands:
            - |
              $rebootIndicator = Join-Path -Path $env:SystemDrive -ChildPath 'reboot-indicator'
              if (Test-Path -Path $rebootIndicator) {
                Write-Host 'The reboot file exists. Deleting it and exiting with success.'
                Remove-Item -Path $rebootIndicator -Force | Out-Null
                [System.Environment]::Exit(0)
              }
              Write-Host 'The reboot file does not exist. Creating it and triggering a restart.'
              New-Item -Path $rebootIndicator -ItemType File | Out-Null
              [System.Environment]::Exit(3010)
```


**Output**  

| Campo | Description (Descripción) | Tipo | 
| --- | --- | --- | 
| stdout | Resultado estándar de la ejecución de comandos. | cadena | 

Si ejecuta un reinicio y devuelve el código de salida `3010` como parte del módulo de acción, la compilación se reanudará en el mismo paso del módulo de acción en el que se inició el reinicio. Si ejecuta un reinicio sin el código de salida, es posible que se produzca un error en el proceso de compilación.

**Ejemplo de resultado: antes del reinicio (primera vez a través del documento)**

```
{
	“stdout”: “The reboot file does not exist. Creating it and triggering a restart."
}
```

**Ejemplo de resultado: después del reinicio (segunda vez a través del documento)**

```
{
	“stdout”: “The reboot file exists. Deleting it and exiting with success."
}
```

## Módulos de descarga y carga de archivos
<a name="action-modules-download-upload"></a>

La siguiente sección contiene detalles sobre los módulos de acción que cargan o descargan archivos.

**Topics**
+ [S3Download (Linux, Windows, macOS)](#action-modules-s3download)
+ [S3Upload (Linux, Windows, macOS)](#action-modules-s3upload)
+ [WebDownload (Linux, Windows, macOS)](#action-modules-webdownload)

### S3Download (Linux, Windows, macOS)
<a name="action-modules-s3download"></a>

Con el módulo de acción `S3Download`, puede descargar un objeto de Amazon S3, o un conjunto de objetos, a un archivo o carpeta local que especifique con la ruta `destination`. Si ya existe algún archivo en la ubicación especificada y el indicador `overwrite` está establecido como true, `S3Download` sobrescribe el archivo.

Su ubicación `source` puede apuntar a un objeto específico en Amazon S3, o puede usar un prefijo de clave con un asterisco como comodín (`*`) para descargar un conjunto de objetos que coincidan con la ruta del prefijo de clave. Al especificar un prefijo de clave en su ubicación `source`, el módulo de acción `S3Download` descarga todo lo que coincida con el prefijo (archivos y carpetas incluidos). Asegúrese de que el prefijo de clave termine con una barra diagonal seguida de un asterisco (`/*`), para descargar todo lo que coincida con el prefijo. Por ejemplo: `s3://my-bucket/my-folder/*`.

Si la acción `S3Download` de un prefijo de clave especificado falla durante una descarga, el contenido de la carpeta no vuelve a su estado anterior al error. La carpeta de destino permanece tal y como estaba en el momento del error.

**Casos de uso admitidos**  
El módulo de acción `S3Download` admite los siguientes casos de uso:
+ El objeto Amazon S3 se descarga en una carpeta local, tal y como se especifica en la ruta de descarga.
+ Los objetos de Amazon S3 (con un prefijo de clave en la ruta del archivo de Amazon S3) se descargan en la carpeta local especificada, que copia de forma recursiva todos los objetos de Amazon S3 que coincidan con el prefijo de la clave en la carpeta local.

**Requisitos de IAM**  
El rol de IAM que asocie al perfil de instancia debe tener permiso para ejecutar el módulo de acción `S3Download`. Las siguientes políticas de IAM se deben adjuntar al rol de IAM asociado al perfil de instancia:
+ **Archivo único**: `s3:GetObject` contra bucket/object (por ejemplo,`arn:aws:s3:::BucketName/*`).
+ **Varios archivos**: `s3:ListBucket` contra bucket/object (por ejemplo,`arn:aws:s3:::BucketName`) y `s3:GetObject` contra bucket/object (por ejemplo,`arn:aws:s3:::BucketName/*`).


**Input**  

|  Key  |  Description (Descripción)  |  Tipo  |  Obligatorio/a  |  Predeterminado  | 
| --- | --- | --- | --- | --- | 
|  `source`  |  El bucket de Amazon S3 que es el origen de la descarga. Puede especificar una ruta a un objeto específico o utilizar un prefijo de clave que termine con una barra diagonal seguida de un asterisco comodín (`/*`), para descargar un conjunto de objetos que coincidan con el prefijo de clave.  |  Cadena  |  Sí  |  N/A  | 
|  `destination`  |  La ruta local en la que se descargan los objetos de Amazon S3. Para descargar un solo archivo, debe especificarse el nombre del archivo como parte de la ruta. Por ejemplo, `/myfolder/package.zip`.  |  Cadena  |  Sí  |  N/A  | 
|  `expectedBucketOwner`  |  ID de la cuenta de propietario esperada del bucket proporcionado en la ruta `source`. Le recomendamos que compruebe la propiedad del bucket de Amazon S3 especificado en la fuente.  |  Cadena  |  No  |  N/A  | 
|  `overwrite`  |  Si se establece como true, si ya existe un archivo con el mismo nombre en la carpeta de destino de la ruta local especificada, el archivo de descarga sobrescribe el archivo local. Si se establece como false, el archivo existente en el sistema local está protegido para que no se sobrescriba y el módulo de acción falla y se produce un error de descarga. Por ejemplo, `Error: S3Download: File already exists and "overwrite" property for "destination" file is set to false. Cannot download.`  |  Booleano  |  No  |  true  | 

**nota**  
En los ejemplos siguientes, la ruta de la carpeta de Windows se puede reemplazar por una ruta de Linux. Por ejemplo, se puede sustituir `C:\myfolder\package.zip` por `/myfolder/package.zip`.

**Ejemplo de entrada: copia de un objeto de Amazon S3 a un archivo local**  
En el siguiente ejemplo, se muestra cómo copiar un objeto de Amazon S3 en un archivo local.

```
  - name: DownloadMyFile
    action: S3Download
    inputs:
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
        overwrite: false
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
        overwrite: true
      - source: s3://amzn-s3-demo-source-bucket/path/to/package.zip
        destination: C:\myfolder\package.zip
        expectedBucketOwner: 123456789022
```

**Ejemplo de entrada: copia de todos los objetos de Amazon S3 de un bucket de Amazon S3 con el prefijo de clave a una carpeta local**  
Ejemplo de entrada: copia todos los objetos de Amazon S3 de un bucket de Amazon S3 con el prefijo de clave a una carpeta local. Amazon S3 no tiene el concepto de carpeta, por lo que se copian todos los objetos que coincidan con el prefijo de clave. El número máximo de objetos que se puede descargar es 1000.

```
  - name: MyS3DownloadKeyprefix
    action: S3Download
    maxAttempts: 3
    inputs:
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
        overwrite: false
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
        overwrite: true
      - source: s3://amzn-s3-demo-source-bucket/path/to/*
        destination: C:\myfolder\
        expectedBucketOwner: 123456789022
```

**Output**  
Ninguna.

### S3Upload (Linux, Windows, macOS)
<a name="action-modules-s3upload"></a>

Con el módulo de acción **S3Upload**, puede cargar un archivo desde un archivo o carpeta de origen a una ubicación de Amazon S3. Puede usar un comodín (`*`) en la ruta especificada para su ubicación de origen para cargar todos los archivos cuya ruta coincida con el patrón de comodín.

Si se produce un error en la acción recursiva **S3Upload**, los archivos que ya se hayan cargado permanecerán en el bucket de Amazon S3 de destino.

**Casos de uso admitidos**
+ Archivo local del objeto de Amazon S3.
+ Archivos locales en la carpeta (con comodín) con el prefijo de clave de Amazon S3.
+ Copie la carpeta local (`recurse` debe estar configurado como `true`) al prefijo de clave de Amazon S3.

**Requisitos de IAM**  
El rol de IAM que asocie al perfil de instancia debe tener permiso para ejecutar el módulo de acción `S3Upload`. La siguiente política de IAM debe estar asociada al rol de IAM que está asociado con el perfil de instancia. La política debe conceder permisos `s3:PutObject` al bucket de Amazon S3 de destino. Por ejemplo, `arn:aws:s3:::BucketName/*`).


**Input**  

|  Key  |  Description (Descripción)  |  Tipo  |  Obligatorio/a  |  Predeterminado  | 
| --- | --- | --- | --- | --- | 
|  `source`  |  La ruta local en la que se files/folders origina la fuente. `source` admite un asterisco como comodín (`*`).  |  Cadena  |  Sí  |  N/A  | 
|  `destination`  |  La ruta del bucket de Amazon S3 de destino en el que se cargan las carpetas o archivos de origen.  |  Cadena  |  Sí  |  N/A  | 
|  `recurse`  |  Cuando se establece como `true`, ejecuta **S3Upload** de forma recursiva.  |  Cadena  |  No  |  `false`  | 
|  `expectedBucketOwner`  |  El ID de cuenta del propietario esperado para el bucket de Amazon S3 especificado en la ruta de destino. Le recomendamos que compruebe la propiedad del bucket de Amazon S3 especificado en el destino.  |  Cadena  |  No  |  N/A  | 

**Ejemplo de entrada: copia de un objeto de Amazon S3 a un archivo local**  
En el siguiente ejemplo, se muestra cómo copiar un objeto de Amazon S3 en un archivo local.

```
  - name: MyS3UploadFile
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\package.zip
        destination: s3://amzn-s3-demo-destination-bucket/path/to/package.zip
        expectedBucketOwner: 123456789022
```

**Ejemplo de entrada: copia de todos los objetos de Amazon S3 de un bucket de Amazon S3 con el prefijo de clave a una carpeta local**  
Ejemplo de entrada: copia todos los objetos de Amazon S3 de un bucket de Amazon S3 con el prefijo de clave a una carpeta local. En este ejemplo no se copian las subcarpetas ni su contenido porque el `recurse` no está especificado y su valor predeterminado es `false`.

```
  - name: MyS3UploadMultipleFiles
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\*
        destination: s3://amzn-s3-demo-destination-bucket/path/to/
        expectedBucketOwner: 123456789022
```

**Ejemplo de entrada: copiar de forma recursiva todos los archivos y carpetas de una carpeta local en un bucket de Amazon S3**  
El siguiente ejemplo muestra como copiar todos los archivos de forma recursiva de una carpeta local a un bucket de Amazon S3 con el prefijo de clave.

```
  - name: MyS3UploadFolder
    action: S3Upload
    onFailure: Abort
    maxAttempts: 3
    inputs:
      - source: C:\myfolder\*
        destination: s3://amzn-s3-demo-destination-bucket/path/to/
        recurse: true
        expectedBucketOwner: 123456789022
```

**Output**  
Ninguna.

### WebDownload (Linux, Windows, macOS)
<a name="action-modules-webdownload"></a>

El módulo de **WebDownload**acción le permite descargar archivos y recursos desde una ubicación remota a través del HTTP/HTTPS protocolo (*se recomienda HTTPS*). No hay límites en cuanto al número ni al tamaño de las descargas. Este módulo gestiona la lógica de reintento y retroceso exponencial. 

A cada operación de descarga se le asigna un máximo de 5 intentos para que se realice correctamente según las entradas del usuario. Estos intentos difieren de los especificados en el campo `maxAttempts` del documento `steps` y están relacionados con errores en los módulos de acción.

Este módulo de acción gestiona los redireccionamientos de forma implícita. Todos los códigos de estado HTTP, excepto por `200`, generan un error.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | 
| --- | --- | --- | --- | --- | 
| source | La HTTP/HTTPS URL válida (se recomienda HTTPS), que sigue el estándar RFC 3986. Se permiten expresiones de encadenamiento. | Cadena |  Sí  | N/A | 
| destination | Ruta absoluta o relativa de archivos o carpetas del sistema local. Las rutas de las carpetas deben terminar en /. Si no terminan en /, se tratarán como rutas de archivos. El módulo crea cualquier archivo o carpeta necesarios para que las descargas se realicen correctamente. Se permiten expresiones de encadenamiento. | Cadena | Sí | N/A | 
| overwrite | Cuando está activado, sobrescribe cualquier archivo existente en el sistema local con el archivo o recurso descargado. Si no está activado, los archivos existentes en el sistema local no se sobrescriben y el módulo de acción produce un error. Cuando la sobreescritura está habilitada y se especifican la suma de verificación y el algoritmo, el módulo de acción de descarga el archivo solo si la suma de verificación y la almohadilla de los archivos preexistentes no coinciden.  | Booleano | No | true | 
| checksum | Al especificar la suma de comprobación, se compara con la almohadilla del archivo descargado que se genera con el algoritmo suministrado. Para habilitar la verificación de archivos, se deben proporcionar tanto la suma de verificación como el algoritmo. Se permiten expresiones de encadenamiento.  | Cadena | No | N/A | 
| algorithm | El algoritmo utilizado para calcular la suma de control. Las opciones sonMD5, SHA1 SHA256, y. SHA512 Para habilitar la verificación de archivos, se deben proporcionar tanto la suma de verificación como el algoritmo. Se permiten expresiones de encadenamiento.  | Cadena | No | N/A | 
| ignoreCertificateErrors | La validación del certificado SSL se ignora cuando está habilitada. | Booleano | No | false | 


**Output**  

| Nombre de la clave | Description (Descripción) | Tipo | 
| --- | --- | --- | 
| destination | Cadena de nueva línea delimitada por caracteres que especifica la ruta de destino en la que se almacenan los archivos o recursos descargados. | Cadena | 

**Ejemplo de entrada: descarga del archivo remoto al destino local**

```
  - name: DownloadRemoteFile
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: C:\testfolder\package.zip
```

**Salida:**

```
{
	"destination": "C:\\testfolder\\package.zip"
}
```

**Ejemplo de entrada: descarga de más de un archivo remoto a más de un destino local**

```
  - name: DownloadRemoteFiles
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: /tmp/java14_renamed.zip
      - source: https://testdomain/path/to/java14.zip
        destination: /tmp/create_new_folder_and_add_java14_as_zip/
```

**Salida:**

```
{
	"destination": "/tmp/create_new_folder/java14_renamed.zip\n/tmp/create_new_folder_and_add_java14_as_zip/java14.zip"
}
```

**Ejemplo de entrada: descarga de un archivo remoto sin sobrescribir el destino local y descargar otro archivo remoto con verificación de archivos**

```
  - name: DownloadRemoteMultipleProperties
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://testdomain/path/to/java14.zip
        destination: C:\create_new_folder\java14_renamed.zip
        overwrite: false
      - source: https://testdomain/path/to/java14.zip
        destination: C:\create_new_folder_and_add_java14_as_zip\
        checksum: ac68bbf921d953d1cfab916cb6120864
        algorithm: MD5
        overwrite: true
```

**Salida:**

```
{
	"destination": "C:\\create_new_folder\\java14_renamed.zip\nC:\\create_new_folder_and_add_java14_as_zip\\java14.zip"
}
```

**Ejemplo de entrada: descarga de un archivo remoto e ignore la validación de la certificación SSL**

```
  - name: DownloadRemoteIgnoreValidation
    action: WebDownload
    maxAttempts: 3
    inputs:
      - source: https://www.bad-ssl.com/resource
        destination: /tmp/downloads/
        ignoreCertificateErrors: true
```

**Salida:**

```
{
	"destination": "/tmp/downloads/resource"
}
```

## Módulos de operaciones del sistema de archivos
<a name="action-modules-file-system-operations"></a>

La siguiente sección contiene detalles sobre los módulos de acción que realizan operaciones en el sistema de archivos.

**Topics**
+ [AppendFile (Linux, Windows, macOS)](#action-modules-appendfile)
+ [CopyFile (Linux, Windows, macOS)](#action-modules-copyfile)
+ [CopyFolder (Linux, Windows, macOS)](#action-modules-copyfolder)
+ [CreateFile (Linux, Windows, macOS)](#action-modules-createfile)
+ [CreateFolder (Linux, Windows, macOS)](#action-modules-createfolder)
+ [CreateSymlink (Linux, Windows, macOS)](#action-modules-createsymlink)
+ [DeleteFile (Linux, Windows, macOS)](#action-modules-deletefile)
+ [DeleteFolder (Linux, Windows, macOS)](#action-modules-deletefolder)
+ [ListFiles (Linux, Windows, macOS)](#action-modules-listfiles)
+ [MoveFile (Linux, Windows, macOS)](#action-modules-movefile)
+ [MoveFolder (Linux, Windows, macOS)](#action-modules-movefolder)
+ [ReadFile (Linux, Windows, macOS)](#action-modules-readfile)
+ [SetFileEncoding (Linux, Windows, macOS)](#action-modules-setfileencoding)
+ [SetFileOwner (Linux, Windows, macOS)](#action-modules-setfileowner)
+ [SetFolderOwner (Linux, Windows, macOS)](#action-modules-setfolderowner)
+ [SetFilePermissions (Linux, Windows, macOS)](#action-modules-setfilepermissions)
+ [SetFolderPermissions (Linux, Windows, macOS)](#action-modules-setfolderpermissions)

### AppendFile (Linux, Windows, macOS)
<a name="action-modules-appendfile"></a>

El módulo de **AppendFile**acción añade contenido específico al contenido preexistente de un archivo.

Si el valor de codificación del archivo es diferente del valor de codificación (`utf-8`) predeterminado, puede especificar el valor de codificación del archivo mediante la opción `encoding`. De forma predeterminada, se supone que `utf-16` y `utf-32` utilizan la codificación little-endian. 

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ El archivo especificado no existe en tiempo de ejecución.
+ No tiene permisos de escritura para modificar el contenido del archivo.
+ El módulo detecta un error durante la operación del archivo.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta del archivo. | Cadena | Sí | N/A | N/A | Sí | 
| content | El contenido que se va a adjuntar al archivo. | Cadena | No | Cadena vacía | N/A | Sí | 
| encoding | El estándar de la codificación. | Cadena | No | utf8 | utf8, utf-8, utf16,utf-16, utf16-LE, utf-16-LE utf16-BE, utf-16-BE, utf32, utf-32, utf32-LE,utf-32-LE, utf32-BE, y  utf-32-BE. El valor de la opción de codificación no distingue entre mayúsculas y minúsculas. | Sí | 

**Ejemplo de entrada: añadir un archivo sin codificar (Linux)**

```
  - name: AppendingFileWithOutEncodingLinux
    action: AppendFile
    inputs:
      - path: ./Sample.txt
        content: "The string to be appended to the file"
```

**Ejemplo de entrada: añadir un archivo sin codificar (Windows)**

```
  - name: AppendingFileWithOutEncodingWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolder\MyFile.txt
        content: "The string to be appended to the file"
```

**Ejemplo de entrada: añadir un archivo con codificación (Linux)**

```
  - name: AppendingFileWithEncodingLinux
    action: AppendFile
    inputs:
      - path: /FolderName/SampleFile.txt
        content: "The string to be appended to the file"
        encoding: UTF-32
```

**Ejemplo de entrada: añadir un archivo con codificación (Windows)**

```
  - name: AppendingFileWithEncodingWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolderName\SampleFile.txt
        content: "The string to be appended to the file"
        encoding: UTF-32
```

**Ejemplo de entrada: añadir un archivo con una cadena vacía (Linux)**

```
  - name: AppendingEmptyStringLinux
    action: AppendFile
    inputs:
      - path: /FolderName/SampleFile.txt
```

**Ejemplo de entrada: añadir un archivo con una cadena vacía (Windows)**

```
  - name: AppendingEmptyStringWindows
    action: AppendFile
    inputs:
      - path: C:\MyFolderName\SampleFile.txt
```

**Output**  
Ninguna.

### CopyFile (Linux, Windows, macOS)
<a name="action-modules-copyfile"></a>

El módulo de **CopyFile**acción copia los archivos de la fuente especificada al destino especificado. De forma predeterminada, el módulo crea de forma recursiva la carpeta de destino si no existe en tiempo de ejecución.

Si ya existe un archivo con el nombre especificado en la carpeta especificada, el módulo de acción, de forma predeterminada, sobrescribe el archivo existente. Puede anular este comportamiento al configurar la opción sobrescribir como `false`. Cuando la opción de sobreescritura esté establecida como `false` y ya haya un archivo en la ubicación especificada con el nombre especificado, el módulo de acción devolverá un error. Esta opción funciona igual que el comando de Linux `cp`, que se sobrescribe de forma predeterminada.

El nombre del archivo fuente puede incluir un comodín (`*`). Los caracteres comodín solo se aceptan después del último separador de ruta del archivo (`/` o `\`). Si se incluyen caracteres comodín en el nombre del archivo de origen, todos los archivos que coincidan con el comodín se copian en la carpeta de destino. Si desea mover más de un archivo con un carácter comodín, la entrada de la opción `destination` debe terminar con un separador de rutas de archivo (`/` o `\`), lo que indica que la entrada de destino es una carpeta.

Si el nombre del archivo de destino es diferente del nombre del archivo de origen, puede especificar el nombre del archivo de destino mediante la opción `destination`. Si no especifica un nombre de archivo de destino, se utilizará el nombre del archivo de origen para crear el archivo de destino. Cualquier texto que siga al separador (`/` o `\`) de la última ruta del archivo se trata como el nombre del archivo. Si desea utilizar el mismo nombre de archivo que el archivo de origen, la entrada de la opción `destination` debe terminar con un separador de rutas de archivo (`/` o `\`). 

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para crear un archivo en la carpeta especificada.
+ Los archivos de origen no existen en tiempo de ejecución.
+ Ya existe una carpeta con el nombre de archivo especificado y la opción `overwrite` está configurada como `false`.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | La ruta del archivo de origen. | Cadena | Sí | N/A | N/A | Sí | 
| destination | La ruta del archivo de destino. | Cadena | Sí | N/A | N/A | Sí | 
| overwrite | Si se establece como falso, los archivos de destino no se reemplazarán cuando ya haya un archivo en la ubicación especificada con el nombre especificado. | Booleano | No | true | N/A | Sí | 

**Ejemplo de entrada: copiar un archivo (Linux)**

```
  - name: CopyingAFileLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
```

**Ejemplo de entrada: copiar un archivo (Windows)**

```
  - name: CopyingAFileWindows
    action: CopyFile
    inputs:
      - source: C:\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
```

**Ejemplo de entrada: copia un archivo con el nombre del archivo fuente (Linux)**

```
  - name: CopyingFileWithSourceFileNameLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/
```

**Ejemplo de entrada: copia un archivo con el nombre del archivo fuente (Windows)**

```
  - name: CopyingFileWithSourceFileNameWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\
```

**Ejemplo de entrada: copia un archivo con el carácter comodín (Linux)**

```
  - name: CopyingFilesWithWildCardLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**Ejemplo de entrada: copia un archivo con el carácter comodín (Windows)**

```
  - name: CopyingFilesWithWildCardWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**Ejemplo de entrada: copiar un archivo sin sobrescribirlo (Linux)**

```
  - name: CopyingFilesWithoutOverwriteLinux
    action: CopyFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
        overwrite: false
```

**Ejemplo de entrada: copiar un archivo sin sobrescribirlo (Windows)**

```
  - name: CopyingFilesWithoutOverwriteWindows
    action: CopyFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
        overwrite: false
```

**Output**  
Ninguna.

### CopyFolder (Linux, Windows, macOS)
<a name="action-modules-copyfolder"></a>

El módulo de **CopyFolder**acción copia una carpeta de la fuente especificada al destino especificado. La entrada de la opción `source` es la carpeta que se va a copiar y la entrada de la opción `destination` es la carpeta en la que se copia el contenido de la carpeta de origen. De forma predeterminada, el módulo crea de forma recursiva la carpeta de destino si no existe en tiempo de ejecución.

Si ya existe una carpeta con el nombre especificado en la carpeta especificada, el módulo de acción, de forma predeterminada, sobrescribe la carpeta existente. Puede anular este comportamiento al configurar la opción sobrescribir como `false`. Cuando la opción de sobreescritura esté establecida como `false` y ya haya una carpeta en la ubicación especificada con el nombre especificado, el módulo de acción devolverá un error.

El nombre de la carpeta fuente puede incluir un comodín (`*`). Los caracteres comodín solo se aceptan después del último separador de ruta del archivo (`/` o `\`). Si se incluyen caracteres comodín en el nombre de la carpeta de origen, todas las carpetas que coincidan con el comodín se copian en la carpeta de destino. Si desea mover más de una carpeta utilizando un carácter comodín, la entrada de la opción `destination` debe terminar con un separador de rutas de archivo (`/` o `\`), lo que indica que la entrada de destino es una carpeta.

Si el nombre de la carpeta de destino es diferente del nombre de la carpeta de origen, puede especificar el nombre de la carpeta de destino mediante la opción `destination`. Si no especifica un nombre de carpeta de destino, se utilizará el nombre de la carpeta de origen para crear la carpeta de destino. Cualquier texto que siga al separador (`/` o `\`) de la última ruta del archivo se trata como el nombre de la carpeta. Si desea utilizar el mismo nombre de carpeta que la carpeta de origen, la entrada de la opción `destination` debe terminar con un separador de rutas de archivo (`/` o `\`). 

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para crear una carpeta en la carpeta especificada.
+ Las carpetas de origen no existen en tiempo de ejecución.
+ Ya existe una carpeta con el nombre de carpeta especificado y la opción `overwrite` está configurada como `false`.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | La ruta de la carpeta de origen. | Cadena | Sí | N/A | N/A | Sí | 
| destination | La ruta de la carpeta de destino. | Cadena | Sí | N/A | N/A | Sí | 
| overwrite | Si se establece como falso, las carpetas de destino no se reemplazarán cuando ya haya una carpeta en la ubicación especificada con el nombre especificado. | Booleano | No | true | N/A | Sí | 

**Ejemplo de entrada: copiar una carpeta (Linux)**

```
  - name: CopyingAFolderLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
        destination: /MyFolder/destinationFolder
```

**Ejemplo de entrada: copiar una carpeta (Windows)**

```
  - name: CopyingAFolderWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\destinationFolder
```

**Ejemplo de entrada: copiar una carpeta con el nombre de la carpeta de origen (Linux)**

```
  - name: CopyingFolderSourceFolderNameLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/
```

**Ejemplo de entrada: copiar una carpeta con el nombre de la carpeta de origen (Windows)**

```
  - name: CopyingFolderSourceFolderNameWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\
```

**Ejemplo de entrada: copiar una carpeta con el carácter comodín (Linux)**

```
  - name: CopyingFoldersWithWildCardLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**Ejemplo de entrada: copiar una carpeta con el carácter comodín (Windows)**

```
  - name: CopyingFoldersWithWildCardWindows
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**Ejemplo de entrada: copiar una carpeta sin sobrescribirla (Linux)**

```
  - name: CopyingFoldersWithoutOverwriteLinux
    action: CopyFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/destinationFolder
        overwrite: false
```

**Ejemplo de entrada: copiar una carpeta sin sobrescribirla (Windows)**

```
  - name: CopyingFoldersWithoutOverwrite
    action: CopyFolder
    inputs:
      - source: C:\Sample\MyFolder\SourceFolder
        destination: C:\MyFolder\destinationFolder
        overwrite: false
```

**Output**  
Ninguna.

### CreateFile (Linux, Windows, macOS)
<a name="action-modules-createfile"></a>

El módulo de **CreateFile**acción crea un archivo en una ubicación específica. De forma predeterminada, si es necesario, el módulo también crea de forma recursiva las carpetas principales.

Si el archivo ya existe en la carpeta especificada, el módulo de acción, de forma predeterminada, trunca o sobrescribe el archivo existente. Puede anular este comportamiento al configurar la opción sobrescribir como `false`. Cuando la opción de sobreescritura esté establecida como `false` y ya haya un archivo en la ubicación especificada con el nombre especificado, el módulo de acción devolverá un error.

Si el valor de codificación del archivo es diferente del valor de codificación (`utf-8`) predeterminado, puede especificar el valor de codificación del archivo mediante la opción `encoding`. De forma predeterminada, se supone que `utf-16` y `utf-32` utilizan la codificación little-endian. 

`owner`, `group`, y `permissions` son entradas opcionales. La entrada para `permissions` debe ser un valor de cadena. Los archivos se crean con los valores predeterminados cuando no se proporcionan. Estas opciones no son compatibles con las plataformas Windows. Este módulo de acción valida y devuelve un error si `owner`, `group`, y `permissions` se utilizan en las plataformas Windows.

Este módulo de acción puede crear un archivo con los permisos definidos por el valor `umask` predeterminado del sistema operativo. Debe establecer el valor `umask` si quiere anular el valor predeterminado.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para crear un archivo o una carpeta en la carpeta especificada.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta del archivo. | Cadena | Sí | N/A | N/A | Sí | 
| content | El contenido de texto del archivo. | Cadena | No | N/A | N/A | Sí | 
| encoding | El estándar de la codificación. | Cadena | No | utf8 | utf8, utf-8, utf16,utf-16, utf16-LE, utf-16-LE utf16-BE, utf-16-BE, utf32, utf-32, utf32-LE,utf-32-LE, utf32-BE, y  utf-32-BE. El valor de la opción de codificación no distingue entre mayúsculas y minúsculas. | Sí | 
| owner | El nombre o el ID de usuario. | Cadena | No | N/A | N/A | No es compatible con Windows. | 
| group | El nombre o el ID del grupo. | Cadena | No | El usuario actual. | N/A | No es compatible con Windows. | 
| permissions | Permisos de archivos. | Cadena | No | 0666 | N/A | No es compatible con Windows. | 
| overwrite | Si el nombre del archivo especificado ya existe, si se establece este valor como false se impide que el archivo se trunque o sobrescriba de forma predeterminada. | Booleano | No | true | N/A | Sí | 

**Ejemplo de entrada: crear un archivo sin sobrescribirlo (Linux)**

```
  - name: CreatingFileWithoutOverwriteLinux
    action: CreateFile
    inputs:
      - path: /home/UserName/Sample.txt
        content: The text content of the sample file.
        overwrite: false
```

**Ejemplo de entrada: crear un archivo sin sobrescribirlo (Windows)**

```
  - name: CreatingFileWithoutOverwriteWindows
    action: CreateFile
    inputs:
      - path: C:\Temp\Sample.txt
        content: The text content of the sample file.
        overwrite: false
```

**Ejemplo de entrada: creación de un archivo con las propiedades del archivo**

```
  - name: CreatingFileWithFileProperties
    action: CreateFile
    inputs:
      - path: SampleFolder/Sample.txt
        content: The text content of the sample file.
        encoding: UTF-16
        owner: Ubuntu
        group: UbuntuGroup
        permissions: 0777
     - path: SampleFolder/SampleFile.txt
        permissions: 755
      - path: SampleFolder/TextFile.txt
        encoding: UTF-16
        owner: root
        group: rootUserGroup
```

**Ejemplo de entrada: creación de un archivo sin las propiedades de archivo**

```
  - name: CreatingFileWithoutFileProperties
    action: CreateFile
    inputs:
      - path: ./Sample.txt
      - path: Sample1.txt
```

**Ejemplo de entrada: creación de un archivo vacío para omitir una sección del script de limpieza de Linux**

```
  - name: CreateSkipCleanupfile
    action: CreateFile
    inputs:
      - path: <skip section file name>
```

Para obtener más información, consulte [Anule el script de limpieza de Linux.](security-best-practices.md#override-linux-cleanup-script).

**Output**  
Ninguna.

### CreateFolder (Linux, Windows, macOS)
<a name="action-modules-createfolder"></a>

El módulo de **CreateFolder**acción crea una carpeta en una ubicación específica. De forma predeterminada, si es necesario, el módulo también crea de forma recursiva las carpetas principales.

Si la carpeta ya existe en la carpeta especificada, el módulo de acción, de forma predeterminada, trunca o sobrescribe la carpeta existente. Puede anular este comportamiento al configurar la opción sobrescribir como `false`. Cuando la opción de sobreescritura esté establecida como `false` y ya haya una carpeta en la ubicación especificada con el nombre especificado, el módulo de acción devolverá un error.

`owner`, `group`, y `permissions` son entradas opcionales. La entrada para `permissions` debe ser un valor de cadena. Estas opciones no son compatibles con las plataformas Windows. Este módulo de acción valida y devuelve un error si `owner`, `group`, y `permissions` se utilizan en las plataformas Windows.

Este módulo de acción puede crear una carpeta con los permisos definidos por el valor predeterminado `umask` del sistema operativo. Debe establecer el valor `umask` si quiere anular el valor predeterminado.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para crear una carpeta en la ubicación especificada.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta de la carpeta. | Cadena | Sí | N/A | N/A | Sí | 
| owner | El nombre o el ID de usuario. | Cadena | No | El usuario actual. | N/A | No es compatible con Windows. | 
| group | El nombre o el ID del grupo. | Cadena | No | El grupo del usuario actual. | N/A | No es compatible con Windows. | 
| permissions | Permisos para carpetas. | Cadena | No | 0777 | N/A | No es compatible con Windows. | 
| overwrite | Si el nombre del archivo especificado ya existe, si se establece este valor como false se impide que el archivo se trunque o sobrescriba de forma predeterminada. | Booleano | No | true | N/A | Sí | 

**Ejemplo de entrada: crear una carpeta (Linux)**

```
  - name: CreatingFolderLinux
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/
```

**Ejemplo de entrada: crear una carpeta (Windows)**

```
  - name: CreatingFolderWindows
    action: CreateFolder
    inputs:
      - path: C:\MyFolder
```

**Ejemplo de entrada: creación de una carpeta especificando las propiedades de la carpeta**

```
  - name: CreatingFolderWithFolderProperties
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        owner: SampleOwnerName
        group: SampleGroupName
        permissions: 0777
      - path: /Sample/MyFolder/SampleFoler/
        permissions: 777
```

**Ejemplo de entrada: cree una carpeta que sobrescriba la carpeta existente, si la hay.**

```
  - name: CreatingFolderWithOverwrite
    action: CreateFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        overwrite: true
```

**Output**  
Ninguna.

### CreateSymlink (Linux, Windows, macOS)
<a name="action-modules-createsymlink"></a>

El módulo de **CreateSymlink**acción crea enlaces simbólicos o archivos que contienen una referencia a otro archivo. Este módulo no es compatible con las plataformas Windows. 

La entrada de las opciones `path` y `target` puede ser una ruta absoluta o relativa. Si la entrada de la opción `path` es una ruta relativa, se sustituye por la ruta absoluta cuando se crea el enlace.

De forma predeterminada, cuando ya existe un enlace con el nombre especificado en la carpeta especificada, el módulo de acción devuelve un error. Puede anular este comportamiento al configurar la opción `force` como `true`. Si la opción `force` se establece como `true`, el módulo sobrescribirá el enlace existente.

Si no existe una carpeta principal, el módulo de acción crea la carpeta de forma recursiva, de forma predeterminada.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ El archivo de destino no existe en tiempo de ejecución.
+ Ya existe un archivo de enlace no simbólico con el nombre especificado.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta del archivo. | Cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| target | La ruta del archivo de destino al que apunta el enlace simbólico. | Cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| force | Fuerza la creación de un enlace cuando ya existe un enlace con el mismo nombre. | Booleano | No | false | N/A | No es compatible con Windows. | 

**Ejemplo de entrada: creación de un enlace simbólico que obligue a crear un enlace**

```
  - name: CreatingSymbolicLinkWithForce
    action: CreateSymlink
    inputs:
      - path: /Folder2/Symboliclink.txt
        target: /Folder/Sample.txt
        force: true
```

**Ejemplo de entrada: creación de un enlace simbólico que no obligue a crear un enlace**

```
  - name: CreatingSymbolicLinkWithOutForce
    action: CreateSymlink
    inputs:
      - path: Symboliclink.txt
        target: /Folder/Sample.txt
```

**Output**  
Ninguna.

### DeleteFile (Linux, Windows, macOS)
<a name="action-modules-deletefile"></a>

El módulo de **DeleteFile**acción elimina uno o varios archivos en una ubicación específica.

La entrada de `path` debe ser una ruta de archivo válida o una ruta de archivo con un carácter comodín (`*`) en el nombre del archivo. Si se especifican caracteres comodín en el nombre del archivo, se eliminarán todos los archivos de la misma carpeta que coincidan con el comodín. 

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para realizar la operación de eliminación.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta del archivo. | Cadena | Sí | N/A | N/A | Sí | 

**Ejemplo de entrada: eliminación de un solo archivo (Linux)**

```
  - name: DeletingSingleFileLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/Sample.txt
```

**Ejemplo de entrada: eliminación de un solo archivo (Windows)**

```
  - name: DeletingSingleFileWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\Sample.txt
```

**Ejemplo de entrada: eliminación de un archivo que termine en “log” (Linux)**

```
  - name: DeletingFileEndingWithLogLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/*log
```

**Ejemplo de entrada: eliminación de un archivo que termine en “log” (Windows)**

```
  - name: DeletingFileEndingWithLogWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\*log
```

**Ejemplo de entrada: eliminación de todos los archivos de una carpeta específica (Linux)**

```
  - name: DeletingAllFilesInAFolderLinux
    action: DeleteFile
    inputs:
      - path: /SampleFolder/MyFolder/*
```

**Ejemplo de entrada: eliminación de todos los archivos de una carpeta específica (Windows)**

```
  - name: DeletingAllFilesInAFolderWindows
    action: DeleteFile
    inputs:
      - path: C:\SampleFolder\MyFolder\*
```

**Output**  
Ninguna.

### DeleteFolder (Linux, Windows, macOS)
<a name="action-modules-deletefolder"></a>

El módulo de **DeleteFolder**acción elimina las carpetas.

Si la carpeta no está vacía, debe configurar la opción `force` como `true` para eliminar la carpeta y su contenido. Si no establece la `force` opción como `true` y la carpeta que intenta eliminar no está vacía, el módulo de acción mostrará un error. El valor predeterminado de la opción `force` es `false`.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para realizar la operación de eliminación.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta de la carpeta. | Cadena | Sí | N/A | N/A | Sí | 
| force | Elimina la carpeta esté vacía o no. | Booleano | No | false | N/A | Sí | 

**Ejemplo de entrada: elimine una carpeta que no esté vacía mediante la opción `force` (Linux)** 

```
  - name: DeletingFolderWithForceOptionLinux
    action: DeleteFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
        force: true
```

**Ejemplo de entrada: elimine una carpeta que no esté vacía mediante la opción `force` (Windows)** 

```
  - name: DeletingFolderWithForceOptionWindows
    action: DeleteFolder
    inputs:
      - path: C:\Sample\MyFolder\Sample\
        force: true
```

**Ejemplo de entrada: eliminación de una carpeta (Linux)** 

```
  - name: DeletingFolderWithOutForceLinux
    action: DeleteFolder
    inputs:
      - path: /Sample/MyFolder/Sample/
```

**Ejemplo de entrada: eliminación de una carpeta (Windows)** 

```
  - name: DeletingFolderWithOutForce
    action: DeleteFolder
    inputs:
      - path: C:\Sample\MyFolder\Sample\
```

**Output**  
Ninguna.

### ListFiles (Linux, Windows, macOS)
<a name="action-modules-listfiles"></a>

El módulo de **ListFiles**acción muestra los archivos de una carpeta específica. Cuando la opción recursiva está establecida como `true`, muestra los archivos en subcarpetas. De forma predeterminada, este módulo no muestra los archivos de las subcarpetas.

Para enumerar todos los archivos con nombres que coincidan con un patrón específico, utilice la opción `fileNamePattern` para proporcionar el patrón. La opción `fileNamePattern` acepta el valor comodín (`*`). Cuando se proporciona el `fileNamePattern`, se devuelven todos los archivos que coincidan con el formato de nombre de archivo especificado. 

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ La carpeta especificada no existe en tiempo de ejecución.
+ No tiene permiso para crear un archivo o una carpeta en la carpeta especificada.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta de la carpeta. | Cadena | Sí | N/A | N/A | Sí | 
| fileNamePattern | El patrón que debe coincidir para mostrar todos los archivos con nombres que coincidan con el patrón. | Cadena | No | N/A | N/A | Sí | 
| recursive | Muestra los archivos de la carpeta de forma recursiva. | Booleano | No | false | N/A | Sí | 

**Ejemplo de entrada: lista los archivos de la carpeta especificada (Linux)**

```
  - name: ListingFilesInSampleFolderLinux
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/Sample
```

**Ejemplo de entrada: lista los archivos de la carpeta especificada (Windows)**

```
  - name: ListingFilesInSampleFolderWindows
    action: ListFiles
    inputs:
      - path: C:\Sample\MyFolder\Sample
```

**Ejemplo de entrada: lista los archivos que terminan en “log” (Linux)**

```
  - name: ListingFilesWithEndingWithLogLinux
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/
        fileNamePattern: *log
```

**Ejemplo de entrada: lista los archivos que terminan en “log” (Windows)**

```
  - name: ListingFilesWithEndingWithLogWindows
    action: ListFiles
    inputs:
      - path: C:\Sample\MyFolder\
        fileNamePattern: *log
```

**Ejemplo de entrada: lista los archivos de forma recursiva**

```
  - name: ListingFilesRecursively
    action: ListFiles
    inputs:
      - path: /Sample/MyFolder/
        recursive: true
```


**Output**  

| Nombre de la clave | Description (Descripción) | Tipo | 
| --- | --- | --- | 
| files | La lista de archivos. | Cadena | 

**Ejemplo de resultados**

```
{
	"files": "/sample1.txt,/sample2.txt,/sample3.txt"
}
```

### MoveFile (Linux, Windows, macOS)
<a name="action-modules-movefile"></a>

El módulo de **MoveFile**acción mueve los archivos del origen especificado al destino especificado.

Si el archivo ya existe en la carpeta especificada, el módulo de acción sobrescribe el archivo existente de forma predeterminada. Puede anular este comportamiento al configurar la opción sobrescribir como `false`. Cuando la opción de sobreescritura esté establecida como `false` y ya haya un archivo en la ubicación especificada con el nombre especificado, el módulo de acción devolverá un error. Esta opción funciona igual que el comando de Linux `mv`, que se sobrescribe de forma predeterminada.

El nombre del archivo fuente puede incluir un comodín (`*`). Los caracteres comodín solo se aceptan después del último separador de ruta del archivo (`/` o `\`). Si se incluyen caracteres comodín en el nombre del archivo de origen, todos los archivos que coincidan con el comodín se copian en la carpeta de destino. Si desea mover más de un archivo con un carácter comodín, la entrada de la opción `destination` debe terminar con un separador de rutas de archivo (`/` o `\`), lo que indica que la entrada de destino es una carpeta.

Si el nombre del archivo de destino es diferente del nombre del archivo de origen, puede especificar el nombre del archivo de destino mediante la opción `destination`. Si no especifica un nombre de archivo de destino, se utilizará el nombre del archivo de origen para crear el archivo de destino. Cualquier texto que siga al separador (`/` o `\`) de la última ruta del archivo se trata como el nombre del archivo. Si desea utilizar el mismo nombre de archivo que el archivo de origen, la entrada de la opción `destination` debe terminar con un separador de rutas de archivo (`/` o `\`). 

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para crear un archivo en la carpeta especificada.
+ Los archivos de origen no existen en tiempo de ejecución.
+ Ya existe una carpeta con el nombre de archivo especificado y la opción `overwrite` está configurada como `false`.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | La ruta del archivo de origen. | Cadena | Sí | N/A | N/A | Sí | 
| destination | La ruta del archivo de destino. | Cadena | Sí | N/A | N/A | Sí | 
| overwrite | Si se establece como falso, los archivos de destino no se reemplazarán cuando ya haya un archivo en la ubicación especificada con el nombre especificado. | Booleano | No | true | N/A | Sí | 

**Ejemplo de entrada: mover un archivo (Linux)**

```
  - name: MovingAFileLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
```

**Ejemplo de entrada: mover un archivo (Windows)**

```
  - name: MovingAFileWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
```

**Ejemplo de entrada: mueva un archivo utilizando el nombre del archivo fuente (Linux)**

```
  - name: MovingFileWithSourceFileNameLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/
```

**Ejemplo de entrada: mueva un archivo con el nombre del archivo fuente (Windows)**

```
  - name: MovingFileWithSourceFileNameWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder
```

**Ejemplo de entrada: mover un archivo con un carácter comodín (Linux)**

```
  - name: MovingFilesWithWildCardLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**Ejemplo de entrada: mover un archivo con un carácter comodín (Windows)**

```
  - name: MovingFilesWithWildCardWindows
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder
```

**Ejemplo de entrada: mover un archivo sin sobrescribirlo (Linux)**

```
  - name: MovingFilesWithoutOverwriteLinux
    action: MoveFile
    inputs:
      - source: /Sample/MyFolder/Sample.txt
        destination: /MyFolder/destinationFile.txt
        overwrite: false
```

**Ejemplo de entrada: mover un archivo sin sobrescribirlo (Windows)**

```
  - name: MovingFilesWithoutOverwrite
    action: MoveFile
    inputs:
      - source: C:\Sample\MyFolder\Sample.txt
        destination: C:\MyFolder\destinationFile.txt
        overwrite: false
```

**Output**  
Ninguna.

### MoveFolder (Linux, Windows, macOS)
<a name="action-modules-movefolder"></a>

El módulo de **MoveFolder**acción mueve las carpetas del origen especificado al destino especificado. La entrada de la opción `source` es la carpeta que se va a mover y la entrada de la opción `destination` es la carpeta en la que se mueve el contenido de la carpeta de origen.

Si la carpeta principal de destino o la entrada de la opción `destination` no existen en tiempo de ejecución, el comportamiento predeterminado del módulo es crear la carpeta de forma recursiva en el destino especificado.

Si ya existe una carpeta con el nombre especificado en la carpeta especificada, el módulo de acción, de forma predeterminada, sobrescribe la carpeta existente. Puede anular este comportamiento al configurar la opción sobrescribir como `false`. Cuando la opción de sobreescritura esté establecida como `false` y ya haya una carpeta en la ubicación especificada con el nombre especificado, el módulo de acción devolverá un error.

El nombre de la carpeta fuente puede incluir un comodín (`*`). Los caracteres comodín solo se aceptan después del último separador de ruta del archivo (`/` o `\`). Si se incluyen caracteres comodín en el nombre de la carpeta de origen, todas las carpetas que coincidan con el comodín se copian en la carpeta de destino. Si desea mover más de una carpeta con un carácter comodín, la entrada de la opción `destination` debe terminar con un separador de rutas de archivos (`/` o `\`), lo que indica que la entrada de destino es una carpeta.

Si el nombre de la carpeta de destino es diferente del nombre de la carpeta de origen, puede especificar el nombre de la carpeta de destino mediante la opción `destination`. Si no especifica un nombre de carpeta de destino, se utilizará el nombre de la carpeta de origen para crear la carpeta de destino. Cualquier texto que siga al separador (`/` o `\`) de la última ruta del archivo se trata como el nombre de la carpeta. Si desea utilizar el mismo nombre de carpeta que la carpeta de origen, la entrada de la opción `destination` debe terminar con un separador de rutas de archivo (`/` o `\`). 

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para crear una carpeta en la carpeta de destino.
+ Las carpetas de origen no existen en tiempo de ejecución.
+ Ya existe una carpeta con el nombre especificado y la opción `overwrite` está configurada como `false`.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| source | La ruta de la carpeta de origen. | Cadena | Sí | N/A | N/A | Sí | 
| destination | La ruta de la carpeta de destino. | Cadena | Sí | N/A | N/A | Sí | 
| overwrite | Si se establece como falso, las carpetas de destino no se reemplazarán cuando ya haya una carpeta en la ubicación especificada con el nombre especificado. | Booleano | No | true | N/A | Sí | 

**Ejemplo de entrada: mover una carpeta (Linux)**

```
  - name: MovingAFolderLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SourceFolder
        destination: /MyFolder/destinationFolder
```

**Ejemplo de entrada: mover una carpeta (Windows)**

```
  - name: MovingAFolderWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SourceFolder
        destination: C:\MyFolder\destinationFolder
```

**Ejemplo de entrada: mover una carpeta con el nombre de la carpeta de origen (Linux)**

```
  - name: MovingFolderWithSourceFolderNameLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
        destination: /MyFolder/
```

**Ejemplo de entrada: mover una carpeta con el nombre de la carpeta de origen (Windows)**

```
  - name: MovingFolderWithSourceFolderNameWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\
```

**Ejemplo de entrada: mover una carpeta con un carácter comodín (Linux)**

```
  - name: MovingFoldersWithWildCardLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/Sample*
        destination: /MyFolder/
```

**Ejemplo de entrada: mover una carpeta con un carácter comodín (Windows)**

```
  - name: MovingFoldersWithWildCardWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\Sample*
        destination: C:\MyFolder\
```

**Ejemplo de entrada: mover una carpeta sin sobrescribirla (Linux)**

```
  - name: MovingFoldersWithoutOverwriteLinux
    action: MoveFolder
    inputs:
      - source: /Sample/MyFolder/SampleFolder
    destination: /MyFolder/destinationFolder
    overwrite: false
```

**Ejemplo de entrada: mover una carpeta sin sobrescribirla (Windows)**

```
  - name: MovingFoldersWithoutOverwriteWindows
    action: MoveFolder
    inputs:
      - source: C:\Sample\MyFolder\SampleFolder
        destination: C:\MyFolder\destinationFolder
        overwrite: false
```

**Output**  
Ninguna.

### ReadFile (Linux, Windows, macOS)
<a name="action-modules-readfile"></a>

El módulo de **ReadFile**acción lee el contenido de un archivo de texto de tipo cadena. Este módulo se puede utilizar para leer el contenido de un archivo y utilizarlo en los pasos siguientes mediante el encadenamiento o para leer los datos del archivo `console.log`. Si la ruta especificada es un enlace simbólico, este módulo devuelve el contenido del archivo de destino. Este módulo solo admite archivos de texto.

Si el valor de codificación del archivo es diferente del valor de codificación (`utf-8`) predeterminado, puede especificar el valor de codificación del archivo mediante la opción `encoding`. De forma predeterminada, se supone que `utf-16` y `utf-32` utilizan la codificación little-endian. 

De forma predeterminada, este módulo no puede imprimir el contenido del archivo en el archivo. `console.log` Puede anular esta configuración configurando la propiedad `printFileContent` como `true`.

Este módulo solo puede devolver el contenido de un archivo. No puede analizar archivos, como los archivos Excel o JSON.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ El archivo no existe en el tiempo de ejecución.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta del archivo. | Cadena | Sí | N/A | N/A | Sí | 
| encoding | El estándar de la codificación. | Cadena | No | utf8 | utf8, utf-8, utf16,utf-16, utf16-LE, utf-16-LE utf16-BE, utf-16-BE, utf32, utf-32, utf32-LE,utf-32-LE, utf32-BE, y  utf-32-BE. El valor de la opción de codificación no distingue entre mayúsculas y minúsculas. | Sí | 
| printFileContent | Imprime el contenido del archivo en el archivo console.log. | Booleano | No | false | N/A | Sí. | 

**Ejemplo de entrada: leer un archivo (Linux)**

```
  - name: ReadingFileLinux
    action: ReadFile
    inputs:
      - path: /home/UserName/SampleFile.txt
```

**Ejemplo de entrada: leer un archivo (Windows)**

```
  - name: ReadingFileWindows
    action: ReadFile
    inputs:
      - path: C:\Windows\WindowsUpdate.log
```

**Ejemplo de entrada: cómo leer un archivo y especificar el estándar de codificación**

```
  - name: ReadingFileWithFileEncoding
    action: ReadFile
    inputs:
      - path: /FolderName/SampleFile.txt
        encoding: UTF-32
```

**Ejemplo de entrada: cómo leer un archivo e imprimirlo en el archivo `console.log`**

```
  - name: ReadingFileToConsole
    action: ReadFile
    inputs:
      - path: /home/UserName/SampleFile.txt
        printFileContent: true
```


**Output**  

| Campo | Description (Descripción) | Tipo | 
| --- | --- | --- | 
| content | El contenido del archivo. | cadena | 

**Ejemplo de resultados**

```
{
	"content" : "The file content"
}
```

### SetFileEncoding (Linux, Windows, macOS)
<a name="action-modules-setfileencoding"></a>

El módulo de **SetFileEncoding**acción modifica la propiedad de codificación de un archivo existente. Este módulo puede convertir la codificación de archivos `utf-8` a un estándar de codificación específico. De forma predeterminada, `utf-16` y `utf-32` se supone que utilizan la codificación little-endian.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para realizar la modificación especificada.
+ El archivo no existe en el tiempo de ejecución.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta del archivo. | Cadena | Sí | N/A | N/A | Sí | 
| encoding | El estándar de la codificación. | Cadena | No | utf8 | utf8, utf-8, utf16,utf-16, utf16-LE, utf-16-LE utf16-BE, utf-16-BE, utf32, utf-32, utf32-LE,utf-32-LE, utf32-BE, y  utf-32-BE. El valor de la opción de codificación no distingue entre mayúsculas y minúsculas. | Sí | 

**Ejemplo de entrada: cómo establecer la propiedad de codificación del archivo**

```
  - name: SettingFileEncodingProperty
    action: SetFileEncoding
    inputs:
      - path: /home/UserName/SampleFile.txt
        encoding: UTF-16
```

**Output**  
Ninguna.

### SetFileOwner (Linux, Windows, macOS)
<a name="action-modules-setfileowner"></a>

El módulo de **SetFileOwner**acción modifica las propiedades de `group` propietario `owner` y las propiedades de un archivo existente. Si el archivo especificado es un enlace simbólico, el módulo modifica la propiedad `owner` del archivo fuente. Este módulo no es compatible con las plataformas Windows. 

Este módulo acepta nombres de usuarios y grupos como entradas. Si no se proporciona el nombre del grupo, el módulo asigna el propietario del archivo al grupo al que pertenece el usuario.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para realizar la modificación especificada.
+ El nombre de usuario o grupo especificado no existe en el tiempo de ejecución.
+ El archivo no existe en el tiempo de ejecución.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta del archivo. | Cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| owner | El nombre de usuario. | cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| group | El nombre del grupo de usuarios. | Cadena | No | El nombre del grupo al que pertenece el usuario. | N/A | No es compatible con Windows. | 

**Ejemplo de entrada: cómo establecer la propiedad del propietario del archivo sin especificar el nombre del grupo de usuarios**

```
  - name: SettingFileOwnerPropertyNoGroup
    action: SetFileOwner
    inputs:
      - path: /home/UserName/SampleText.txt
        owner: LinuxUser
```

**Ejemplo de entrada: establezca la propiedad del propietario del archivo especificando el propietario y el grupo de usuarios**

```
  - name: SettingFileOwnerProperty
    action: SetFileOwner
    inputs:
      - path: /home/UserName/SampleText.txt
        owner: LinuxUser
        group: LinuxUserGroup
```

**Output**  
Ninguna.

### SetFolderOwner (Linux, Windows, macOS)
<a name="action-modules-setfolderowner"></a>

El módulo de **SetFolderOwner**acción modifica de forma recursiva las propiedades del `group` propietario `owner` y las de los propietarios de una carpeta existente. De forma predeterminada, el módulo puede modificar la propiedad de todo el contenido de una carpeta. Para omitir este comportamiento, se puede configurar la opción `recursive` como `false`. Este módulo no es compatible con las plataformas Windows. 

Este módulo acepta nombres de usuarios y grupos como entradas. Si no se proporciona el nombre del grupo, el módulo asigna el propietario del archivo al grupo al que pertenece el usuario.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para realizar la modificación especificada.
+ El nombre de usuario o grupo especificado no existe en el tiempo de ejecución.
+ La carpeta no existe en el tiempo de ejecución.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta de la carpeta. | Cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| owner | El nombre de usuario. | cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| group | El nombre del grupo de usuarios. | Cadena | No | El nombre del grupo al que pertenece el usuario. | N/A | No es compatible con Windows. | 
| recursive | Anula el comportamiento predeterminado de modificar la propiedad de todo el contenido de una carpeta cuando se establece como false. | Booleano | No | true | N/A | No es compatible con Windows. | 

**Ejemplo de entrada: cómo establecer la propiedad del propietario de la carpeta sin especificar el nombre del grupo de usuarios**

```
  - name: SettingFolderPropertyWithOutGroup
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
```

**Ejemplo de entrada: cómo establecer la propiedad del propietario de la carpeta sin anular la propiedad de todo el contenido de una carpeta**

```
  - name: SettingFolderPropertyWithOutRecursively
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
        recursive: false
```

**Ejemplo de entrada: cómo establecer la propiedad del propietario del archivo especificando el nombre del grupo de usuarios**

```
  - name: SettingFolderPropertyWithGroup
    action: SetFolderOwner
    inputs:
      - path: /SampleFolder/
        owner: LinuxUser
        group: LinuxUserGroup
```

**Output**  
Ninguna.

### SetFilePermissions (Linux, Windows, macOS)
<a name="action-modules-setfilepermissions"></a>

El módulo de **SetFilePermissions**acción modifica el `permissions` de un archivo existente. Este módulo no es compatible con las plataformas Windows. 

La entrada para `permissions` debe ser un valor de cadena.

Este módulo de acción puede crear un archivo con los permisos definidos por el valor umask predeterminado del sistema operativo. Debe establecer el valor `umask` si quiere anular el valor predeterminado.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para realizar la modificación especificada.
+ El archivo no existe en el tiempo de ejecución.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta del archivo. | Cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| permissions | Permisos de archivos. | Cadena | Sí | N/A | N/A | No es compatible con Windows. | 

**Ejemplo de entrada: modificación de los permisos de los archivos**

```
  - name: ModifyingFilePermissions
    action: SetFilePermissions
    inputs:
      - path: /home/UserName/SampleFile.txt
        permissions: 766
```

**Output**  
Ninguna.

### SetFolderPermissions (Linux, Windows, macOS)
<a name="action-modules-setfolderpermissions"></a>

El módulo de **SetFolderPermissions**acción modifica de forma recursiva `permissions` la carpeta existente y todos sus subarchivos y subcarpetas. De forma predeterminada, este módulo puede modificar los permisos para todo el contenido de la carpeta especificada. Para omitir este comportamiento, se puede configurar la opción `recursive` como `false`. Este módulo no es compatible con las plataformas Windows. 

La entrada para `permissions` debe ser un valor de cadena. 

Este módulo de acción puede modificar los permisos según el valor de umask predeterminado del sistema operativo. Debe establecer el valor `umask` si quiere anular el valor predeterminado.

El módulo de acción devuelve un error cuando ocurre lo siguiente:
+ No tiene permiso para realizar la modificación especificada.
+ La carpeta no existe en el tiempo de ejecución.
+ El módulo de acción detecta un error al realizar la operación.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | Compatible con todas las plataformas | 
| --- | --- | --- | --- | --- | --- | --- | 
| path | La ruta de la carpeta. | Cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| permissions | Permisos para carpetas. | Cadena | Sí | N/A | N/A | No es compatible con Windows. | 
| recursive | Anula el comportamiento predeterminado de modificar los permisos de todo el contenido de una carpeta cuando se establece como false. | Booleano | No | true | N/A | No es compatible con Windows. | 

**Ejemplo de entrada: establecimiento de permisos de carpeta**

```
  - name: SettingFolderPermissions
    action: SetFolderPermissions
    inputs:
      - path: SampleFolder/
        permissions: 0777
```

**Ejemplo de entrada: cómo establecer los permisos de una carpeta sin modificar los permisos para todo el contenido de una carpeta**

```
  - name: SettingFolderPermissionsNoRecursive
    action: SetFolderPermissions
    inputs:
      - path: /home/UserName/SampleFolder/
        permissions: 777
        recursive: false
```

**Output**  
Ninguna.

## Acciones de instalación de software
<a name="action-modules-software-install-actions"></a>

En la siguiente sección se describen los módulos de acción que instalan o desinstalan software.

**Requisitos de IAM**  
Si la ruta de descarga de la instalación es un URI de S3, el rol de IAM que asocie al perfil de instancia debe tener permiso para ejecutar el módulo de acción `S3Download`. Para conceder el permiso necesario, adjunte la política de IAM `S3:GetObject` al rol de IAM asociado a su perfil de instancia y especifique la ruta de acceso a su bucket. Por ejemplo, `arn:aws:s3:::BucketName/*`).

**Entradas MSI complejas**  
Si las cadenas de entrada contienen caracteres entre comillas dobles (`"`), debe utilizar uno de los siguientes métodos para asegurarse de que se interpretan correctamente:
+ Puede utilizar comillas simples (') en la parte exterior de la cadena para contenerla y comillas dobles (") dentro de la cadena, como se muestra en el siguiente ejemplo.

  ```
  properties:
    COMPANYNAME: '"Acme ""Widgets"" and ""Gizmos."""'
  ```

  En este caso, si necesita usar un apóstrofo dentro de la cadena, debe evitarlo. Esto significa usar otra comilla simple (') antes del apóstrofo.
+ Puede usar comillas dobles (") en la parte exterior de la cadena para contenerla. Además, puede evitar las comillas dobles que haya dentro de la cadena utilizando el carácter de barra invertida (`\`), como se muestra en el siguiente ejemplo.

  ```
  properties:
    COMPANYNAME: "\"Acme \"\"Widgets\"\" and \"\"Gizmos.\"\"\""
  ```

Ambos métodos pasan el valor `COMPANYNAME="Acme ""Widgets"" and ""Gizmos."""` al comando **msiexec**.

**Topics**
+ [InstallMSI (Windows)](#action-modules-install-msi)
+ [UninstallMSI (Windows)](#action-modules-uninstall-msi)

### InstallMSI (Windows)
<a name="action-modules-install-msi"></a>

El módulo de acción `InstallMSI` instala una aplicación de Windows mediante un archivo MSI. Puede especificar el archivo MSI mediante una ruta local, un URI de objeto S3 o una URL web. La opción de reinicio configura el comportamiento de reinicio del sistema.

TOE de AWS genera el **msiexec** comando en función de los parámetros de entrada del módulo de acción. Los valores de los parámetros de entrada `path` (ubicación del archivo MSI) y `logFile` (ubicación del archivo de registro) deben escribirse entre comillas (").

Los siguientes códigos de salida MSI se consideran correctos:
+ 0 (Success)
+ 1614 (ERROR\$1PRODUCT\$1UNINSTALLED)
+ 1641 (reinicio iniciado)
+ 3010 (es necesario reiniciar)


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | 
| --- | --- | --- | --- | --- | --- | 
| path |  Especifique la ubicación del archivo MSI, usando una de las siguientes opciones: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html) Se permite el encadenamiento de expresiones.  | Cadena | Sí | N/A | N/A | 
| reboot |  Configure el comportamiento de reinicio del sistema después de que el módulo de acción se ejecute correctamente. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Cadena | No | Allow | Allow, Force, Skip | 
| logOptions |  Especifique las opciones que se van a utilizar para el registro de la instalación de MSI. Los indicadores especificados se pasan al instalador de MSI, junto con el parámetro de línea de comandos `/L` para habilitar el registro. Si no se especifica ningún indicador, TOE de AWS utiliza el valor predeterminado. Para obtener más información acerca de opciones de registro MSI, consulte [Opciones de línea de comandos](https://learn.microsoft.com/en-us/windows/win32/msi/command-line-options) en la documentación de del producto *Windows Installer* Microsoft.  | Cadena | No | \$1VX | i,w,e,a,r,u,c,m,o,p,v,x,\$1,\$1,\$1 | 
| logFile |  Una ruta absoluta o relativa a la ubicación del archivo de registro. Si la ruta del archivo de registro no existe, créela. Si no se proporciona la ruta del archivo de registro, TOE de AWS no almacena el registro de instalación de MSI.  | Cadena | No | N/A | N/A | 
| properties |  Los pares clave-valor de las propiedades de registro MSI, por ejemplo, `TARGETDIR: "C:\target\location"`   Nota: No se permite la modificación de las siguientes propiedades: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Map[String]String | No | N/A | N/A | 
| ignoreAuthenticodeSignatureErrors |  Marcador para ignorar los errores de validación de la firma de Authenticode para el instalador especificado en la ruta. El comando **Get-AuthenticodeSignature** se utiliza para validar los instaladores. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Booleano | No | false | true, false | 
| allowUnsignedInstaller |  Marca que permite ejecutar el instalador sin firma especificado en la ruta. El comando **Get-AuthenticodeSignature** se utiliza para validar los instaladores. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Booleano | No | false | true, false | 

**Ejemplos**  
Los ejemplos siguientes muestran variaciones de la sección de entrada de su documento de componentes, en función de la ruta de instalación.

**Ejemplo de entrada: instalación de la ruta del documento local**

```
- name: local-path-install
  steps:
    - name: LocalPathInstaller
      action: InstallMSI
      inputs:
        path: C:\sample.msi
        logFile: C:\msilogs\local-path-install.log
        logOptions: '*VX'
        reboot: Allow
        properties:
          COMPANYNAME: '"Amazon Web Services"'
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: true
```

**Ejemplo de entrada: instalación de la ruta Amazon S3**

```
- name: s3-path-install
  steps:
    - name: S3PathInstaller
      action: InstallMSI
      inputs:
        path: s3://<bucket-name>/sample.msi
        logFile: s3-path-install.log
        reboot: Force
        ignoreAuthenticodeSignatureErrors: false
        allowUnsignedInstaller: true
```

**Ejemplo de entrada: instalación de una ruta web**

```
- name: web-path-install
  steps:
    - name: WebPathInstaller
      action: InstallMSI
      inputs:
        path: https://<some-path>/sample.msi
        logFile: web-path-install.log
        reboot: Skip
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: false
```

**Output**  
Véase a continuación un ejemplo de la salida del módulo de acción `InstallMSI`.

```
{
	"logFile": "web-path-install.log",
	"msiExitCode": 0,
	"stdout": ""
}
```

### UninstallMSI (Windows)
<a name="action-modules-uninstall-msi"></a>

Este módulo de acción `UninstallMSI` le permite desinstalar una aplicación de Windows utilizando un archivo MSI. Puede especificar la ubicación del archivo MSI mediante una ruta de archivo local, un URI de objeto S3 o una URL web. La opción de reinicio configura el comportamiento de reinicio del sistema.

TOE de AWS genera el **msiexec** comando en función de los parámetros de entrada del módulo de acción. La ubicación del archivo MSI (`path`) y la ubicación del archivo de registro (`logFile`) se escriben explícitamente entre comillas dobles (") al generar el comando **msiexec**.

Los siguientes códigos de salida MSI se consideran correctos:
+ 0 (Success)
+ 1605 (ERROR\$1UNKNOWN\$1PRODUCT)
+ 1614 (ERROR\$1PRODUCT\$1UNINSTALLED)
+ 1641 (reinicio iniciado)
+ 3010 (es necesario reiniciar)


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | Valores aceptables | 
| --- | --- | --- | --- | --- | --- | 
| path |  Especifique la ubicación del archivo MSI, usando una de las siguientes opciones: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html) Se permite el encadenamiento de expresiones.  | Cadena | Sí | N/A | N/A | 
| reboot |  Configura el comportamiento de reinicio del sistema después de que el módulo de acción se ejecute correctamente. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Cadena | No | Allow | Allow, Force, Skip | 
| logOptions |  Especifique las opciones que se van a utilizar para el registro de la instalación de MSI. Los indicadores especificados se pasan al instalador de MSI, junto con el parámetro de línea de comandos `/L` para habilitar el registro. Si no se especifica ningún indicador, TOE de AWS utiliza el valor predeterminado. Para obtener más información acerca de opciones de registro MSI, consulte [Opciones de línea de comandos](https://docs.microsoft.com/en-us/windows/win32/msi/command-line-options) en la documentación de del producto *Windows Installer* Microsoft.  | Cadena | No | \$1VX | i,w,e,a,r,u,c,m,o,p,v,x,\$1,\$1,\$1 | 
| logFile |  Una ruta absoluta o relativa a la ubicación del archivo de registro. Si la ruta del archivo de registro no existe, créela. Si no se proporciona la ruta del archivo de registro, TOE de AWS no almacena el registro de instalación de MSI.  | Cadena | No | N/A | N/A | 
| properties |  Los pares clave-valor de las propiedades de registro MSI, por ejemplo, `TARGETDIR: "C:\target\location"`   Nota: No se permite la modificación de las siguientes propiedades: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Map[String]String | No | N/A | N/A | 
| ignoreAuthenticodeSignatureErrors |  Marcador para ignorar los errores de validación de la firma de Authenticode para el instalador especificado en la ruta. El comando **Get-AuthenticodeSignature** se utiliza para validar los instaladores. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Booleano | No | false | true, false | 
| allowUnsignedInstaller |  Marca que permite ejecutar el instalador sin firma especificado en la ruta. El comando **Get-AuthenticodeSignature** se utiliza para validar los instaladores. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html)  | Booleano | No | false | true, false | 

**Ejemplos**  
Los ejemplos siguientes muestran variaciones de la sección de entrada de su documento de componentes, en función de la ruta de instalación.

**Ejemplo de entrada: eliminación de la instalación de la ruta del documento local**

```
- name: local-path-uninstall
  steps:
    - name: LocalPathUninstaller
      action: UninstallMSI
      inputs:
        path: C:\sample.msi
        logFile: C:\msilogs\local-path-uninstall.log
        logOptions: '*VX'
        reboot: Allow
        properties:
          COMPANYNAME: '"Amazon Web Services"'
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: true
```

**Ejemplo de entrada: eliminación de la instalación de la ruta Amazon S3**

```
- name: s3-path-uninstall
  steps:
    - name: S3PathUninstaller
      action: UninstallMSI
      inputs:
        path: s3://<bucket-name>/sample.msi
        logFile: s3-path-uninstall.log
        reboot: Force
        ignoreAuthenticodeSignatureErrors: false
        allowUnsignedInstaller: true
```

**Ejemplo de entrada: eliminación de la instalación de una ruta web**

```
- name: web-path-uninstall
  steps:
    - name: WebPathUninstaller
      action: UninstallMSI
      inputs:
        path: https://<some-path>/sample.msi
        logFile: web-path-uninstall.log
        reboot: Skip
        ignoreAuthenticodeSignatureErrors: true
        allowUnsignedInstaller: false
```

**Output**  
Véase a continuación un ejemplo de la salida del módulo de acción `UninstallMSI`.

```
{
	"logFile": "web-path-uninstall.log",
	"msiExitCode": 0,
	"stdout": ""
}
```

## Módulos de acción del sistema
<a name="action-modules-system-actions"></a>

En la siguiente sección se describen los módulos de acción que ejecutan acciones del sistema o actualizan la configuración del sistema.

**Topics**
+ [Reboot (Linux, Windows)](#action-modules-reboot)
+ [SetRegistry (Windows)](#action-modules-setregistry)
+ [UpdateOS (Linux, Windows)](#action-modules-updateos)

### Reboot (Linux, Windows)
<a name="action-modules-reboot"></a>

El módulo de acción **Reboot** reinicia la instancia. Tiene una opción configurable para retrasar el inicio del reinicio. De forma predeterminada, `delaySeconds` está configurada como `0`, lo que significa que no hay ningún retraso. El tiempo de espera por pasos no es compatible con el módulo de acción de reinicio, ya que no se aplica cuando se reinicia la instancia.

Si Systems Manager Agent invoca la aplicación, entrega el código de salida (`3010` para Windows o `194` Linux) a Systems Manager Agent. Systems Manager Agent gestiona el reinicio del sistema tal y como se describe en [Reiniciar una instancia gestionada desde scripts](https://docs.aws.amazon.com/systems-manager/latest/userguide/send-commands-reboot.html).

Si la aplicación se invoca en el host como un proceso independiente, guarda el estado de ejecución actual, configura un activador de ejecución automática posterior al reinicio para volver a ejecutar la aplicación después del reinicio y, a continuación, reinicia el sistema.

**Activador de ejecución automática posterior al reinicio:**
+ **Windows.** TOE de AWS crea una entrada del programador de tareas de Windows con un activador que se ejecuta automáticamente en `SystemStartup`
+ **Linux.** TOE de AWS agrega un trabajo en crontab que se ejecuta automáticamente después de que el sistema se reinicie.

```
@reboot /download/path/awstoe run --document s3://bucket/key/doc.yaml
```

Este activador se borra cuando se inicia la aplicación.

**Reintentos**  
De forma predeterminada, el número máximo de reintentos se establece en `CommandRetryLimit` de Systems Manager. Si el número de reinicios supera el límite de reintentos, se produce un error en la automatización. Para cambiar el límite, puede editar el archivo de configuración del agente de Systems Manager (`Mds.CommandRetryLimit`). Consulte [Runtime Configuration](https://github.com/aws/amazon-ssm-agent/blob/mainline/README.md#runtime-configuration) en el código abierto del agente de Systems Manager.

Para utilizar el módulo de acción **reinicio**, para los pasos que contienen el reinicio `exitcode` (por ejemplo, `3010`), debe ejecutar la aplicación binaria como `sudo user`.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | Predeterminado | 
| --- | --- | --- | --- | --- | 
| delaySeconds | Retrasa un tiempo específico antes de iniciar un reinicio. | Entero |  No  |  `0`  | 

**Ejemplo de entrada: paso de reinicio**

```
  - name: RebootStep
    action: Reboot
    onFailure: Abort
    maxAttempts: 2
    inputs:
      delaySeconds: 60
```

**Salida**

Ninguna.

Cuando finalice el módulo **Reboot**, Generador de Imágenes continúa con el siguiente paso de la compilación.

### SetRegistry (Windows)
<a name="action-modules-setregistry"></a>

El módulo de **SetRegistry**acción acepta una lista de entradas y permite establecer el valor de la clave de registro especificada. Si no existe una clave de registro, se crea en la ruta definida. Esta característica solo se aplica a los clientes de Windows.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| path | Ruta de la clave de registro. | Cadena | Sí | 
| name | Nombre de la clave de registro. | Cadena | Sí | 
| value | Valor de la clave de registro. | String/Number/Array | Sí | 
| type | Valor de la clave de registro. | Cadena | Sí | 

**Prefijos de ruta admitidos**
+ `HKEY_CLASSES_ROOT / HKCR:`
+ `HKEY_USERS / HKU:`
+ `HKEY_LOCAL_MACHINE / HKLM:`
+ `HKEY_CURRENT_CONFIG / HKCC:`
+ `HKEY_CURRENT_USER / HKCU:`

**Tipos admitidos**
+ `BINARY`
+ `DWORD`
+ `QWORD`
+ `SZ`
+ `EXPAND_SZ`
+ `MULTI_SZ`

**Ejemplo de entrada: cómo establecer los valores de las claves de registro**

```
  - name: SetRegistryKeyValues
    action: SetRegistry
    maxAttempts: 3
    inputs:
      - path: HKLM:\SOFTWARE\MySoftWare
        name: MyName
        value: FirstVersionSoftware
        type: SZ
      - path: HKEY_CURRENT_USER\Software\Test
        name: Version
        value: 1.1
        type: DWORD
```

**Salida**

Ninguna.

### UpdateOS (Linux, Windows)
<a name="action-modules-updateos"></a>

El módulo de acción **UpdateOS** añade soporte para instalar actualizaciones de Windows y Linux. Instala todas las actualizaciones disponibles de forma predeterminada. Como alternativa, puede configurar una lista de una o más actualizaciones específicas para que las instale el módulo de acción. También puede especificar las actualizaciones para excluirlas de la instalación.

Si se proporcionan listas de "incluir" y "excluir", la lista de actualizaciones resultante solo podrá incluir las incluidas en la lista de "inclusión" que no estén incluidas en la lista de "excluidas".

**nota**  
**UpdateOS** no es compatible con Amazon Linux 2023 (AL2023). Le recomendamos que actualice la AMI base a la nueva versión que viene con cada versión. Para ver otras alternativas, consulte [Controlar las actualizaciones recibidas de las versiones principales y secundarias](https://docs.aws.amazon.com/linux/al2023/ug/deterministic-upgrades.html#controlling-release-updates) en la *Guía del usuario de Amazon Linux 2023*.
+ **Windows**. Las actualizaciones se instalan desde la fuente de actualización configurada en la máquina de destino.
+ **Linux**. La aplicación busca el administrador de paquetes compatible en la plataforma Linux y utiliza un administrador de paquetes `yum` o `apt-get`. Si ninguna de las opciones es compatible, se devuelve un error. Debe tener permisos `sudo` para ejecutar el módulo de acción **UpdateOS**. Si no tiene permisos `sudo` se devuelve un `error.Input`.


**Input**  

| Nombre de la clave | Description (Descripción) | Tipo | Obligatorio/a | 
| --- | --- | --- | --- | 
| include |  Para Windows puede especificar lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html) Para Linux, puede especificar uno o más paquetes para incluirlos en la lista de actualizaciones para su instalación.  | Lista de cadenas | No | 
| exclude |  Para Windows puede especificar lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/imagebuilder/latest/userguide/toe-action-modules.html) Para Linux, puede especificar uno o más paquetes para incluirlos en la lista de actualizaciones para su instalación.  | Lista de cadenas | No | 

**Ejemplo de entrada: cómo añadir soporte para instalar actualizaciones de Linux**

```
  - name: UpdateMyLinux
    action: UpdateOS
    onFailure: Abort
    maxAttempts: 3
    inputs:
      exclude:
        - ec2-hibinit-agent
```

**Ejemplo de entrada: cómo añadir soporte para instalar actualizaciones de Windows**

```
  - name: UpdateWindowsOperatingSystem
    action: UpdateOS
    onFailure: Abort
    maxAttempts: 3
    inputs:
      include:
        - KB1234567
        - '*Security*'
```

**Salida**

Ninguna.

# Configurar la entrada para el comando TOE de AWS run
<a name="toe-run-config-input"></a>

Para agilizar la introducción de los comandos desde la línea de TOE de AWS **run** comandos, puede incluir los ajustes de los parámetros y las opciones de los comandos en un archivo de configuración de entrada en formato JSON con una extensión de `.json` archivo. TOE de AWS puede leer el archivo desde una de las siguientes ubicaciones:
+ Una ruta de archivo local (*./config.json*).
+ Un bucket de S3 (*s3://<bucket-path>/<bucket-name>/config.json*).

Cuando introduce el comando **run**, puede especificar el archivo de configuración de entrada mediante el parámetro **--config**. Por ejemplo:

```
awstoe run --config <file-path>/config.json
```

**Archivo de configuración de entrada**  
El archivo JSON de configuración de entrada incluye pares clave-valor para todos los ajustes que puede proporcionar directamente a través de los parámetros y las opciones de los comandos **run**. Si especifica un ajuste tanto en el archivo de configuración de entrada como en el comando **run**, como parámetro u opción, se aplicarán las siguientes reglas de prioridad:

**Reglas de prioridad**

1. Un ajuste que se proporciona directamente al **run** comando en el AWS CLI, mediante un parámetro o una opción, anula cualquier valor que esté definido en el archivo de configuración de entrada para el mismo ajuste.

1. Un parámetro del archivo de configuración de entrada anula el valor predeterminado de un componente.

1. Si no se pasa ninguna otra configuración al documento del componente, se puede aplicar un valor por defecto, si lo hay.

Hay dos excepciones a esta regla: los documentos y los parámetros. Estos ajustes funcionan de forma diferente en la configuración de entrada y como parámetros de comando. Si utiliza el archivo de configuración de entrada, no debe especificar estos parámetros directamente en el comando **run**. Si lo hace, se generará un error.

**Ajustes de los componentes**  
El archivo de configuración de entrada contiene los siguientes ajustes. Para simplificar el archivo, puede omitir cualquier configuración opcional que no sea necesaria. Todos los ajustes son opcionales, a menos que se indique lo contrario.
+ **cwIgnoreFailures**(Booleano): ignore los errores de registro de los registros. CloudWatch 
+ **cwLogGroup**(String): el `LogGroup` nombre de los CloudWatch registros.
+ **cwLogRegion**(Cadena): la AWS región que se aplica a los CloudWatch registros.
+ **cwLogStream**(Cadena): el `LogStream` nombre de los CloudWatch registros, que indica TOE de AWS dónde se debe transmitir el `console.log` archivo.
+ **DocumentS3 BucketOwner** (String): el ID de cuenta del propietario del bucket para los documentos basados en URI de S3.
+ **documentos** (conjunto de objetos, obligatorio): conjunto de objetos JSON que representa los documentos del componente YAML que ejecuta el TOE de AWS **run** comando. Debe especificarse al menos un documento componente.

  Cada objeto consiste en los siguientes campos:
  + **Ruta** (cadena, obligatoria): la ubicación del archivo del documento del componente YAML. Este debe ser uno de los siguientes:
    + Una ruta de archivo local (*./component-doc-example.yaml*).
    + Un URI de S3 (`s3://bucket/key`).
    + Un componente de Image Builder compiló la versión ARN (arn:aws:imagebuilder:us-west-:component/ /2021.12.02/1). *2:123456789012* *my-example-component*
  + **Parámetros** (matriz de objetos): matriz de objetos de pares clave-valor, cada uno de los cuales representa un parámetro específico del componente que el comando **run** transfiere al ejecutar el documento del componente. Los parámetros son opcionales para los componentes. El documento componente puede o no tener parámetros definidos.

    Cada objeto consiste en los siguientes campos:
    + **Nombre** (cadena, obligatorio): el nombre del parámetro del componente.
    + **Valor** (cadena, obligatorio): el valor que se va a transferir al documento del componente para el parámetro nombrado.

    Para obtener más información sobre los parámetros de los componentes, consulte la sección **Parámetros** de la página [Uso de variables en su documento de componentes personalizados](toe-user-defined-variables.md).
+ **executonID** (cadena): este es el identificador único que se aplica a la ejecución del comando **run** actual. Este identificador se incluye en los nombres de los archivos de salida y de registro para identificarlos de forma exclusiva y vincularlos a la ejecución del comando actual. Si se omite TOE de AWS esta configuración, genera un GUID.
+ **LogDirectory** (String): el directorio de destino donde se TOE de AWS almacenan todos los archivos de registro de la ejecución de este comando. De forma predeterminada, este directorio está ubicado en el siguiente directorio principal: `TOE_<DATETIME>_<EXECUTIONID>`. Si no especifica el directorio de registro, TOE de AWS utiliza el directorio de trabajo actual (`.`).
+ **LogS3 BucketName** (String): si los registros de los componentes están almacenados en Amazon S3 (recomendado), TOE de AWS carga los registros de las aplicaciones de los componentes en el bucket de S3 mencionado en este parámetro.
+ **LogS3 BucketOwner** (String): si los registros de los componentes se almacenan en Amazon S3 (recomendado), este es el ID de cuenta propietario del depósito donde se TOE de AWS escriben los archivos de registro.
+ **LogS3 KeyPrefix** (String): si los registros de los componentes se almacenan en Amazon S3 (recomendado), este es el prefijo de clave de objeto S3 para la ubicación del registro en el bucket.
+ **Parámetros** (matriz de objetos): una matriz de objetos de pares clave-valor que representan parámetros que se aplican globalmente a todos los componentes que se incluyen en la ejecución del comando **run** actual.
  + **Nombre** (cadena, obligatorio): el nombre del parámetro global.
  + **Valor** (cadena, obligatorio): el valor que se va a transferir a todos los documentos de componentes del parámetro nombrado.
+ **Fases** (cadena): una lista separada por comas que especifica qué fases se van a ejecutar desde los documentos de componentes de YAML. Si un documento de componentes incluye fases adicionales, no se ejecutarán.
+ **StateDirectory** (cadena): la ruta del archivo donde se almacenan los archivos de seguimiento de estado.
+ **Huella** (booleano): permite el registro detallado en la consola.

**Ejemplos**  
El siguiente ejemplo muestra un archivo de configuración de entrada que ejecuta las fases `build` y `test` de dos documentos componentes: `sampledoc.yaml` y `conversation-intro.yaml`. Cada documento componente tiene un parámetro que se aplica solo a sí mismo y ambos utilizan un parámetro compartido. El parámetro `project` se aplica a ambos documentos componentes.

```
{
   "documents": [
     {
       "path": "<file path>/awstoe/sampledoc.yaml>",
       "parameters": [
         {
           "name": "dayofweek",
           "value": "Monday"
         }
       ]
     },
     {
       "path": "<file path>/awstoe/conversation-intro.yaml>",
       "parameters": [
         {
           "name": "greeting",
           "value": "Hello, HAL."
         }
       ]
     }
   ],
   "phases": "build,test",
   "parameters": [
     {
       "name": "project",
       "value": "examples"
     }
   ],
   "cwLogGroup": "<log_group_name>",
   "cwLogStream": "<log_stream_name>",
   "documentS3BucketOwner": "<owner_aws_account_number>",
   "executionId": "<id_number>",
   "logDirectory": "<local_directory_path>",
   "logS3BucketName": "<bucket_name_for_log_files>",
   "logS3KeyPrefix": "<key_prefix_for_log_files>",
   "logS3BucketOwner": "<owner_aws_account_number>"
 }
```