Bootstrapping für AWS CloudFormation-Windows-Stacks - AWS CloudFormation

Bootstrapping für AWS CloudFormation-Windows-Stacks

In diesem Thema wird das Bootstrapping für einen Windows-Stack sowie die Fehlerbehebung für Probleme bei der Stack-Erstellung beschrieben. Wenn Sie Ihr eigenes Windows-Image zur Verwendung mit CloudFormation erstellen, lesen Sie die Informationen unter Konfigurieren einer Windows-Instance mithilfe von EC2ConfigService im Amazon EC2 Microsoft Windows Guide, um Anweisungen zu erhalten. Sie müssen eine Windows-Instance mit EC2ConfigService einrichten, damit diese mit den AWS CloudFormation-Bootstrapping-Tools funktioniert.

Beispiel für das Bootstrapping eines Windows-Stacks

Zu Illustrationszwecken untersuchen wir eine AWS CloudFormation-Single-Instance-Sharepoint-Server-Vorlage.

Die Vorlage ist vollständig unter der folgenden URL verfügbar:

In diesem Beispiel wird gezeigt, wie Sie:

  • Einen IAM-Benutzer und eine Sicherheitsgruppe für den Zugriff auf die Instance erstellen.

  • Konfigurieren Sie die Initialisierungsdateien: cfn-credentials, cfn-hup.conf und cfn-auto-reloader.conf.

  • Ein Paket wie SharePoint Foundation 2010 herunterladen und auf der Server-Instance installieren.

  • Eine WaitCondition verwenden, um sicherzustellen, dass Ressourcen bereit sind.

  • Eine IP-Adresse für die Instance mit Amazon Elastic IP (EIP) abrufen.

Das AWS CloudFormation-Hilfsskript cfn-init wird zum Ausführen dieser Aktionen basierend auf den Informationen in der AWS::CloudFormation::Init-Ressource in der Vorlage „Windows Single Server Sharepoint Foundation“ verwendet.

Der Abschnitt AWS::CloudFormation::Init hat den Namen "SharePointFoundation" und beginnt mit einer Standarddeklaration:

"SharePointFoundation": { "Type" : "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : {

Danach wird der Abschnitt Dateien von AWS::CloudFormation::Init deklariert:

"files" : { "c:\\cfn\\cfn-hup.conf" : { "content" : { "Fn::Join" : ["", [ "[main]\n", "stack=", { "Ref" : "AWS::StackName" }, "\n", "region=", { "Ref" : "AWS::Region" }, "\n" ]]} }, "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf" : { "content": { "Fn::Join" : ["", [ "[cfn-auto-reloader-hook]\n", "triggers=post.update\n", "path=Resources.SharePointFoundation.Metadata.AWS::CloudFormation::Init\n", "action=cfn-init.exe -v -s ", { "Ref" : "AWS::StackName" }, " -r SharePointFoundation", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]} }, "C:\\SharePoint\\SharePointFoundation2010.exe" : { "source" : "http://d3adzpja92utk0.cloudfront.net/SharePointFoundation.exe" } },

Hier werden drei Dateien erstellt und im Verzeichnis C:\cfn auf der Server-Instance platziert. Es handelt sich um die folgenden Optionen:

  • cfn-hup.conf, die Konfigurationsdatei für "cfn-hup".

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

Es gibt auch eine Datei, die auf den Server heruntergeladen wird: SharePointFoundation.exe. Diese Datei wird zum Installieren von SharePoint auf der Server-Instance verwendet.

Wichtig

Da Pfade auf Windows einen Backslash (\) verwenden, müssen Sie immer daran denken, alle Backslashes ordnungsgemäß mit einem Escape-Zeichen zu versehen, indem Sie einen weiteren Backslash voranstellen, wenn Sie in der AWS CloudFormation-Vorlage auf einen Windows-Pfad verweisen.

Als Nächstes folgt der Abschnitt commands, der cmd.exe-Befehle enthält.

"commands" : { "1-extract" : { "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log" }, "2-prereq" : { "command" : "C:\\SharePoint\\SPF2010\\PrerequisiteInstaller.exe /unattended" }, "3-install" : { "command" : "C:\\SharePoint\\SPF2010\\setup.exe /config C:\\SharePoint\\SPF2010\\Files\\SetupSilent\\config.xml" }

Da Befehle in der Instance verarbeitet in alphabetischer Reihenfolge nach Name verarbeitet werden, wurde jedem Befehl eine Zahl vorangestellt, die die gewünschte Ausführungsreihenfolge angibt. Auf diese Weise kann sichergestellt werden, dass das Installationspaket zuerst extrahiert wird, dass dann alle erforderlichen Komponenten installiert und schließlich die Installation von SharePoint gestartet wird.

Als Nächstes folgt der Abschnitt Properties:

"Properties": { "InstanceType" : { "Ref" : "InstanceType" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "SecurityGroups" : [ {"Ref" : "SharePointFoundationSecurityGroup"} ], "KeyName" : { "Ref" : "KeyPairName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "<script>\n", "cfn-init.exe -v -s ", { "Ref" : "AWS::StackName" }, " -r SharePointFoundation", " --region ", { "Ref" : "AWS::Region" }, "\n", "cfn-signal.exe -e %ERRORLEVEL% ", { "Fn::Base64" : { "Ref" : "SharePointFoundationWaitHandle" }}, "\n", "</script>" ]]}} }

In diesem Abschnitt enthält die UserData-Eigenschaft ein cmd.exe-Skript, das von cfn-init ausgeführt wird, umgeben von <script>-Tags. Sie können an dieser Stelle ein Windows PowerShell-Skript verwenden, anstatt das Skript in <powershell>-Tags einzuschließen. Für Windows-Stacks müssen Sie die Verarbeitungs-URL der Wartebedingung erneut mit base64 kodieren.

An dieser Stelle wird auf SharePointFoundationWaitHandle verwiesen, die Ausführung erfolgt mit cfn-signal. WaitConditionHandle und die verknüpfte WaitCondition werden in der Vorlage als Nächstes deklariert:

"SharePointFoundationWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle" }, "SharePointFoundationWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "SharePointFoundation", "Properties" : { "Handle" : {"Ref" : "SharePointFoundationWaitHandle"}, "Timeout" : "3600" } }

Da die Ausführung aller Schritte und die Installation von SharePoint eine Weile (aber keine ganze Stunde) dauern kann, wartet die WaitCondition eine Stunde (3600 Sekunden), bevor eine Zeitüberschreitung auftritt.

Wenn alles problemlos verläuft, wird eine Elastic IP-Adresse verwendet, um den Zugriff auf die SharePoint-Instance bereitzustellen:

"Outputs" : { "SharePointFoundationURL" : { "Value" : { "Fn::Join" : ["", ["http://", { "Ref" : "SharePointFoundationEIP" } ]] }, "Description" : "SharePoint Team Site URL. Please retrieve Administrator password of the instance and use it to access the URL" }

Sobald die Stack-Erstellung abgeschlossen ist, wird die über die EIP bereitgestellte IP-Adresse auf der Registerkarte Outputs der AWS CloudFormation-Konsole angezeigt. Bevor Sie jedoch auf die Instance zugreifen können, müssen Sie das automatisch generierte, temporäre Administratorkennwort für die Instance abrufen. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit Ihrer Windows-Instance über RDP im Amazon EC2-Benutzerhandbuch für Windows-Instances.

Verwalten von Windows-Services

Windows-Services werden genau wie Linux-Services verwaltet, mit der Ausnahme, dass ein windows-Schlüssel anstelle von sysvinit verwendet wird. Das folgende Beispiel startet den cfn-hup-Service, legt ihn auf automatisch fest und startet den Service neu, wenn cfn-init die angegebenen 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"] } } }

Andere Windows-Services können unter Verwendung des Namens — (nicht des Anzeigenamens —) zum Verweisen auf den Service auf die gleiche Weise verwaltet werden.

Fehlerbehebung bei Problemen bei der Stack-Erstellung

Wenn bei Ihrem Stack während der Erstellung ein Fehler auftritt, lautet das Standardverhalten "Rollback bei Fehler. 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.

Wenn Sie dieses Verhalten deaktivieren möchten, wählen Sie beim Erstellen des Stacks mit der AWS CloudFormation-Konsole auf Show Advanced Options und auf die Auswahl No neben Rollback on failure. Auf diese Weise können Sie sich bei Ihrer Instance anmelden und die Protokolldateien anzeigen, um Probleme beim Ausführen der Startup-Skripts zu ermitteln.

Wichtige Protokolle, die sich Sie ansehen sollten:

  • Das EC2-Konfigurationsprotokoll unter C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt

  • Das cfn-init-Protokoll in C:\cfn\log\cfn-init.log