

# Definiciones de tareas para tareas de inicio de EC2Launch v2
<a name="ec2launch-v2-task-definitions"></a>

Cada tarea que ejecuta EC2Launch v2 durante el lanzamiento o la puesta en marcha tiene su propio conjunto de propiedades y requisitos. Los detalles de la tarea incluyen la configuración de la frecuencia con la que se ejecuta una tarea (una vez o siempre), la fase del proceso de arranque del agente en la que se ejecuta, la sintaxis y ejemplos de documentos de YAML. Para obtener más información, revise los detalles de la tarea que se muestran en esta referencia.

**Topics**
+ [activateWindows](#ec2launch-v2-activatewindows)
+ [enableJumboFrames](#ec2launch-v2-enablejumboframes)
+ [enableOpenSsh](#ec2launch-v2-enableopenssh)
+ [executeProgram](#ec2launch-v2-executeprogram)
+ [executeScript](#ec2launch-v2-executescript)
+ [extendRootPartition](#ec2launch-v2-extendrootpartition)
+ [initializeVolume](#ec2launch-v2-initializevolume)
+ [optimizeEna](#ec2launch-v2-optimizeena)
+ [setAdminAccount](#ec2launch-v2-setadminaccount)
+ [setDnsSuffix](#ec2launch-v2-setdnssuffix)
+ [setHostName](#ec2launch-v2-sethostname)
+ [setWallpaper](#ec2launch-v2-setwallpaper)
+ [startSsm](#ec2launch-v2-startssm)
+ [sysprep](#ec2launch-v2-task-sysprep)
+ [writeFile](#ec2-launch-v2-writefile)

## activateWindows
<a name="ec2launch-v2-activatewindows"></a>

Activa Windows frente a un conjunto de servidores AWS KMS. La activación se omite si se detecta que la instancia es de tipo “traiga su propia licencia (BYOL)”.

*Frecuencia*: una vez

*AllowedStages* — `[PreReady]`

*Entradas* — 

`activation`: (mapa)

`type`: (cadena) tipo de activación que se va a utilizar, se establece en `amazon`

*Ejemplo*

```
task: activateWindows
  inputs:
    activation:
    type: amazon
```

## enableJumboFrames
<a name="ec2launch-v2-enablejumboframes"></a>

Habilita tramas gigantes, que aumentan la unidad de transmisión máxima (MTU) del adaptador de red. Para obtener más información, consulte [Tramas gigantes (9 001 MTU)](network_mtu.md#jumbo_frame_instances).

*Frecuencia*: siempre

*AllowedStages* — `[PostReady, UserData]`

*Entradas*: ninguna

*Ejemplo*

```
task: enableJumboFrames
```

## enableOpenSsh
<a name="ec2launch-v2-enableopenssh"></a>

Habilita Windows OpenSSH y agrega la clave pública de la instancia a la carpeta de claves autorizadas.

*Frecuencia*: una vez

*AllowedStages* — `[PreReady, UserData]`

*Entradas*: ninguna

*Ejemplo*

En el ejemplo siguiente se muestra cómo habilitar OpenSSH en una instancia y agregar la clave pública de la instancia a la carpeta de claves autorizadas. Esta configuración solo funciona en instancias que ejecutan Windows Server 2019 y en versiones posteriores.

```
task: enableOpenSsh
```

## executeProgram
<a name="ec2launch-v2-executeprogram"></a>

Ejecuta un programa con argumentos opcionales y una frecuencia especificada.

**Etapas:** puede ejecutar la tarea `executeProgram` durante las etapas `PreReady`, `PostReady` y `UserData`.

**Frecuencia:** configurable, consulte *Entradas*.

**Entradas**  
Esta sección contiene uno o más programas para ejecutar la tarea **executeProgram** (entradas). Cada paso puede incluir los siguientes atributos:    
**frequency (cadena)**  
(Obligatorio) Especifique exactamente uno de los siguientes valores:  
+ `once`
+ `always`  
**ruta (cadena)**  
(Obligatorio) La ruta del archivo para el ejecutable a ejecutar.  
**arguments (lista de cadenas)**  
(Opcional) Una lista de argumentos separados por comas para proporcionar al programa como entrada.  
**runAs (cadena)**  
(Obligatorio) Debe configurarse en `localSystem`

**Output**  
Todas las tareas escriben las entradas del archivo de registro en el archivo `agent.log`. Los resultados adicionales de la tarea `executeProgram` se almacenan por separado en una carpeta con nombre dinámico, de la siguiente manera:  
`%LocalAppData%\Temp\EC2Launch#########\outputfilename.tmp`  
La ruta exacta a los archivos de salida se incluye en el archivo `agent.log`, por ejemplo:  

```
Program file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\ExecuteProgramInputs.tmp
Output file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\Output.tmp
Error file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\Err.tmp
```
**Archivos de salida para la tarea `executeProgram`**    
`ExecuteProgramInputs.tmp`  
Contiene la ruta del ejecutable y todos los parámetros de entrada que la tarea `executeProgram` le transfiere cuando se ejecuta.  
`Output.tmp`  
Contiene la salida del tiempo de ejecución del programa en el que se ejecuta la tarea `executeProgram`.  
`Err.tmp`  
Contiene el error del tiempo de ejecución del programa en el que se ejecuta la tarea `executeProgram`.

**Ejemplos**  
En los siguientes ejemplos, se muestra cómo ejecutar un archivo ejecutable desde un directorio local en una instancia con la tarea `executeProgram`.  
**Ejemplo 1: Configurar el ejecutable con un argumento**  
En este ejemplo, se muestra una tarea `executeProgram` que ejecuta un ejecutable de configuración en modo silencioso.

```
task: executeProgram
  inputs:
    - frequency: always
      path: C:\Users\Administrator\Desktop\setup.exe
      arguments: ['-quiet']
```
**Ejemplo 2: Ejecutable de VLC con dos argumentos**  
Este ejemplo muestra una tarea `executeProgram` que ejecuta un archivo ejecutable de VLC con dos argumentos pasados como parámetros de entrada.

```
task: executeProgram
  inputs:
    - frequency: always
      path: C:\vlc-3.0.11-win64.exe 
      arguments: ['/L=1033','/S']
      runAs: localSystem
```

## executeScript
<a name="ec2launch-v2-executescript"></a>

Ejecuta un script con argumentos opcionales y una frecuencia especificada. El comportamiento de los scripts depende del modo en el que el agente los ejecute: en línea o de forma independiente.

En línea (predeterminado)  
El agente de EC2Launch v2 ejecuta los scripts de uno en uno (`detach: false`). Este es el valor predeterminado.  
Cuando el script en línea emite un comando **reset** o **sysprep**, se ejecuta de manera inmediata y restablece el agente. La tarea actual finaliza y, a continuación, el agente se cierra sin ejecutar ninguna otra tarea.  
Por ejemplo, si la tarea que emite el comando hubiera estado seguida de una tarea `startSsm` (incluida de forma predeterminada cuando se ejecutan los datos del usuario), la tarea no se ejecutaría y el servicio Systems Manager nunca se iniciaría.

Desconectado  
El agente EC2Launch v2 ejecuta scripts de manera simultánea a otras tareas (`detach: true`).  
Cuando el script independiente emite un comando **reset** o **sysprep**, dichos comandos esperan a que el agente termine antes de ejecutarse. Las tareas posteriores a executeScript seguirán ejecutándose.

**Etapas:** puede ejecutar la tarea `executeScript` durante las etapas `PreReady`, `PostReady` y `UserData`.

**Frecuencia:** configurable, consulte *Entradas*.

**Entradas**  
Esta sección contiene uno o más scripts para ejecutar la tarea **executeScript** (entradas). Cada paso puede incluir los siguientes atributos:    
**frequency (cadena)**  
(Obligatorio) Especifique exactamente uno de los siguientes valores:  
+ `once`
+ `always`  
**type (cadena)**  
(Obligatorio) Especifique exactamente uno de los siguientes valores:  
+ `batch`
+ `powershell`  
**arguments (lista de cadenas)**  
(Opcional) Una lista de argumentos de cadena para pasar al intérprete de comandos (no al script de PowerShell). Este parámetro no es compatible con `type: batch`. Si no se pasa ningún argumento, EC2Launch v2 agrega el siguiente argumento de forma predeterminada: `-ExecutionPolicy Unrestricted`.  
**content (cadena)**  
(Obligatorio) Contenido de script.  
**runAs (cadena)**  
(Obligatorio) Especifique exactamente uno de los siguientes valores:  
+ `admin`
+ `localSystem`  
**detach (booleano)**  
(Opcional) El agente EC2Launch v2 ejecuta de forma predeterminada los scripts de uno en uno (`detach: false`). Para ejecutar el script simultáneamente con otras tareas, defina el valor en `true` (`detach: true`).  
Los códigos de salida de script (incluido `3010`) no surten efecto cuando `detach` está establecido como `true`.

**Output**  
Todas las tareas escriben las entradas del archivo de registro en el archivo `agent.log`. La salida adicional del script que ejecuta la tarea `executeScript` se almacena por separado en una carpeta con nombre dinámico, de la siguiente manera:  
`%LocalAppData%\Temp\EC2Launch#########\outputfilename.ext`  
La ruta exacta a los archivos de salida se incluye en el archivo `agent.log`, por ejemplo:  

```
Program file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\UserScript.ps1
Output file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\Output.tmp
Error file is created at: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\EC2Launch123456789\Err.tmp
```
**Archivos de salida para la tarea `executeScript`**    
`UserScript.ext`  
Contiene el script en el que se ejecutó la tarea `executeScript`. La extensión del archivo depende del tipo de script que haya especificado en el parámetro `type` de la tarea `executeScript`, como se indica a continuación:  
+ Si el tipo es `batch`, entonces la extensión del archivo es `.bat`.
+ Si el tipo es `powershell`, entonces la extensión del archivo es `.ps1`.  
`Output.tmp`  
Contiene la salida del tiempo de ejecución del script en el que se ejecuta la tarea `executeScript`.  
`Err.tmp`  
Contiene el error del tiempo de ejecución del script en el que se ejecuta la tarea `executeScript`.

**Ejemplos**  
En los siguientes ejemplos, se muestra cómo ejecutar un script en línea con la tarea `executeScript`.  
**Ejemplo 1: Archivo de texto de salida de Hola mundo**  
En este ejemplo, se muestra una tarea `executeScript` en la que se ejecuta un script de PowerShell para crear un archivo de texto que diga “Hola mundo” en la unidad `C:`.

```
task: executeScript
  inputs:
    - frequency: always
      type: powershell
      runAs: admin
      content: |-
        New-Item -Path 'C:\PowerShellTest.txt' -ItemType File
        Set-Content 'C:\PowerShellTest.txt' "Hello world"
```
**Ejemplo 2: Ejecutar dos scripts**  
En este ejemplo, se muestra que la tarea `executeScript` puede ejecutar más de un script y que el tipo de script no tiene por qué coincidir.
El primer script (`type: powershell`) escribe un resumen de los procesos que se están ejecutando actualmente en la instancia en un archivo de texto ubicado en la unidad `C:`.  
El segundo script (`batch`) escribe la información del sistema en el archivo `Output.tmp`.  

```
task: executeScript
  inputs:
    - frequency: always
      type: powershell
      runAs: localSystem
      content: |
        Get-Process | Out-File -FilePath C:\Process.txt
    - frequency: always
      type: batch
      runAs: localSystem
      content: |
        systeminfo
```
**Ejemplo 3: Configurar el sistema idempotente con reinicios**  
En este ejemplo, se muestra una tarea `executeScript` en la que se ejecuta un script idempotente para realizar la siguiente configuración del sistema con un reinicio entre cada paso:
+ Cambiar el nombre del equipo.
+ Unir el equipo al dominio.
+ Habilitar Telnet.
El script garantiza que cada operación se ejecute una sola vez. Esto evita un bucle de reinicio y hace que el script sea idempotente.  

```
task: executeScript
  inputs:
    - frequency: always
      type: powershell
      runAs: localSystem
      content: |-
        $name = $env:ComputerName
        if ($name -ne $desiredName) {
          Rename-Computer -NewName $desiredName
          exit 3010
        }
        $domain = Get-ADDomain
        if ($domain -ne $desiredDomain) 
        {
          Add-Computer -DomainName $desiredDomain
          exit 3010
        }
        $telnet = Get-WindowsFeature -Name Telnet-Client
        if (-not $telnet.Installed)
        {
          Install-WindowsFeature -Name "Telnet-Client"
          exit 3010 
        }
```

## extendRootPartition
<a name="ec2launch-v2-extendrootpartition"></a>

Extiende el volumen raíz para utilizar todo el espacio disponible en el disco.

*Frecuencia*: una vez

*AllowedStages* — `[Boot]`

*Entradas*: ninguna

*Ejemplo* 

```
task: extendRootPartition
```

## initializeVolume
<a name="ec2launch-v2-initializevolume"></a>

Inicializa los volúmenes vacíos que están asociados a la instancia para que se activen y se particionen. El agente de inicialización omite la inicialización si detecta que el volumen no está vacío. Un volumen se considera vacío si los primeros 4 KB del volumen están vacíos o si el volumen no tiene un [diseño de unidad reconocible por Windows](https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-drive_layout_information_ex).

El parámetro de entrada `letter` siempre se aplica cuando se ejecuta esta tarea, independientemente de si la unidad ya está inicializada.

La tarea `initializeVolume` realiza las siguientes acciones.
+ Establezca los atributos del disco `offline` y `readonly` en false.
+ Cree una partición. Si no se especifica ningún tipo de partición en el parámetro de entrada `partition`, se aplican los siguientes valores predeterminados:
  + Si el tamaño del disco es inferior a 2 TB, defina el tipo de partición en `mbr`.
  + Si el tamaño del disco es de 2 TB o mayor, defina el tipo de partición en `gpt`.
+ Dé formato al volumen como NTFS.
+ Defina la etiqueta de volumen de la siguiente manera:
  + Use el valor del parámetro de entrada `name`, si procede.
  + Si el volumen es efímero y no se especificó ningún nombre, defina la etiqueta de volumen en `Temporary Storage Z`.
+ Si el volumen es efímero (SSD o HDD, no Amazon EBS), cree un archivo `Important.txt` en la raíz del volumen con el siguiente contenido:

  ```
  This is an 'Instance Store' disk and is provided at no additional charge.
  
  *This disk offers increased performance since it is local to the host
  *The number of Instance Store disks available to an instance vary by instance type
  *DATA ON THIS DRIVE WILL BE LOST IN CASES OF IMPAIRMENT OR STOPPING THE INSTANCE. PLEASE ENSURE THAT ANY IMPORTANT DATA IS BACKED UP FREQUENTLY
  
  For more information, please refer to: Almacenamiento de nivel de bloques temporal del almacén de instancias para las instancias de EC2.
  ```
+ Defina la letra de la unidad en el valor especificado en el parámetro de entrada `letter`.

**Etapas:** puede ejecutar la tarea `initializeVolume` durante las etapas `PostReady` y `UserData`.

**Frecuencia:** siempre.

**Entradas**  
Puede configurar los parámetros de tiempo de ejecución de la siguiente manera:    
**devices (lista de asignaciones)**  
(Condicional) Configuración para cada dispositivo que inicialice el agente de inicialización. Es necesario cuando el parámetro de entrada `initialize` se establece en `devices`.  
+ **device (cadena, obligatorio)**: identifica el dispositivo durante la creación de la instancia. Por ejemplo, `xvdb`, `xvdf` o `\dev\nvme0n1`.
+ **letter (cadena, opcional)**: un carácter. La letra de unidad que se va a asignar.
+ **name (cadena, opcional)**: el nombre del volumen que se va a asignar.
+ **partition (cadena, opcional)**: especifique uno de los siguientes valores para el tipo de partición que desee crear o deje que el agente de inicialización tome el valor predeterminado en función del tamaño del volumen:
  + mbr
  + gpt  
**initialize (cadena)**  
(Obligatorio) Especifique exactamente uno de los siguientes valores:  
+ `all`
+ `devices`

**Ejemplos**  
En los siguientes ejemplos se muestran ejemplos de configuraciones de entrada para la tarea `initializeVolume`.  
**Ejemplo 1: inicializar dos volúmenes en una instancia**  
En este ejemplo, se muestra una tarea `initializeVolume` que inicializa dos volúmenes secundarios en una instancia. El dispositivo llamado `DataVolume2` en el ejemplo es efímero.

```
task: initializeVolume
inputs:
  initialize: devices
  devices:
  - device: xvdb
    name: DataVolume1
    letter: D
    partition: mbr
  - device: /dev/nvme0n1
    name: DataVolume2
    letter: E
    partition: gpt
```

**Ejemplo 2: inicializar volúmenes de EBS adjuntos a una instancia**  
En este ejemplo, se muestra una tarea `initializeVolume` que inicializa todos los volúmenes vacíos de EBS adjuntos a la instancia.

```
task: initializeVolume
inputs:
  initialize: all
```

## optimizeEna
<a name="ec2launch-v2-optimizeena"></a>

Optimiza la configuración de ENA en función del tipo de instancia actual; podría reiniciar la instancia.

*Frecuencia*: siempre

*AllowedStages* — `[PostReady, UserData]`

*Entradas*: ninguna

*Ejemplo* 

```
task: optimizeEna
```

## setAdminAccount
<a name="ec2launch-v2-setadminaccount"></a>

Establece atributos para la cuenta de administrador predeterminada que se crea en el equipo local.

*Frecuencia*: una vez

*AllowedStages* — `[PreReady]`

*Entradas* — 

`name`: (cadena) nombre de la cuenta de administrador

`password`: (mapa)

`type`: (cadena) estrategia para establecer la contraseña, ya sea como `static`, `random` o `doNothing`

`data`: (cadena) almacena datos si el campo `type` es estático

*Ejemplo*

```
task: setAdminAccount
inputs:
  name: Administrator
  password:
  type: random
```

## setDnsSuffix
<a name="ec2launch-v2-setdnssuffix"></a>

Agrega sufijos DNS a la lista de sufijos de búsqueda. Sólo se agregan a la lista los sufijos que aún no existen. Para obtener más información acerca de cómo los agentes de inicialización configuran los sufijos de DNS, consulte [Configuración del sufijo de DNS para los agentes de inicialización de Windows de EC2](launch-agents-set-dns.md).

*Frecuencia*: siempre

*AllowedStages* — `[PreReady]`

*Entradas* — 

`suffixes`: (lista de cadenas) enumera uno o varios sufijos DNS válidos; las variables de sustitución válidas son `$REGION` y `$AZ`

*Ejemplo*

```
task: setDnsSuffix
inputs:
  suffixes:
  - $REGION.ec2-utilities.amazonaws.com
```

## setHostName
<a name="ec2launch-v2-sethostname"></a>

Establece el nombre de host del equipo en una cadena personalizada o, si no se especifica `hostName`, la dirección IPv4 privada.

*Frecuencia*: siempre

*AllowedStages* — `[PostReady, UserData]`

*Entradas* — 

`hostName`: (cadena) nombre de host opcional, que debe tener el siguiente formato.
+ Debe tener 15 caracteres o menos
+ Debe contener sólo caracteres alfanuméricos (a-z, A-Z, 0-9) y guión (-).
+ No debe estar compuesta únicamente por caracteres numéricos.

`reboot`: (booleano) indica si se permite un reinicio cuando se cambia el nombre de host

*Ejemplo*

```
task: setHostName
inputs:
  reboot: true
```

## setWallpaper
<a name="ec2launch-v2-setwallpaper"></a>

Crea el archivo de acceso directo `setwallpaper.lnk` en la carpeta de inicio de cada usuario existente, excepto el `Default User`. Este archivo de acceso directo se ejecuta cuando el usuario inicia sesión por primera vez después del arranque de la instancia. Configura la instancia con un fondo de pantalla personalizado que muestra los atributos de la instancia.

La ruta del archivo de acceso directo es:

```
$env:SystemDrive/Users/<user>/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/setwallpaper.lnk
```

**nota**  
Al quitar la tarea `setWallpaper`, no elimina este archivo de acceso directo. Para obtener más información, consulte [`setWallpaper`La tarea no está habilitada pero el fondo de pantalla se restablece al reiniciar](ec2launchv2-troubleshooting.md#ec2launchv2-troubleshooting-wallpaper-resets).

**Etapas:** puede configurar el fondo de pantalla durante las etapas `PreReady` y `UserData`.

**Frecuencia:** `always`

**Configuración de fondo de pantalla**  
Puede utilizar los siguientes ajustes para configurar su fondo de pantalla.

**Entradas**  
Introduzca los parámetros que proporcione y los atributos que puede configurar para configurar el fondo de pantalla:    
**ruta (cadena)**  
(Obligatorio) La ruta del nombre del archivo de imagen local en formato .jpg que se va a utilizar en la imagen de fondo de pantalla.  
**atributos (lista de cadenas)**  
(Opcional) Puede agregar uno o más de los siguientes atributos a su fondo de pantalla:  
+ `architecture`
+ `availabilityZone`
+ `hostName`
+ `instanceId`
+ `instanceSize`
+ `privateIpAddress`
+ `publicIpAddress`
+ `ipv6Address`  
**instanceTags**  
(Opcional) Puede utilizar exactamente una de las opciones siguientes para esta configuración.  
+ **AllTags** (cadena) (Todas las etiquetas): agregue todas las etiquetas de instancia a su fondo de pantalla.

  ```
  instanceTags: AllTags
  ```
+ **InstanceTags** (lista de cadenas) (Etiquetas de instancias): especifica una lista de nombres de etiquetas de instancia para agregarlos al fondo de pantalla. Por ejemplo:

  ```
  instanceTags:
    - Tag 1
    - Tag 2
  ```

**Ejemplo**  
El siguiente ejemplo muestra las entradas de configuración del fondo de pantalla que establecen la ruta del archivo de la imagen de fondo del fondo de pantalla, junto con las etiquetas de instancia denominadas `Tag 1` y `Tag 2`, y los atributos que incluyen el nombre de host, el ID de la instancia y las direcciones IP públicas y privadas de la instancia.

```
task: setWallpaper
inputs:
  path: C:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpg
  attributes:
  - hostName
  - instanceId
  - privateIpAddress
  - publicIpAddress
  instanceTags:
  - Tag 1
  - Tag 2
```

**nota**  
Debe habilitar las etiquetas en los metadatos para que se muestren en el fondo de pantalla. Para obtener más información acerca de las etiquetas y metadatos de instancias, consulte [Visualización de etiquetas para las instancias de EC2 mediante los metadatos de la instancia](work-with-tags-in-IMDS.md).

## startSsm
<a name="ec2launch-v2-startssm"></a>

Comienza el servicio Systems Manager (SSM) siguiendo Sysprep.

*Frecuencia*: siempre

*AllowedStages* — `[PostReady, UserData]`

*Entradas*: ninguna

*Ejemplo*

```
task: startSsm
```

## sysprep
<a name="ec2launch-v2-task-sysprep"></a>

Restablece el estado del servicio, actualiza `unattend.xml`, desactiva RDP y ejecuta Sysprep. Esta tarea sólo se ejecuta después de que se hayan completado todas las demás tareas.

*Frecuencia*: una vez

*AllowedStages* — `[UserData]`

*Entradas* — 

`clean`: (booleano) limpia los registros de instancia antes de ejecutar Sysprep

`shutdown`: (booleano) cierra la instancia después de ejecutar Sysprep

*Ejemplo*

```
task: sysprep
inputs:
clean: true
shutdown: true
```

## writeFile
<a name="ec2-launch-v2-writefile"></a>

Escribe un archivo en un destino.

*Frecuencia*: consulte *Entradas*

*AllowedStages* — `[PostReady, UserData]`

*Entradas* — 

`frequency`: (cadena) uno entre `once` y `always`

`destination`: (cadena) ruta en la que escribir el contenido

`content`: (cadena) texto para escribir en el destino

*Ejemplo*

```
task: writeFile
inputs:
  - frequency: once
  destination: C:\Users\Administrator\Desktop\booted.txt
  content: Windows Has Booted
```