Arranque de pilas de CloudFormation basadas en Windows - AWS CloudFormation

Arranque de pilas de CloudFormation basadas en Windows

En este tema se describe cómo arrancar una pila de Windows y solucionar problemas de creación de pila.

Datos de usuario en instancias de EC2

Los datos de usuario son una característica de Amazon EC2 que le permite pasar scripts o información de configuración a una instancia de EC2 cuando se lanza.

En el caso de las instancias de EC2 de Windows:

  • Los datos de usuario se ejecutan como scripts por lotes.

  • Puede utilizar comandos por lotes (mediante etiquetas <script>) o scripts PowerShell (mediante etiquetas <powershell>).

  • EC2Launch gestiona la ejecución del script.

importante

Si va a crear su propia AMI de Windows para usarla con CloudFormation, asegúrese de que EC2Launch v2 esté configurada correctamente. EC2Launch v2 es necesario para que las herramientas de arranque de CloudFormation inicialicen y configuren correctamente las instancias de Windows durante la creación de la pila. Para obtener más información, consulte Uso del agente EC2Launch v2 para realizar tareas durante la inicialización de una instancia de EC2 Windows en la Guía del usuario de Amazon EC2.

Para obtener información sobre las AMI de Windows de AWS, consulte AWS Windows AMI Reference.

Scripts auxiliares de CloudFormation

Los scripts auxiliares son utilidades para configurar instancias durante el proceso de arranque. Se utilizan con los datos de usuario de Amazon EC2 y ofrecen opciones eficaces de configuración.

CloudFormation proporciona los siguientes scripts auxiliares de Python que puede utilizar para instalar software e iniciar servicios en una instancia de Amazon EC2 que cree como parte de la pila:

  • cfn-init: se utiliza para recuperar e interpretar los metadatos de los recursos, instalar paquetes, crear archivos e iniciar servicios.

  • cfn-signal: se utiliza para señalizar con una CreationPolicy, de modo que se puedan sincronizar otros recursos de la pila cuando esté listo el recurso o la aplicación de requisitos previos.

  • cfn-get-metadata: se utiliza para recuperar los metadatos de un recurso o de la ruta a una clave específica.

  • cfn-hup: se utiliza para comprobar si hay actualizaciones de metadatos y ejecutar enlaces personalizados cuando se detectan cambios.

Los scripts se llaman directamente desde la plantilla. Los scripts funcionan junto con los metadatos de los recursos que están definidos en la misma plantilla. Los scripts se ejecutan en la instancia Amazon EC2 durante el proceso de creación de la pila.

Para obtener más información, consulte Referencia de scripts auxiliares de CloudFormation en la Guía de referencia de plantillas de AWS CloudFormation.

Ejemplo de arranque de una pila de Windows

Examinemos fragmentos de ejemplo de una plantilla de Windows Server que realiza las siguientes acciones:

  • Lanza una instancia de EC2 con el nombre TestInstance de una AMI de Windows Server de 2022.

  • Crea un archivo de prueba sencillo para verificar que cfn-init está funcionando.

  • Configura cfn-hup para la administración continua de la configuración.

  • Utiliza una CreationPolicy para garantizar que la instancia señale la finalización exitosa.

El script auxiliar cfn-init se utiliza para llevar a cabo cada una de estas acciones en función de la información del recurso AWS::CloudFormation::Init de la plantilla.

La sección AWS::CloudFormation::Init se denomina TestInstance y comienza con la siguiente instrucción.

TestInstance: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: configSets: default: - create_files - start_services

Después de esto, la sección files de AWS::CloudFormation::Init se declara.

create_files: files: c:\cfn\test.txt: content: !Sub | Hello from ${AWS::StackName} c:\cfn\cfn-hup.conf: content: !Sub | [main] stack=${AWS::StackName} region=${AWS::Region} interval=2 c:\cfn\hooks.d\cfn-auto-reloader.conf: content: !Sub | [cfn-auto-reloader-hook] triggers=post.update path=Resources.TestInstance.Metadata.AWS::CloudFormation::Init action=cfn-init.exe -v -s ${AWS::StackName} -r TestInstance -c default --region ${AWS::Region}

Aquí se crean tres archivos, que se colocan en el directorio C:\cfn de la instancia del servidor:

  • test.txt, un archivo de prueba simple que verifica que cfn-init funciona correctamente y puede crear archivos con contenido dinámico.

  • cfn-hup.conf, el archivo de configuración para cfn-hup con un intervalo de verificación de 2 minutos.

  • cfn-auto-reloader.conf, el archivo de configuración para el enlace que usa cfn-hup para iniciar una actualización (mediante llamada a cfn-init) cuando cambian los metadatos en AWS::CloudFormation::Init.

La siguiente es la sección start_services que configura los servicios de Windows.

start_services: services: windows: cfn-hup: enabled: true ensureRunning: true files: - c:\cfn\cfn-hup.conf - c:\cfn\hooks.d\cfn-auto-reloader.conf

Esta sección garantiza que el servicio cfn-hup se inicie y se reinicie automáticamente si se modifican los archivos de configuración. El servicio supervisa los cambios en los metadatos de CloudFormation y vuelve a ejecutar cfn-init cuando se detectan actualizaciones.

A continuación está la sección Properties.

TestInstance: Type: AWS::EC2::Instance CreationPolicy: ResourceSignal: Timeout: PT20M Metadata: AWS::CloudFormation::Init: # ... metadata configuration ... Properties: InstanceType: t2.large ImageId: '{{resolve:ssm:/aws/service/ami-windows-latest/Windows_Server-2022-English-Full-Base}}' SecurityGroupIds: - !Ref InstanceSecurityGroup KeyName: !Ref KeyPairName UserData: Fn::Base64: !Sub | <powershell> cfn-init.exe -v -s ${AWS::StackName} -r TestInstance -c default --region ${AWS::Region} cfn-signal.exe -e $lastexitcode --stack ${AWS::StackName} --resource TestInstance --region ${AWS::Region} </powershell>

En esta sección, la propiedad UserData contiene un script PowerShell que ejecutará EC2Launch, rodeado de etiquetas <powershell>. El script ejecuta cfn-init con el ConfigSet default y luego utiliza cfn-signal para informar el código de salida a CloudFormation. La CreationPolicy se utiliza para garantizar que la instancia está configurada correctamente antes de que se dé por finalizada la creación de la pila.

La propiedad ImageId utiliza un parámetro público de Systems Manager Parameter Store para recuperar automáticamente el último ID de AMI del Windows Server de 2022. Este enfoque elimina la necesidad de mapeos de AMI específicos de la región y garantiza que usted siempre obtenga la AMI más reciente. El uso de parámetros de Systems Manager para los ID de AMI es una práctica recomendada para mantener las referencias de AMI actuales. Si planea conectarse a su instancia, asegúrese de que la propiedad SecurityGroupIds haga referencia a un grupo de seguridad que permita el acceso RDP.

La CreationPolicy se declara como parte de las propiedades del recurso y especifica un periodo de tiempo de espera. El comando cfn-signal en las señales de datos de usuario indica cuándo se ha completado la configuración de la instancia:

TestInstance: Type: AWS::EC2::Instance CreationPolicy: ResourceSignal: Timeout: PT20M Properties: # ... other properties ...

Como el proceso de arranque es mínimo y solo crea archivos e inicia los servicios, la CreationPolicy espera 20 minutos (PT20M) antes de que se agote el tiempo de espera. El tiempo de espera se especifica mediante el formato de duración ISO 8601. Tenga en cuenta que las instancias de Windows suelen tardar más en lanzarse que las instancias de Linux, por lo que debe realizar pruebas exhaustivas para determinar los valores de tiempo de espera más adecuados para sus necesidades.

Si todo va bien, la CreationPolicy se completa correctamente y usted puede acceder a la instancia del Windows Server mediante su dirección IP pública. Una vez completada la creación de la pila, el ID de la instancia y la dirección IP aparecerán en la pestaña Salidas de la consola de CloudFormation.

Outputs: InstanceId: Value: !Ref TestInstance Description: Instance ID of the Windows Server PublicIP: Value: !GetAtt TestInstance.PublicIp Description: Public IP address of the Windows Server

También puede comprobar manualmente que el arranque ha funcionado correctamente conectándote a la instancia mediante RDP y comprobando que el archivo C:\cfn\test.txt existe y contiene el contenido esperado. Para obtener información acerca de cómo conectarse a una instancias de Windows, consulte Conexión a la instancia de Windows mediante RDP en la Guía del usuario de Amazon EC2.

Evite las barras invertidas en las rutas de los archivos de Windows

Al hacer referencia a las rutas de Windows en las plantillas de CloudFormation, recuerde siempre evitar correctamente las barras invertidas (\) según el formato de plantilla que utilice.

  • En el caso de las plantillas JSON, debe usar barras invertidas dobles en las rutas de los archivos de Windows, ya que JSON trata a la barra invertida como un carácter de escape. La primera barra invertida escapa a la segunda, lo que da como resultado la interpretación de una sola barra invertida literal.

    "commands" : { "1-extract" : { "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log" } }
  • En el caso de las plantillas YAML, las barras invertidas únicas suelen ser suficientes.

    commands: 1-extract: command: C:\SharePoint\SharePointFoundation2010.exe /extract:C:\SharePoint\SPF2010 /quiet /log:C:\SharePoint\SharePointFoundation2010-extract.log

Administración de servicios de Windows

Puede administrar los servicios de Windows de la misma forma que los servicios de Linux, salvo que use una clave windows en lugar de sysvinit. El siguiente ejemplo inicia el servicio cfn-hup, lo establece en automático y reinicia el servicio si cfn-init modifica los archivos de configuración c:\cfn\cfn-hup.conf o c:\cfn\hooks.d\cfn-auto-reloader.conf.

services: windows: cfn-hup: enabled: true ensureRunning: true files: - c:\cfn\cfn-hup.conf - c:\cfn\hooks.d\cfn-auto-reloader.conf

Puede administrar otros servicios de Windows de la misma forma mediante el nombre, no el nombre de visualización, para hacer referencia al servicio.

Cómo solucionar problemas de creación de pila

Si la pila falla durante la creación, el comportamiento predeterminado es de restauración en caso de error. Mientras que normalmente dicho comportamiento es bueno, ya que evita gastos innecesarios, dificulta la depuración de por qué falla la creación de la pila.

Para desactivar este comportamiento al crear o actualizar la pila con la consola de CloudFormation, seleccione la opción Preservar los recursos aprovisionados correctamente en Opciones de error de pila. Para obtener más información, consulte Elija cómo gestionar los errores al aprovisionar recursos. Esto le permite iniciar sesión en la instancia y ver el archivo de registros para identificar los problemas encontrados al ejecutar sus scripts de arranque.

Es importante fijarse en estos registros:

  • El registro de configuración de EC2 en %ProgramData%\Amazon\EC2Launch\log\agent.log

  • El registro cfn-init en C:\cfn\log\cfn-init.log (comprueba los códigos de salida y los mensajes de error para ver si hay puntos de fallo específicos)

Para obtener más registros, consulte los siguientes temas en la Guía del usuario de Amazon EC2:

Para obtener más información sobre la solución de problemas de arranque, consulte ¿Cómo se solucionan los problemas de los scripts auxiliares que no se inician en una pila de CloudFormation con instancias de Windows?.