Come posso risolvere gli script di supporto che non si avviano in uno stack CloudFormation con istanze Windows?

4 minuti di lettura
0

I miei script di supporto non eseguono il bootstrap in uno stack AWS CloudFormation con istanze di Windows.

Breve descrizione

Riavvia l'istanza di Windows. Per gli script di supporto che non vengono eseguiti dopo il riavvio dell'istanza di Windows, completa i passaggi nella sezione Risoluzione dei problemi di avvio.

Se ricevi il seguente errore, potresti avere problemi con cfn-signal: "Received 0 conditions when expecting X or Failed to receive X resource signal(s) within the specified duration." Per risolvere il problema, completa i passaggi nella sezione Risoluzione dei problemi relativi a cfn-signal.

Per entrambi i problemi, completa i passaggi indicati nella sezione Segui le migliori pratiche per l'utilizzo di un sistema operativo Windows con CloudFormation.

Risoluzione

Risoluzione dei problemi relativi al bootstrap

Controlla la sezione comandi del set di configurazione cfn-init per verificare che waitAfterCompletion è impostato su forever. Esempio:

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

Nota: il valore forever indica a cfn-init di uscire e riprendere solo dopo il completamento del riavvio. Per ulteriori informazioni, consulta Comandi.

Dopo aver verificato la configurazione, esamina i seguenti log per individuare eventuali errori:

  • Il log cfn-init: C:\cfn\log\cfn-init.log
  • I log degli eventi di Windows: C:\Windows\System32\winevt\logs
    Nota: l'agente EC2Launch v2 di Amazon Elastic Cloud Compute (Amazon EC2) pubblica i log degli eventi di Windows.
  • (Per le istanze Windows che utilizzano il servizio EC2Config) il log di configurazione: C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt
  • (Per le istanze Windows che utilizzano l'agente EC2Launch v1) il log di avvio: C:\ProgramData\Amazon\EC2-Windows\Launch\Log

Risoluzione dei problemi relativi al segnale cfn

Completa i seguenti passaggi:

  1. Verifica di aver configurato correttamente il segnale cfn.
    Importante: usa -e $lastexitcode negli script di PowerShell e -e %ERRORLEVEL% per gli script Windows cmd.exe.
    Per gli script PowerShell in UserData, utilizza i seguenti tag:

    <powershell></powershell>

    Esempio di script 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>

    Per gli script cmd.exe in UserData, usa i seguenti tag:

    <script></script>

    Esempio di 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. Aumenta il Timeout di AWS::CloudFormation::WaitCondition. Per un esempio di configurazione, vedi Example of bootstrapping a Windows stack.
    Nota: le istanze Windows richiedono in genere più tempo delle istanze Linux per completare il processo di avvio iniziale.

  3. Se utilizzi un'Amazon Machine Image (AMI) personalizzata, devi usare Sysprep per creare l'AMI. Se non utilizzi Sysprep, è possibile che venga visualizzato il seguente errore nel log dei dati utente per i metadati: "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."

Segui le best practice per i sistemi operativi Windows con CloudFormation

Utilizza le seguenti best practice per risolvere i problemi di configurazione:

  • Includi $ErrorActionPreference = "Stop" nella parte superiore degli script di PowerShell per rilevare le eccezioni.

  • Quando fai riferimento a un percorso Windows nel tuo modello CloudFormation, aggiungi una barra (/) all'inizio del percorso. Esempio:

    "commands" : {  "1-extract" : {
        "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log"
      }
  • Per gli stack di Windows, base64 codifica l'URL dell'handle WaitCondition. Esempio:

    cfn-signal.exe -e %ERRORLEVEL% ", { "Fn::Base64" : { "Ref" : "SharePointFoundationWaitHandle" }}, "\n"
AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa