

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.

# Bereitstellen von Anwendungen auf Amazon EC2
<a name="deploying.applications"></a>

Sie können CloudFormation es verwenden, um Anwendungen auf Amazon EC2 EC2-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-init``cfn-signal`,`cfn-get-metadata`, und`cfn-hup`), die auf `cloud-init` basieren. Sie rufen diese Hilfsskripte aus Ihren CloudFormation Vorlagen auf, um Anwendungen auf Amazon EC2 EC2-Instances zu installieren, zu konfigurieren und zu aktualisieren, die sich in derselben Vorlage befinden. Weitere Informationen finden Sie in der [Referenz zu CloudFormation Hilfsskripten](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-helper-scripts-reference.html) im *CloudFormation Template Reference Guide.*

Im Tutorial [Erste Schritte](gettingstarted.walkthrough.md)haben 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 wartungsfreundlichere Methode zur Konfiguration von EC2-Instances im Vergleich zu 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 von Ihnen erstellten Amazon EC2 EC2-Ressourcen werden Ihnen in Rechnung gestellt. Wenn Sie jedoch noch keine Erfahrung damit haben AWS, können Sie das [kostenlose Kontingent](https://aws.amazon.com/free/) nutzen, um die Kosten während dieses Lernprozesses zu minimieren oder ganz zu vermeiden.

**Topics**
+ [Voraussetzungen](#bootstrapping-tutorial-prerequisites)
+ [Verstehen von Bootstrap-Konzepten](#bootstrapping-tutorial-understand-concepts)
+ [Beginnen Sie mit einem einfachen Bootstrap-Beispiel](#bootstrapping-tutorial-simple-example)
+ [Hinzufügen von Dateien und Befehlen](#bootstrapping-tutorial-add-complexity)
+ [Hinzufügen von Netzwerksicherheit](#bootstrapping-tutorial-security-group)
+ [Die vollständige Bootstrap-Vorlage](#bootstrapping-tutorial-complete-template)
+ [Erstellen Sie den Stapel über die Konsole](#bootstrapping-tutorial-create-stack)
+ [Überwachen Sie den Bootstrap-Prozess](#bootstrapping-tutorial-validate-bootstrap)
+ [Testen Sie den gebootstrapten Webserver](#bootstrapping-tutorial-test-web-server)
+ [Fehlerbehebung bei Bootstrap-Problemen](#bootstrapping-tutorial-troubleshooting)
+ [Bereinigen von Ressourcen](#bootstrapping-tutorial-clean-up)
+ [Nächste Schritte](#bootstrapping-tutorial-next-steps)

## Voraussetzungen
<a name="bootstrapping-tutorial-prerequisites"></a>
+ Sie müssen das [Erstellen Sie Ihren ersten Stapel](gettingstarted.walkthrough.md) 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-Zugriff, der über Berechtigungen zur Verwendung 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](gettingstarted.walkthrough.md)-Tutorial alternative Lösungen.

## Verstehen von Bootstrap-Konzepten
<a name="bootstrapping-tutorial-understand-concepts"></a>

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

### Das `cfn-init`-Hilfsskript
<a name="bootstrapping-tutorial-cfn-init-overview"></a>

CloudFormation stellt Python-Hilfsskripte bereit, mit denen Sie Software installieren und Dienste auf einer Amazon EC2 EC2-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 Abschnitt `Metadata` Ihrer EC2-Ressource.

1. Sie rufen `cfn-init` aus dem Skript `UserData` auf.

1. `cfn-init` liest die Metadaten und wendet die Konfiguration an.

1. Ihre Instance wird nach Ihren Vorgaben konfiguriert.

### Struktur der Metadaten
<a name="bootstrapping-tutorial-metadata-structure"></a>

Die Konfiguration wird in einer bestimmten Struktur innerhalb Ihrer EC2-Instance 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
<a name="bootstrapping-tutorial-simple-example"></a>

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 Abschnitt`packages` installiert das Paket `httpd` mit yum. Dies funktioniert unter Amazon Linux und anderen Linux-Distributionen, die yumverwenden.
+ Der Abschnitt`services` sorgt dafür, dass `httpd` automatisch gestartet und ausgeführt wird.
+ `UserData` installiert die neuesten Bootstrap-Tools und ruft `cfn-init`auf.

## Hinzufügen von Dateien und Befehlen
<a name="bootstrapping-tutorial-add-complexity"></a>

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

### Dateien erstellen
<a name="bootstrapping-tutorial-files-section"></a>

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
<a name="bootstrapping-tutorial-commands-section"></a>

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

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

## Hinzufügen von Netzwerksicherheit
<a name="bootstrapping-tutorial-security-group"></a>

Da wir einen Webserver einrichten, müssen wir den Webverkehr (HTTP) zu unserer EC2-Instance zulassen. Dazu erstellen wir eine Sicherheitsgruppe, die eingehenden Datenverkehr auf Port 80 von Ihrer IP-Adresse zulässt. EC2-Instances müssen auch Datenverkehr ins Internet senden, zum Beispiel um Paketaktualisierungen zu installieren. Standardmäßig erlauben Sicherheitsgruppen den gesamten ausgehenden Datenverkehr. Anschließend verknüpfen wir diese Sicherheitsgruppe mit unserer EC2-Instance über die Eigenschaft `SecurityGroupIds` .

```
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
<a name="bootstrapping-tutorial-complete-template"></a>

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
<a name="bootstrapping-tutorial-create-stack"></a>

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 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) an AWS-Managementkonsole und öffnen Sie die CloudFormation Konsole.

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

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

1. Wählen Sie **Weiter** aus.

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

1. Führen Sie unter **Parameter**folgende Schritte aus.
   + **LatestAmiId**: Behalten Sie den Standardwert bei.
   + **InstanceType**: Wählen Sie entweder **t2.micro oder **t3.micro**** für den EC2-Instance-Typ.
   + **MeineIP**: Geben Sie Ihre öffentliche IP-Adresse mit dem Suffix `/32` ein.

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

## Überwachen Sie den Bootstrap-Prozess
<a name="bootstrapping-tutorial-validate-bootstrap"></a>

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

**So überwachen Sie den Bootstrap-Fortschritt**

1. **Wählen Sie in der CloudFormation Konsole Ihren Stack aus und öffnen Sie den Tab Ereignisse.**

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

1. 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](https://console.aws.amazon.com/ec2/) und suchen Sie Ihre Instance.

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

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

## Testen Sie den gebootstrapten Webserver
<a name="bootstrapping-tutorial-test-web-server"></a>

Wenn Ihr Stack `CREATE_COMPLETE`anzeigt, testen Sie Ihren Webserver.

**So testen Sie den Webserver**

1. Gehen Sie in der CloudFormation Konsole zum Tab **Outputs** für Ihren Stack.

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

1. Sie sollten Ihre benutzerdefinierte Webseite mit der Meldung `Congratulations, you have successfully launched the AWS CloudFormation sample`sehen.

**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_COMPLETE`anzeigt.

## Fehlerbehebung bei Bootstrap-Problemen
<a name="bootstrapping-tutorial-troubleshooting"></a>

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

### Häufige Probleme
<a name="bootstrapping-tutorial-common-issues"></a>
+ **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
<a name="bootstrapping-tutorial-clean-up"></a>

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](https://console.aws.amazon.com/cloudformation/).

1. 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**.

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

1. Ü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
<a name="bootstrapping-tutorial-next-steps"></a>

Herzlichen Glückwunsch\$1 Sie haben erfolgreich gelernt, wie Sie EC2-Instances mit booten. CloudFormation 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](updating.stacks.walkthrough.md).
+ Lernen Sie, wie man einen Windows-Stack bootet. Weitere Informationen finden Sie unter [Bootstrapping-basierte Stacks Windows CloudFormation](cfn-windows-stacks-bootstrapping.md).
+ Erforschen Sie komplexere Bootstrap-Szenarien mit mehreren Konfigurationssätzen. Weitere Informationen finden Sie unter [cfn-init](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-init.html) und [AWS::CloudFormation::Init](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-init.html)im *CloudFormation Template* Reference Guide.
+ Erfahren Sie mehr über `cfn-signal` für die Meldung des Bootstrap-Abschlussstatus. Weitere Informationen finden Sie unter [cfn-signal](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-signal.html) im *CloudFormation Template Reference Guide*.