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 Stapelerstellung 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-Skripten (mit <script> Tags) oder PowerShell Skripten (mit <powershell> Tags) verwenden.

  • Die Ausführung des Skripts erfolgt vonEC2Launch.

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 unter Verwenden des EC2Launch v2-Agenten zur Ausführung von Aufgaben beim Start von EC2 Windows-Instances im EC2 Amazon-Benutzerhandbuch.

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

CloudFormation Hilfsskripte

Hilfsskripte sind Hilfsprogramme für die Konfiguration von Instanzen 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— Wird verwendet, um Ressourcenmetadaten abzurufen und zu interpretieren, Pakete zu installieren, Dateien zu erstellen und Dienste zu starten.

  • cfn-signal— Wird verwendet, um mit einem zu signalisierenCreationPolicy, sodass Sie andere Ressourcen im Stack synchronisieren können, wenn die erforderliche Ressource oder Anwendung bereit ist.

  • cfn-get-metadata— Wird verwendet, um Metadaten für eine Ressource oder einen Pfad zu einem bestimmten Schlüssel abzurufen.

  • cfn-hup— Wird verwendet, um nach Aktualisierungen von Metadaten zu suchen und benutzerdefinierte Hooks auszuführen, wenn Änderungen erkannt 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 AWS CloudFormation Template Reference Guide.

Beispiel für das Bootstrapping eines Stacks Windows

Schauen wir uns Beispielausschnitte aus einer Windows Server Vorlage an, die die folgenden Aktionen ausführt:

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

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

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

  • Verwendet aCreationPolicy, um sicherzustellen, dass die Instanz den erfolgreichen Abschluss signalisiert.

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

Der AWS::CloudFormation::Init Abschnitt ist benannt TestInstance und beginnt mit der folgenden Deklaration.

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

Danach wird der files Abschnitt 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}

Drei Dateien werden hier erstellt und im C:\cfn Verzeichnis auf der Serverinstanz abgelegt:

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

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

  • cfn-auto-reloader.conf, die Konfigurationsdatei für den Hook, der von verwendet wirdcfn-hup, um ein Update (Aufrufcfn-init) zu initiieren, wenn sich die Metadaten AWS::CloudFormation::Init ändern.

Als Nächstes folgt der start_services Abschnitt, in dem Windows Dienste konfiguriert werden.

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 cfn-hup Dienst gestartet wird und automatisch neu gestartet wird, 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 Properties Abschnitt.

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 UserData Eigenschaft ein PowerShell Skript, das von <powershell> Tags umgeben EC2Launch ausgeführt wird. 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 Instanz ordnungsgemäß konfiguriert ist, bevor die Stack-Erstellung als abgeschlossen betrachtet wird.

Die ImageId Eigenschaft verwendet einen öffentlichen Parameter von Systems Manager Parameter Store, um automatisch die neueste AMI-ID Windows Server 2022 abzurufen. Dieser Ansatz macht regionsspezifische AMI-Zuordnungen überflüssig und stellt sicher, dass Sie immer das neueste 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, stellen Sie sicher, dass die SecurityGroupIds Eigenschaft auf eine Sicherheitsgruppe verweist, die den RDP-Zugriff ermöglicht.

Die CreationPolicy wird als Teil der Ressourceneigenschaften deklariert und gibt einen Timeout-Zeitraum an. Der cfn-signal Befehl in den Benutzerdaten signalisiert, wenn die Instanzkonfiguration 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 Server 20 Minuten (PT20M), bevor es zu einem Timeout kommt. Das Timeout wird im ISO 8601-Dauerformat angegeben. Beachten Sie, dass der Start von Windows Instances in der Regel länger dauert als der von Linux-Instances. Testen Sie daher gründlich, um die für Ihre Anforderungen am besten geeigneten Timeout-Werte zu ermitteln.

Wenn alles gut geht, wird die Instance erfolgreich CreationPolicy abgeschlossen und Sie können über ihre öffentliche IP-Adresse auf die Windows Server Instance zugreifen. Sobald die Stack-Erstellung abgeschlossen ist, werden die Instanz-ID und die öffentliche IP-Adresse auf der Registerkarte Ausgaben 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 ordnungsgemäß funktioniert hat, indem Sie über RDP eine Verbindung zur Instance herstellen und überprüfen, ob die Datei C:\cfn\test.txt vorhanden ist 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.

Umgekehrte Schrägstriche in Dateipfaden umgehen Windows

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

  • Bei JSON-Vorlagen müssen Sie doppelte Backslashes in Windows Dateipfaden verwenden, da JSON Backslash als Escape-Zeichen behandelt. Der erste Backslash maskiert den zweiten, was zur Interpretation eines einzelnen, wörtlichen 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 einzelne 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 verwalten Windows

Sie verwalten Windows Dienste auf die gleiche Weise wie Linux-Dienste, außer dass Sie stattdessen einen windows Schlüssel verwendensysvinit. Im folgenden Beispiel wird der cfn-hup Dienst gestartet, auf Automatisch gesetzt und der Dienst neu gestartet, wenn die cfn-init c:\cfn\hooks.d\cfn-auto-reloader.conf Konfigurationsdateien c:\cfn\cfn-hup.conf oder geändert werden.

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 Stack-Erstellung

Wenn Ihr Stack bei der Erstellung fehlschlägt, besteht das Standardverhalten darin, bei einem Fehler ein Rollback durchzuführen. 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 Ausfällen bei der Bereitstellung von Ressourcen umgegangen werden soll. Auf diese Weise können Sie sich bei Ihrer Instance anmelden und die Protokolldateien einsehen, um Probleme zu ermitteln, die bei der Ausführung Ihrer Startskripts aufgetreten sind.

Wichtige Protokolle, die sich Sie ansehen sollten:

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

  • Das cfn-init Protokoll unter C:\cfn\log\cfn-init.log (überprüfen Sie die 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 .