Anwendungen auf Amazon bereitstellen EC2 - 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.

Anwendungen auf Amazon bereitstellen EC2

Sie können CloudFormation es verwenden, um Anwendungen auf EC2 Amazon-Instances automatisch zu installieren, zu konfigurieren und zu starten. Auf diese Weise können Sie auf einfache Weise Bereitstellungen übermitteln und vorhandene Installationen aktualisieren, ohne eine direkte Verbindung mit der Instance herzustellen, was Ihnen viel Zeit und Aufwand sparen kann.

CloudFormation enthält eine Reihe von Hilfsskripten (cfn-initcfn-signal,cfn-get-metadata, undcfn-hup), die auf basierencloud-init. Sie rufen diese Hilfsskripte aus Ihren CloudFormation Vorlagen auf, um Anwendungen auf EC2 Amazon-Instances zu installieren, zu konfigurieren und zu aktualisieren, die sich in derselben Vorlage befinden. Weitere Informationen finden Sie in der Referenz zu CloudFormation Hilfsskripten im CloudFormation Template Reference Guide.

Im Tutorial Erste Schrittehaben Sie einen einfachen Webserver mit UserData und einem einfachen Bash-Skript erstellt. Während dies für eine einfache "Hello World"-Seite funktionierte, benötigen reale Anwendungen oft eine komplexere Konfiguration, einschließlich:

  • Mehrere Softwarepakete in der richtigen Reihenfolge installiert.

  • Komplexe Konfigurationsdateien, die mit bestimmten Inhalten erstellt werden.

  • Dienste gestartet und für die automatische Ausführung konfiguriert.

  • Fehlerbehandlung und Validierung des Einrichtungsprozesses.

CloudFormationDie Hilfsskripte bieten eine robustere und wartbarere Methode zur Konfiguration von EC2 Instanzen im Vergleich zu den grundlegenden Bash-Skripten in. UserData Das Hilfsskript cfn-init liest Konfigurationsdaten aus den Metadaten Ihrer Vorlage und wendet sie systematisch auf Ihre Instance an.

In diesem Lernprogramm lernen Sie, wie Sie das Hilfsskript cfn-init verwenden und den Bootstrapping-Prozess überwachen.

Anmerkung

CloudFormation ist kostenlos, aber die EC2 Amazon-Ressourcen, die Sie erstellen, werden Ihnen in Rechnung gestellt. Wenn Sie jedoch noch keine Erfahrung damit haben AWS, können Sie das kostenlose Kontingent nutzen, um die Kosten während dieses Lernprozesses zu minimieren oder ganz zu vermeiden.

Voraussetzungen

  • Sie müssen das Erstellen Sie Ihren ersten Stapel Tutorial abgeschlossen haben oder über gleichwertige Erfahrung mit den CloudFormation Grundlagen verfügen.

  • Sie benötigen Zugriff auf einen Benutzer oder eine Rolle AWS-Konto mit einem IAM-Status, der über Berechtigungen zur Nutzung von Amazon EC2 verfügt CloudFormation, und/oder Administratorzugriff.

  • Sie benötigen eine Virtual Private Cloud (VPC) mit Zugriff auf das Internet. Diese Übungsvorlage erfordert eine Standard-VPC, die automatisch mit newer AWS-Konten geliefert wird. Wenn Sie keine Standard-VPC haben oder diese gelöscht wurde, finden Sie im Abschnitt zur Fehlerbehebung im Erstellen Sie Ihren ersten Stapel-Tutorial alternative Lösungen.

Verstehen von Bootstrap-Konzepten

Bevor wir die Vorlage erstellen, sollten wir die wichtigsten Konzepte verstehen, die das Bootstrapping möglich machen.

Das cfn-init-Hilfsskript

CloudFormation stellt Python-Hilfsskripte bereit, mit denen Sie Software installieren und Dienste auf einer EC2 Amazon-Instance starten können. Das Skript cfn-init liest die Ressourcen-Metadaten aus Ihrer Vorlage und wendet die Konfiguration auf Ihre Instance an.

Das Verfahren funktioniert folgendermaßen:

  1. Sie definieren die Konfiguration im Metadata Abschnitt Ihrer EC2 Ressource.

  2. Sie rufen cfn-init aus dem Skript UserData auf.

  3. cfn-init liest die Metadaten und wendet die Konfiguration an.

  4. Ihre Instance wird nach Ihren Vorgaben konfiguriert.

Struktur der Metadaten

Die Konfiguration ist in einer bestimmten Struktur innerhalb Ihrer EC2 Instanz definiert.

Resources: EC2Instance: Type: AWS::EC2::Instance Metadata: # Metadata section for the resource AWS::CloudFormation::Init: # Required key that cfn-init looks for config: # Configuration name (you can have multiple) packages: # Install packages files: # Create files commands: # Run commands services: # Start/stop services

Das Skript cfn-init verarbeitet diese Abschnitte in einer bestimmten Reihenfolge: Pakete, Gruppen, Benutzer, Quellen, Dateien, Befehle und dann Dienste.

Beginnen Sie mit einem einfachen Bootstrap-Beispiel

Beginnen wir mit einem minimalen Bootstrap-Beispiel, das lediglich Apache installiert und startet.

Resources: EC2Instance: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: packages: # Install Apache web server yum: httpd: [] services: # Start Apache and enable it to start on boot systemd: httpd: enabled: true ensureRunning: true Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType UserData: !Base64 # Script that runs when instance starts Fn::Sub: | #!/bin/bash yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource EC2Instance --region ${AWS::Region}

Dieses einfache Beispiel veranschaulicht die wichtigsten Konzepte:

  • Der Abschnittpackages installiert das Paket httpd mit yum. Dies funktioniert unter Amazon Linux und anderen Linux-Distributionen, die yumverwenden.

  • Der Abschnittservices sorgt dafür, dass httpd automatisch gestartet und ausgeführt wird.

  • UserData installiert die neuesten Bootstrap-Tools und ruft cfn-initauf.

Hinzufügen von Dateien und Befehlen

Lassen Sie uns nun unser Beispiel erweitern, indem wir eine benutzerdefinierte Webseite und eine Protokolldatei im /var/log Verzeichnis auf der EC2 Instanz hinzufügen.

Dateien erstellen

Der Abschnitt files ermöglicht es Ihnen, Dateien mit bestimmten Inhalten auf der Instance zu erstellen. Die vertikale Pipe (|) ermöglicht es Ihnen, einen wörtlichen Textblock (HTML-Code) als Inhalt der Datei zu übergeben (/var/www/html/index.html).

files: /var/www/html/index.html: content: | <body> <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> </body>

Ausführen von Befehlen

Im Abschnitt commands können Sie während des Bootstrap-Prozesses Shell-Befehle ausführen. Dieser Befehl erstellt eine Protokolldatei /var/log/welcome.txt auf der EC2 Instanz. Um es anzuzeigen, benötigen Sie ein EC2 Amazon-Schlüsselpaar, das Sie für den SSH-Zugriff verwenden können, und einen IP-Adressbereich, der für die SSH-Verbindung mit der Instance verwendet werden kann (hier nicht behandelt).

commands: createWelcomeLog: command: "echo 'cfn-init ran successfully!' > /var/log/welcome.txt"

Hinzufügen von Netzwerksicherheit

Da wir einen Webserver einrichten, müssen wir zulassen, dass Web-Traffic (HTTP) unsere EC2 Instance erreicht. Zu diesem Zweck erstellen wir eine Sicherheitsgruppe, die eingehenden Datenverkehr über Port 80 von Ihrer IP-Adresse aus zulässt. EC2 Instanzen müssen außerdem Datenverkehr ins Internet senden, um beispielsweise Paket-Updates zu installieren. Standardmäßig erlauben Sicherheitsgruppen den gesamten ausgehenden Datenverkehr. Anschließend verknüpfen wir diese Sicherheitsgruppe mithilfe der SecurityGroupIds Eigenschaft mit unserer EC2 Instance.

WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access from my IP address SecurityGroupIngress: - IpProtocol: tcp Description: HTTP FromPort: 80 ToPort: 80 CidrIp: !Ref MyIP

Die vollständige Bootstrap-Vorlage

Lassen Sie uns nun alle Teile zusammenfügen. Hier ist die vollständige Vorlage, die alle besprochenen Konzepte kombiniert.

AWSTemplateFormatVersion: 2010-09-09 Description: Bootstrap an EC2 instance with Apache web server using cfn-init Parameters: LatestAmiId: Description: The latest Amazon Linux 2 AMI from the Parameter Store Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' InstanceType: Description: EC2 instance type Type: String Default: t2.micro AllowedValues: - t3.micro - t2.micro ConstraintDescription: must be a valid EC2 instance type. MyIP: Description: Your IP address in CIDR format (e.g. 203.0.113.1/32) Type: String MinLength: 9 MaxLength: 18 Default: 0.0.0.0/0 AllowedPattern: '^(\d{1,3}\.){3}\d{1,3}\/\d{1,2}$' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x. Resources: WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access from my IP address SecurityGroupIngress: - IpProtocol: tcp Description: HTTP FromPort: 80 ToPort: 80 CidrIp: !Ref MyIP WebServer: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: packages: yum: httpd: [] files: /var/www/html/index.html: content: | <body> <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> </body> commands: createWelcomeLog: command: "echo 'cfn-init ran successfully!' > /var/log/welcome.txt" services: systemd: httpd: enabled: true ensureRunning: true Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType SecurityGroupIds: - !Ref WebServerSecurityGroup UserData: !Base64 Fn::Sub: | #!/bin/bash yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource WebServer --region ${AWS::Region} Tags: - Key: Name Value: Bootstrap Tutorial Web Server Outputs: WebsiteURL: Value: !Sub 'http://${WebServer.PublicDnsName}' Description: EC2 instance public DNS name

Erstellen Sie den Stapel über die Konsole

Das folgende Verfahren beinhaltet das Hochladen der Beispiel-Stack-Vorlage aus einer Datei. Öffnen Sie einen Texteditor auf Ihrem lokalen Rechner und fügen Sie die Vorlage hinzu. Speichern Sie die Datei mit dem Namen samplelinux2stack.template.

So starten Sie die Stack-Vorlage
  1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

  2. Klicken Sie auf Create stack (Stack erstellen), With new resources (standard) (Mit neuen Ressourcen (Standard)).

  3. Wählen Sie unter Vorlage angeben, Vorlagendatei hochladen, Datei auswählen um die samplelinux2stack.template Datei hochzuladen.

  4. Wählen Sie Weiter aus.

  5. Geben Sie auf der Seite Stack-Details angeben den Stack-Namen BootstrapTutorialStack ein.

  6. Führen Sie unter Parameterfolgende Schritte aus.

    • LatestAmiId: Behalten Sie den Standardwert bei.

    • InstanceType: Wählen Sie entweder t2.micro oder t3.micro als Instance-Typ. EC2

    • MeineIP: Geben Sie Ihre öffentliche IP-Adresse mit dem Suffix /32 ein.

  7. Wählen Sie zweimal Weiter und dann Senden um den Stapel zu erstellen.

Überwachen Sie den Bootstrap-Prozess

Bootstrap-Prozesse dauern länger als einfache EC2 Starts, da zusätzliche Software installiert und konfiguriert wird.

So überwachen Sie den Bootstrap-Fortschritt
  1. Wählen Sie in der CloudFormation Konsole Ihren Stack aus und öffnen Sie den Tab Ereignisse.

  2. Achten Sie auf das Ereignis WebServer CREATE_IN_PROGRESS . Der Bootstrap-Prozess beginnt, nachdem die Instance gestartet wurde.

  3. Der Bootstrap-Prozess dauert in der Regel nur wenige Minuten. Sie werden WebServer CREATE_COMPLETE sehen, wenn es fertig ist.

Wenn Sie sehen möchten, was während des Bootstrap-Prozesses passiert, können Sie die Instanceprotokolle überprüfen.

So zeigen Sie Bootstrap-Protokolle an (optional)
  1. Öffnen Sie die EC2 Konsole und suchen Sie nach Ihrer Instanz.

  2. Wählen Sie die Instance aus und wählen Sie dann Aktionen, Überwachen und Fehlerbehebung, Systemprotokoll abrufen um den Bootstrap-Fortschritt zu sehen.

  3. Wenn Sie die Protokolle nicht sofort sehen, warten Sie und aktualisieren Sie die Seite.

Testen Sie den gebootstrapten Webserver

Wenn Ihr Stack CREATE_COMPLETEanzeigt, testen Sie Ihren Webserver.

So testen Sie den Webserver
  1. Gehen Sie in der CloudFormation Konsole zum Tab Outputs für Ihren Stack.

  2. Klicken Sie auf den Wert WebsiteURL um Ihren Webserver in einer neuen Registerkarte zu öffnen.

  3. Sie sollten Ihre benutzerdefinierte Webseite mit der Meldung Congratulations, you have successfully launched the AWS CloudFormation samplesehen.

Anmerkung

Wenn die Seite nicht sofort geladen wird, warten Sie eine Minute und versuchen Sie es erneut. Der Bootstrap-Prozess wird möglicherweise noch abgeschlossen, auch wenn der Stack CREATE_COMPLETEanzeigt.

Fehlerbehebung bei Bootstrap-Problemen

Wenn Ihr Bootstrap-Prozess fehlschlägt oder Ihr Webserver nicht funktioniert, finden Sie hier die häufigsten Probleme und Lösungen.

Häufige Probleme

  • Stackerstellung fehlgeschlagen- Überprüfen Sie die Registerkarte Ereignisse auf spezifische Fehlermeldungen.

  • Webserver nicht erreichbar- Überprüfen Sie, ob Ihre IP-Adresse im Parameter MyIP korrekt ist. Denken Sie daran, am Ende /32 einzufügen.

  • Bootstrap-Prozess schlägt fehl- Die Instance kann starten, aber cfn-init schlägt fehl. Überprüfen Sie die Systemprotokolle wie im Abschnitt Überwachung beschrieben.

Bereinigen von Ressourcen

Um laufende Kosten zu vermeiden, können Sie den Stapel und seine Ressourcen löschen.

Löschen des Stacks und der entsprechenden Ressourcen
  1. Öffnen Sie die CloudFormation-Konsole.

  2. Wählen Sie auf der Seite Stapel die Option neben dem Namen des von Ihnen erstellten Stapels (BootstrapTutorialStack) und wählen Sie dann Löschen.

  3. Wenn Sie zur Bestätigung aufgefordert werden, wählen Sie Delete (Löschen).

  4. Überwachen Sie den Fortschritt des Stapel-Löschvorgangs auf der Registerkarte Ereignis . Der Status für BootstrapTutorialStack wechselt zu DELETE_IN_PROGRESS. Wenn das Löschen des Stacks CloudFormation abgeschlossen ist, wird der Stapel aus der Liste entfernt.

Nächste Schritte

Herzlichen Glückwunsch! Sie haben erfolgreich gelernt, EC2 Instances mit CloudFormation zu booten. Sie verstehen jetzt:

  • So verwenden Sie cfn-init-Hilfsskripte

  • So strukturieren Sie Metadaten für das Bootstrapping

  • Wie Sie Pakete installieren, Dateien erstellen, Befehle ausführen und Dienste verwalten

  • Wie Sie Bootstrap-Probleme überwachen

Um weiter zu lernen:

  • Erfahren Sie, wie Sie einen laufenden Stack aktualisieren und das cfn-hup Hilfsskript verwenden. Weitere Informationen finden Sie unter Einen CloudFormation Stack aktualisieren.

  • Lernen Sie, wie man einen Windows-Stack bootet. Weitere Informationen finden Sie unter Bootstrapping-basierte Stacks Windows CloudFormation .

  • Erforschen Sie komplexere Bootstrap-Szenarien mit mehreren Konfigurationssätzen. Weitere Informationen finden Sie unter cfn-init und AWS::CloudFormation::Initim CloudFormation Template Reference Guide.

  • Erfahren Sie mehr über cfn-signal für die Meldung des Bootstrap-Abschlussstatus. Weitere Informationen finden Sie unter cfn-signal im CloudFormation Template Reference Guide.