¿Cómo puedo solucionar problemas con los scripts de ayuda que no arrancan en una pila de CloudFormation con instancias de Windows?

4 minutos de lectura
0

Mis scripts de ayuda no arrancan en una pila de AWS CloudFormation con instancias de Windows.

Descripción breve

Reinicie la instancia de Windows. En el caso de los scripts de ayuda que no se ejecuten después de reiniciar la instancia de Windows, siga los pasos de la sección Solucionar problemas de arranque.

Si recibe el siguiente error, es posible que tenga problemas con cfn-signal: «Received 0 conditions when expecting X or Failed to receive X resource signal(s) within the specified duration.» Para resolver este error, complete los pasos de la sección Solucionar problemas con cfn-signal.

Para ambos problemas, siga los pasos de la sección Seguir las prácticas recomendadas para usar un sistema operativo Windows con CloudFormation.

Resolución

Solucionar problemas de arranque

Compruebe la sección Comandos del conjunto de configuración cfn-init para verificar que waitAfterCompletion está configurado en forever. Ejemplo:

"commands": { "0-restart": {
 "command": "powershell.exe -Command Restart-Computer",
 "waitAfterCompletion": "forever"
 }
 }

Nota: El valor forever indica a cfn-init que salga y reanude solo después de que se complete el reinicio. Para obtener más información, consulte Comandos.

Después de verificar la configuración, revise los siguientes registros para ver si hay errores:

  • El registro de cfn-init: C:\cfn\log\cfn-init.log
  • Los registros de eventos de Windows: C:\Windows\System32\winevt\logs
    Nota: Amazon Elastic Cloud Compute (Amazon EC2) agente EC2Launch v2 publica los registros de eventos de Windows.
  • (Para las instancias de Windows que utilizan el servicio EC2Config) el registro de configuración: C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt
  • (Para las instancias de Windows que utilizan el agente EC2Launch v1), el registro de inicialización: C:\ProgramData\Amazon\EC2-Windows\Launch\Log

Solucionar problemas con cfn-signal

Siga estos pasos:

  1. Compruebe que ha configurado correctamente la cfn-signal.
    Importante: Utilice -e $lastexitcode en los scripts de PowerShell y -e %ERRORLEVEL% en los scripts cmd.exe de Windows.
    Para los scripts de PowerShell en UserData, utilice las siguientes etiquetas:

    <powershell></powershell>

    Ejemplo de script de PowerShell:

    UserData:        Fn::Base64:
              Fn::Sub : |
                <powershell>
                $LASTEXITCODE=0
                echo Current date and time >> C:\Temp\test.log
                echo %DATE% %TIME% >> C:\Temp\test.log
                cfn-init.exe -s ${AWS::StackId} -r SInstance --region ${AWS::Region}
                New-Item -Path "C:\" -Name userdata -ItemType directory
                cfn-signal.exe -e $LASTEXITCODE --stack ${AWS::StackId} --resource WindowsInstance --region ${AWS::Region}
                </powershell>

    Para los scripts cmd.exe en UserData, utilice las siguientes etiquetas:

    <script></script>

    Ejemplo de script cmd.exe:

    UserData:  Fn::Base64: !Sub |
        <script>
        cfn-init.exe -v -s ${AWS::StackId} -r WindowsInstance --configsets ascending --region ${AWS::Region}
        cfn-signal.exe -e %ERRORLEVEL% --stack ${AWS::StackId} --resource WindowsInstance --region ${AWS::Region}
        </script>
  2. Aumente el tiempo de espera de AWS::CloudFormation::WaitCondition. Para ver un ejemplo de configuración, consulte Ejemplo de arranque de una pila de Windows.
    Nota: Las instancias de Windows suelen tardar más que las instancias de Linux en completar su proceso de arranque inicial.

  3. Si utiliza una imagen de máquina de Amazon (AMI) personalizada, debe usar Sysprep para crear la AMI. Si no usa Sysprep, es posible que aparezca el siguiente error en el registro de datos de usuario de los metadatos: «Failed to get metadata: The result from http://169.254.169.254/latest/user-data was empty. Unable to execute userdata: Userdata was not provided.»

Siga las prácticas recomendadas para los sistemas operativos Windows con CloudFormation

Utilice las siguientes prácticas recomendadas para solucionar los problemas de configuración:

  • Incluya $ErrorActionPreference = "Stop" en la parte superior de los scripts de PowerShell para detectar excepciones.

  • Cuando haga referencia a una ruta de Windows en su plantilla de CloudFormation, añada una barra diagonal (/) al principio de la ruta. Ejemplo:

    "commands" : {  "1-extract" : {
        "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log"
      }
  • Para las pilas de Windows, base64 codifica la URL del identificador WaitCondition. Ejemplo:

    cfn-signal.exe -e %ERRORLEVEL% ", { "Fn::Base64" : { "Ref" : "SharePointFoundationWaitHandle" }}, "\n"
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 5 meses