Bootstrapping-basierte Stacks Windows CloudFormation - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bootstrapping-basierte Stacks Windows CloudFormation

In diesem Thema wird beschrieben, wie Sie einen Windows-Stack booten und Probleme bei der Stackerstellung beheben.

Benutzerdaten in Instanzen EC2

Benutzerdaten sind eine EC2 Amazon-Funktion, mit der Sie Skripts oder Konfigurationsinformationen an eine EC2 Instance übergeben können, wenn diese gestartet wird.

Für Windows EC2 Instances:

  • Sie können entweder Batch-Skripte (mit <script>-Tags) oder PowerShell-Skripte (mit <powershell>-Tags) verwenden.

  • Die Ausführung des Skripts wird von EC2Launchübernommen.

Wichtig

Wenn Sie Ihr eigenes Windows AMI zur Verwendung mit erstellen CloudFormation, stellen Sie sicher, dass EC2Launch v2 ordnungsgemäß konfiguriert ist. EC2Launchv2 ist erforderlich, damit CloudFormation Bootstrapping-Tools Windows Instanzen während der Stack-Erstellung ordnungsgemäß initialisieren und konfigurieren können. Weitere Informationen finden Sie im EC2 Amazon-Benutzerhandbuch unter Verwenden des EC2Launch v2-Agenten zur Ausführung von Aufgaben beim Start von EC2 Windows-Instances.

Informationen dazu AWS Windows AMIs finden Sie in der AWSWindowsAMI-Referenz.

CloudFormation Hilfsskripte

Hilfsskripte sind Dienstprogramme für die Konfiguration von Instances während des Bootstrapping-Prozesses. In Verbindung mit EC2 Amazon-Benutzerdaten bieten sie leistungsstarke Konfigurationsoptionen.

CloudFormation stellt die folgenden Python-Hilfsskripte bereit, mit denen Sie Software installieren und Dienste auf einer EC2 Amazon-Instance starten können, die Sie als Teil Ihres Stacks erstellen:

  • cfn-init- Zum Abrufen und Interpretieren von Ressourcen-Metadaten, Installieren von Paketen, Erstellen von Dateien und Starten von Diensten.

  • cfn-signal- Signalisieren Sie mit,CreationPolicy damit Sie andere Ressourcen im Stack synchronisieren können, wenn die vorausgesetzte Ressource oder Anwendung bereit ist.

  • cfn-get-metadata- Zum Abrufen von Metadaten für eine Ressource oder eines Pfads zu einem bestimmten Schlüssel.

  • cfn-hup- Verwenden Sie diese Option, um nach Aktualisierungen von Metadaten zu suchen und benutzerdefinierte Hooks auszuführen, wenn Änderungen entdeckt werden.

Sie können die Skripts direkt aus Ihrer Vorlage aufrufen. Die Skripts funktionieren in Verbindung mit Ressourcen-Metadaten, die in derselben Vorlage festgelegt werden. Die Skripts werden während der Stack-Erstellung auf der EC2 Amazon-Instance ausgeführt.

Weitere Informationen finden Sie in der Referenz zu CloudFormation Hilfsskripten im CloudFormation Template Reference Guide.

Beispiel für das Bootstrapping eines Windows-Stacks

Schauen wir uns ein Beispiel für eine Windows Server-Vorlage an, die die folgenden Aktionen ausführt:

  • Startet eine EC2 Instance, die TestInstance nach einem AMI Windows Server 2022 benannt ist.

  • Erzeugt eine einfache Testdatei, um zu überprüfen, ob cfn-init funktioniert.

  • Konfiguriert cfn-hup für die laufende Konfigurationsverwaltung.

  • Verwendet ein CreationPolicy, um sicherzustellen, dass die Instance den erfolgreichen Abschluss signalisiert.

Das Hilfsskript cfn-init wird verwendet, um jede dieser Aktionen auf der Grundlage der Informationen in der Ressource AWS::CloudFormation::Init in der Vorlage durchzuführen.

Der Abschnitt AWS::CloudFormation::Init heißt TestInstance und beginnt mit der folgenden Erklärung.

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

Danach wird der Abschnitt files von AWS::CloudFormation::Init deklariert.

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}

Hier werden drei Dateien erstellt und im Verzeichnis C:\cfn auf der Serverinstance abgelegt:

  • test.txt, eine einfache Testdatei, die überprüft, ob cfn-init korrekt funktioniert und Dateien mit dynamischem Inhalt erstellen kann.

  • cfn-hup.conf, die Konfigurationsdatei für cfn-hup mit einem 2-Minuten-Prüfintervall.

  • cfn-auto-reloader.conf, die Konfigurationsdatei für den Hook, der von cfn-hup verwendet wird, um eine Aktualisierung (Aufruf von cfn-init) zu initiieren, wenn sich die Metadaten in AWS::CloudFormation::Init ändern.

Als nächstes folgt der Abschnitt start_services, der die Windows-Dienste konfiguriert.

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

Dieser Abschnitt stellt sicher, dass der Dienst cfn-hup gestartet wird und automatisch neu startet, wenn die Konfigurationsdateien geändert werden. Der Dienst sucht nach Änderungen an den CloudFormation Metadaten und wird erneut ausgeführtcfn-init, wenn Updates erkannt werden.

Als nächstes folgt der Abschnitt 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>

In diesem Abschnitt enthält die Eigenschaft UserData ein PowerShell-Skript, das von EC2Launchausgeführt wird und von <powershell>-Tags umgeben ist. Das Skript wird cfn-init mit dem default configSet ausgeführt und verwendet dann, cfn-signal um den Exit-Code an CloudFormation zurückzumelden. Das CreationPolicy wird verwendet, um sicherzustellen, dass die Instance ordnungsgemäß konfiguriert ist, bevor die Stack-Erstellung als abgeschlossen gilt.

Die Eigenschaft ImageId verwendet einen öffentlichen Parameter des Systems Manager Parameter Store, um automatisch die neueste Windows Server 2022 AMI-ID abzurufen. Dieser Ansatz macht regionalspezifische AMI-Zuordnungen überflüssig und stellt sicher, dass Sie immer das aktuellste AMI erhalten. Die Verwendung von Systems Manager Manager-Parametern für AMI IDs ist eine bewährte Methode zur Pflege aktueller AMI-Referenzen. Wenn Sie eine Verbindung zu Ihrer Instance herstellen möchten, vergewissern Sie sich, dass die Eigenschaft SecurityGroupIds auf eine Sicherheitsgruppe verweist, die den RDP-Zugriff erlaubt.

Das CreationPolicy wird als Teil der Ressourceneigenschaften deklariert und gibt eine Timeout-Periode an. Der Befehl cfn-signal in den Benutzerdaten signalisiert, wenn die Konfiguration der Instance abgeschlossen ist:

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

Da der Bootstrapping-Vorgang minimal ist und nur Dateien erstellt und Dienste gestartet werden, CreationPolicy wartet der 20 Minuten (PT20M), bevor das Timeout eintritt. Die Zeitüberschreitung wird im Format ISO 8601 Dauer angegeben. Beachten Sie, dass Windows-Instances in der Regel länger zum Starten brauchen als Linux-Instances. Testen Sie daher gründlich, um die besten Timeout-Werte für Ihre Bedürfnisse zu ermitteln.

Wenn alles gut geht, wird CreationPolicy erfolgreich abgeschlossen und Sie können auf die Instance Windows Server über ihre öffentliche IP-Adresse zugreifen. Sobald die Stack-Erstellung abgeschlossen ist, werden die Instanz-ID und die öffentliche IP-Adresse auf der Registerkarte Ausgaben der Konsole angezeigt. 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

Sie können auch manuell überprüfen, ob das Bootstrapping korrekt funktioniert hat, indem Sie sich über RDP mit der Instance verbinden und überprüfen, ob die Datei C:\cfn\test.txt existiert und den erwarteten Inhalt enthält. Weitere Informationen zum Herstellen einer Verbindung zu Windows Instances finden Sie unter Verbindung zu Ihrer Windows Instance mithilfe von RDP herstellen im EC2 Amazon-Benutzerhandbuch.

Backslashes in Windows-Dateipfaden entschärfen

Denken Sie beim Verweisen auf Windows Pfade in CloudFormation Vorlagen immer daran, Backslashes (\) entsprechend dem verwendeten Vorlagenformat korrekt zu maskieren.

  • Für JSON-Vorlagen müssen Sie doppelte Backslashes in Windows-Dateipfaden verwenden, da JSON den Backslash als Escape-Zeichen behandelt. Der erste Backslash umgeht den zweiten, was zu der Interpretation eines einzelnen, buchstäblichen Backslashs führt.

    "commands" : { "1-extract" : { "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log" } }
  • Für YAML-Vorlagen sind einfache Backslashes in der Regel ausreichend.

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

Dienste Windows-Verwaltung

Sie verwalten Windows-Dienste auf die gleiche Weise wie Linux-Dienste, nur dass Sie einen windows-Schlüssel anstelle von sysvinitverwenden. Das folgende Beispiel startet den Dienst cfn-hup, setzt ihn auf Automatisch und startet den Dienst neu, wenn cfn-init die Konfigurationsdateien c:\cfn\cfn-hup.conf oder c:\cfn\hooks.d\cfn-auto-reloader.conf ändert.

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

Sie können andere Windows-Dienste auf die gleiche Weise verwalten, indem Sie den Namen und nicht den Anzeigenamen verwenden, um auf den Dienst zu verweisen.

Beheben Sie Probleme bei der Stapelerstellung

Wenn Ihr Stack bei der Erstellung fehlschlägt, wird standardmäßig ein Rollback durchgeführt. Dies ist zwar in der Regel ein gutes Standardverhalten, da unnötige Kosten vermieden werden, es ist aber schwierig zu debuggen, warum bei der Stack-Erstellung ein Fehler auftrat.

Um dieses Verhalten zu deaktivieren, wenn Sie Ihren Stack mit der CloudFormation Konsole erstellen oder aktualisieren, wählen Sie unter Optionen für Stapelfehler die Option Erfolgreich bereitgestellte Ressourcen beibehalten aus. Weitere Informationen finden Sie unter Wählen Sie aus, wie mit Fehlern bei der Bereitstellung von Ressourcen umgegangen werden soll. Damit können Sie sich bei Ihrer Instance anmelden und die Protokolldateien einsehen, um Probleme bei der Ausführung Ihrer Startskripte zu ermitteln.

Wichtige Protokolle, die sich Sie ansehen sollten:

  • Das EC2 Konfigurationsprotokoll unter %ProgramData%\Amazon\EC2Launch\log\agent.log

  • Das cfn-init-Protokoll bei C:\cfn\log\cfn-init.log (überprüfen Sie Exit-Codes und Fehlermeldungen für bestimmte Fehlerpunkte)

Weitere Protokolle finden Sie unter den folgenden Themen im EC2 Amazon-Benutzerhandbuch:

Weitere Informationen zur Behebung von Bootstrapping-Problemen finden Sie unter Wie behebe ich Probleme mit Hilfsskripten, die in einem CloudFormation Stapel mit Instanzen kein Bootstrap durchführen können? Windows .