Saltar al contenido

¿Cómo puedo ejecutar un comando en una instancia de Windows en Amazon EC2 cuando inicio o reinicio la instancia?

5 minutos de lectura
0

Quiero ejecutar un script personalizado en mi instancia de Windows en Amazon Elastic Compute Cloud (Amazon EC2) cuando inicio o reinicio la instancia.

Descripción corta

Para ejecutar un comando al iniciar o reiniciar la instancia de EC2, configura un script de datos usuario para que se ejecute al reiniciar o iniciar la instancia.

Según tu sistema operativo (SO), tu configuración utiliza los siguientes agentes para procesar los datos de los usuarios:

  • Windows Server 2012 R2 y versiones anteriores utilizan EC2Config.
  • Windows Server 2016 y 2019 usa EC2Launch.
  • Windows Server 2022 y 2025 usa EC2Launch v2.

Nota: Para actualizar los datos de usuario de la instancia con la consola de Amazon EC2, debes detener la instancia. Sin embargo, para EC2Launch v2, puedes usar un script YAML para actualizar la instancia sin detenerla ni iniciarla.

Resolución

(Solo EC2Launch v2) Usa un script YAML para actualizar la instancia sin detenerla ni iniciarla

Utiliza el Protocolo de escritorio remoto (RDP) para conectarte a tu instancia de Windows.

Para ejecutar el script con cada reinicio o inicio, actualiza el archivo agent-config.yml. Agrega la tarea executeScript a stage: PostReady y establece la frecuencia en siempre.

Ejemplo de archivo YAML:

version: "1.0"
config:
  - stage: boot
    tasks:
      - task: extendRootPartition
  - stage: preReady
    tasks:
      - task: activateWindows
        inputs:
          activation:
            type: amazon
      - task: setDnsSuffix
        inputs:
          suffixes:
            - $REGION.ec2-utilities.amazonaws.com
      - task: setAdminAccount
        inputs:
          password:
            type: random
      - task: setWallpaper
        inputs:
          attributes:
            - hostName
            - instanceId
            - privateIpAddress
            - publicIpAddress
            - ipv6Address
            - instanceSize
            - availabilityZone
            - architecture
          path: C:\Windows\Web\Wallpaper\Windows\img0.jpg
  - stage: postReady
    tasks:
      - task: startSsm
      - task: executeScript
        inputs:
          - frequency: always
            type: powershell
            runAs: localSystem
            content: |-
                New-Item -Path 'C:\PowerShellTest.txt' -ItemType File

Para ejecutar el script solo en el siguiente reinicio o inicio de la instancia, abre C:\ProgramData\Amazon\EC2Launch\state y, a continuación, elimina el archivo .run-once. Actualiza el archivo agent-config.yml para agregar la tarea executeScript a stage: postReady y establece frecuencia en una vez.

Importante: Cuando eliminas el archivo .run-once, la contraseña del administrador local de la instancia cambia al reiniciar. Si lanzaste la instancia sin un par de claves o perdiste el par de claves, es posible que pierdas el acceso a la instancia al reiniciarla.

Para obtener más información sobre la sintaxis de los comandos, consulta Sintaxis de los scripts de configuración de YAML.

Configuración de la instancia para que se detenga e inicie

Nota: Al detener e iniciar una instancia, la dirección IP pública de la instancia cambia. Se recomienda utilizar una dirección IP elástica para enrutar el tráfico externo hacia la instancia en lugar de una dirección IP pública. Si usas Amazon Route 53, es posible que tengas que actualizar los registros DNS de Route 53 cuando cambies la dirección IP pública. Detener e iniciar es diferente al reinicio de una instancia. Para obtener más información, consulta Funcionamiento de la detención y el inicio de instancias de EC2.

Antes de detener e iniciar la instancia, lleva a cabo las siguientes acciones:

Actualización de los datos de usuario de la instancia

Agrega tus comandos como un script a los datos de usuario de tu instancia. Para obtener información sobre cómo configurar el script para que se ejecute en cada reinicio o arranque, consulta Ejecución de scripts durante los reinicios o inicios posteriores.

Nota: Para ejecutar el script cada vez que se inicie o reinicie EC2Launch v2, añade un script YAML como tarea executeScript o un script XML. Para YAML, establece frecuencia en siempre y, para los scripts XML, añade la etiqueta <persist>true</persist>. Para todos los agentes, incluye los datos del usuario en una etiqueta que defina si el comando se ejecuta en la línea de comandos o en Windows PowerShell. Para obtener más información acerca de la sintaxis de los comandos, consulta Sintaxis de los scripts de Windows PowerShell.

Solución de problemas

Para solucionar problemas, comprueba la salida estándar y los flujos de errores estándar en los archivos de registro de EC2Config, EC2Launch o EC2Launch v2.

Para buscar los archivos de registro, revisa las siguientes ubicaciones:

  • Para EC2Config, comprueba C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log.
  • Para EC2Launch, comprueba C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log.
  • Para EC2Launch v2, comprueba C:\ProgramData\Amazon\EC2Launch\log\agent.log.

Información relacionada

¿Cómo puedo ejecutar un comando en una nueva instancia de Windows en EC2 en el momento del lanzamiento?

OFICIAL DE AWSActualizada hace 8 meses