Wie behebe ich Probleme mit Hilfsskripten, die in einem CloudFormation-Stack mit Windows-Instances nicht bootstrappen?

Lesedauer: 3 Minute
0

Meine Hilfsskripte in einem AWS-CloudFormation-Stack mit Microsoft-Windows-Instances bootstrappen nicht.

Kurzbeschreibung

Starten Sie die Windows-Instance neu. Wenn Ihre Hilfsskripte nach dem Neustart der Windows-Instance nicht ausgeführt werden, führen Sie die Schritte im Abschnitt Beheben von Bootstrapping-Problemen aus.

Wenn Sie die folgende Fehlermeldung erhalten, liegen möglicherweise Probleme mit cfn-signal vor: „Received 0 conditions when expecting X or Failed to receive X resource signal(s) within the specified duration.“ Um diesen Fehler zu beheben, führen Sie die Schritte im Abschnitt Beheben von Problemen mit cfn-signal aus.

Führen Sie bei beiden Problemen die Schritte im Abschnitt Befolgen von bewährten Methoden für die Verwendung eines Windows-Betriebssystems mit CloudFormation aus.

Lösung

Beheben von Bootstrapping-Problemen

Vergewissern Sie sich im Bereich commands Ihres cfn-init-Konfigurationssatzes, dass waitAfterCompletion auf forever gesetzt ist. Beispiel:

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

Hinweis: Der Wert forever weist cfn-init an, das Programm zu beenden und erst dann fortzufahren, wenn der Neustart abgeschlossen ist. Weitere Informationen finden Sie unter Commands.

Nachdem Sie Ihre Konfiguration überprüft haben, sehen Sie die folgenden Protokolle auf Fehler durch:

  • Das cfn-init-Protokoll: C:\cfn\log\cfn-init.log
  • Die Windows-Ereignisprotokolle: C:\Windows\System32\winevt\logs
    Hinweis: Der EC2Launch-v2-Agent von Amazon Elastic Cloud Compute (Amazon EC2) veröffentlicht Windows-Ereignisprotokolle.
  • (Für Windows-Instances, die den EC2Config Service verwenden) das Konfigurationsprotokoll: C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt
  • (Für Windows-Instances, die den EC2Launch-v1-Agenten verwenden) das Startprotokoll: C:\ProgramData\Amazon\EC2-Windows\Launch\Log

Beheben von Problemen mit cfn-signal

Führen Sie die folgenden Schritte aus:

  1. Vergewissern Sie sich, dass Sie cfn-signal richtig konfiguriert haben.
    Wichtig: Verwenden Sie -e $lastexitcode in PowerShell-Skripten und -e %ERRORLEVEL% in cmd.exe-Skripten von Windows.
    Verwenden Sie für PowerShell-Skripte in UserData die folgenden Tags:

    <powershell></powershell>

    Beispiel für ein PowerShell-Skript:

    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>

    Verwenden Sie für cmd.exe-Skripts in UserData die folgenden Tags:

    <script></script>

    Beispiel für ein cmd.exe-Skript:

    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. Erhöhen Sie den Timeout der AWS::CloudFormation::WaitCondition. Eine Beispielkonfiguration finden Sie unter Example of bootstrapping a Windows stack.
    Hinweis: Windows-Instances benötigen in der Regel länger als Linux-Instances, um ihren ersten Startvorgang abzuschließen.

  3. Wenn Sie ein benutzerdefiniertes Amazon Machine Image (AMI) nutzen, müssen Sie Sysprep verwenden, um das AMI zu erstellen. Wenn Sie Sysprep nicht verwenden, wird möglicherweise der folgende Fehler im Benutzerdatenprotokoll für Metadaten angezeigt: „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.“

Befolgen von bewährten Methoden für die Verwendung eines Windows-Betriebssystems mit CloudFormation

Verwenden Sie die folgenden bewährten Methoden, um Probleme mit Ihrem Setup zu beheben:

  • Fügen Sie $ErrorActionPreference = "Stop" am Anfang Ihrer PowerShell-Skripte ein, um Ausnahmen abzufangen.

  • Wenn Sie in Ihrer CloudFormation-Vorlage auf einen Windows-Pfad verweisen, fügen Sie am Anfang des Pfads einen Schrägstrich (/) ein. Beispiel:

    "commands" : {  "1-extract" : {
        "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log"
      }
  • Bei Windows-Stacks kodieren Sie die WaitCondition-Handle-URL mit base64. Beispiel:

    cfn-signal.exe -e %ERRORLEVEL% ", { "Fn::Base64" : { "Ref" : "SharePointFoundationWaitHandle" }}, "\n"
AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten