Bootstrapping von-Windowsbasierten CloudFormation-Stacks - 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 von-Windowsbasierten CloudFormation-Stacks

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

Benutzerdaten in EC2-Instances

Benutzerdaten sind ein Amazon EC2-Feature, mit dem Sie Skripte 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 für die Verwendung mit CloudFormation erstellen, stellen Sie sicher, dass EC2Launch v2 richtig konfiguriert ist. EC2Launch v2 ist erforderlich, damit die Bootstrapping-Tools von CloudFormation die Windows Instances während der Stack-Erstellung richtig initialisieren und konfigurieren können. Weitere Informationen finden Sie unter Verwenden Sie den EC2Launch v2-Agent, um Aufgaben während des Starts der EC2-Windows-Instance auszuführen im Amazon EC2-Benutzerhandbuch.

Informationen über AWS Windows AMIs finden Sie in der AWS Windows AMI Referenz.

CloudFormation-Hilfsskripts

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

CloudFormation stellt die folgenden Python-Hilfsskripte zur Verfügung, die Sie verwenden können, um Software zu installieren und Dienste auf einer Amazon EC2-Instance zu starten, 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 Stapel 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 laufen in der Amazon EC2-Instance während der Stack-Erstellung.

Weitere Informationen finden Sie in der Referenz CloudFormation-Hilfsskripte im CloudFormation Template Reference Guide.

Beispiel für das Bootstrapping eines Windows-Stapels

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

  • Startet eine EC2-Instance mit dem Namen TestInstance von einem Windows Server 2022 AMI.

  • 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 überwacht Änderungen an den CloudFormation-Metadaten und führt cfn-init erneut aus, wenn Aktualisierungen entdeckt 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 führt cfn-init mit dem default configSet aus und verwendet dann cfn-signal, um den Exit-Code an CloudFormation zurück zu melden. 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-Parametern für AMI-IDs ist eine bewährte Methode, um aktuelle AMI-Referenzen zu erhalten. 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-Prozess minimal ist und nur Dateien erstellt und Dienste startet, wartet der CreationPolicy 20 Minuten (PT20M), bevor er die Zeit verlässt. 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 Instance-ID und die öffentliche IP-Adresse auf der Registerkarte Outputs der CloudFormation-Konsole angezeigt.

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 Verbinden mit Windows Instances finden Sie unter Verbinden mit Ihrer Windows Instance über RDP im Amazon EC2-Benutzerhandbuch.

Backslashes in Windows-Dateipfaden entschärfen

Wenn Sie in CloudFormation-Vorlagen auf Windows-Pfade verweisen, denken Sie immer daran, Backslashes (\) entsprechend dem von Ihnen verwendeten Vorlagenformat zu entwerten.

  • 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 die Option Erfolgreich bereitgestellte Ressourcen beibehalten unter Stack-Fehleroptionen. 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 in den folgenden Themen im Amazon EC2 Benutzerhandbuch:

Weitere Informationen zur Fehlerbehebung bei Bootstrapping-Problemen finden Sie unter Wie behebe ich Probleme mit Hilfsskripten, die in einem CloudFormation-Stack mit Windows Instances nicht gebootet werden?.