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.
Temas
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 unaCreationPolicy
, 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 quecfn-init
funciona correctamente y puede crear archivos con contenido dinámico. -
cfn-hup.conf
, el archivo de configuración paracfn-hup
con un intervalo de verificación de 2 minutos. -
cfn-auto-reloader.conf
, el archivo de configuración para el enlace que usacfn-hup
para iniciar una actualización (mediante llamada acfn-init
) cuando cambian los metadatos enAWS::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?