

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.

# Schritt 2.5: Bereitstellen einer App
<a name="gettingstarted-windows-deploy"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Service hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für Neu- als auch für Bestandskunden deaktiviert. Wir empfehlen Kunden dringend, ihre Workloads so bald wie möglich auf andere Lösungen zu migrieren. Wenn Sie Fragen zur Migration haben, wenden Sie sich an das AWS Support Team auf [AWS re:POST](https://repost.aws/) oder über den [AWS Premium-Support](https://aws.amazon.com/support).

Bei der IIS-Installation wird ein Verzeichnis `C:\inetpub\wwwroot` für den Anwendungscode und die zugehörigen Dateien erstellt. Als nächstes installieren Sie eine App in diesem Verzeichnis. Für dieses Beispiel werden Sie eine statische HTML-Homepage, `default.html`, in `C:\inetpub\wwwroot` installieren. Dieser allgemeine Ansatz lässt sich einfach auf komplexere Szenarios wie ASP.NET-Anwendungen erweitern.

Sie können die Anwendungsdateien in Ihr Rezeptbuch aufnehmen und sie über `install.rb` in `C:\inetpub\wwwroot` kopieren. Beispiele für diese Vorgehensweise finden Sie unter [Beispiel 6: Erstellen von Dateien](cookbooks-101-basics-files.md). Dieser Ansatz ist allerdings nicht sonderlich flexibel oder effizient. Es empfiehlt sich daher in der Regel, die Bereitstellung von Rezeptbüchern und Anwendungen zu trennen.

Die bevorzugte Lösung besteht darin, ein separates Bereitstellungsrezept zu implementieren, das den Code der Anwendung und die zugehörigen Dateien aus einem Repository — einem beliebigen Repository, nicht nur dem Cookbook-Repository — abruft und es auf jeder IIS-Serverinstanz installiert. So wird die Bereitstellung von Rezeptbüchern und Anwendungen sauber getrennt, sodass Sie beim Aktualisieren von Anwendungen das Bereitstellungsrezept erneut ausführen können, ohne das Rezeptbuch aktualisieren zu müssen.

In diesem Thema wird gezeigt, wie Sie ein einfaches Bereitstellungsrezept implementieren, über das `default.htm` auf Ihrem IIS-Server bereitgestellt wird. Sie können diese Beispiel einfach auf komplexere Anwendungen übertragen.

**Topics**
+ [Erstellen der Anwendung und Speichern in einem Repository](#w2ab1c14c47c17c23c25c15)
+ [Implementieren eines Rezepts für die Bereitstellung der Anwendung](#w2ab1c14c47c17c23c25c17)
+ [Aktualisieren der Rezeptbücher der Instance](#w2ab1c14c47c17c23c25c19)
+ [Hinzufügen des Rezepts zum benutzerdefinierten IIS-Layer](#w2ab1c14c47c17c23c25c21)
+ [Hinzufügen einer Anwendung](#w2ab1c14c47c17c23c25c23)
+ [Bereitstellen der App und Öffnen der Anwendung](#w2ab1c14c47c17c23c25c25)

## Erstellen der Anwendung und Speichern in einem Repository
<a name="w2ab1c14c47c17c23c25c15"></a>

Sie können für Ihre Anwendungen ein beliebiges Repository verwenden. Der Einfachheit halber wird `default.htm` in diesem Beispiel in einem öffentlichen S3-Bucket gespeichert.

**So erstellen Sie die Anwendung**

1. Erstellen Sie ein Verzeichnis namens `iis-application` in einem lokalen Verzeichnis auf Ihrem Computer.

1. Fügen Sie eine Datei `default.htm` zu `iis-application` mit dem folgenden Inhalt hinzu:

   ```
   <!DOCTYPE html>
   <html>
     <head>
       <title>IIS Example</title>
     </head>
     <body>
       <h1>Hello World!</h1>
     </body>
   </html>
   ```

1. [Erstellen Sie einen S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html), [laden Sie `default.htm` auf den Bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/PuttingAnObjectInABucket.html) hoch und notieren Sie sich die URL. Machen Sie die Datei der Einfachheit halber [öffentlich](https://docs.aws.amazon.com/AmazonS3/latest/gsg/OpeningAnObject.html). 
**Anmerkung**  
Dies ist eine äußerst einfache Anwendung, die Grundprinzipien lassen sich jedoch einfach auf Anwendungen für die Produktion ausweiten.  
Bei komplexeren Anwendungen mit mehreren Dateien ist es in der Regel einfacher, ein ZIP-Archiv von `iis-application` zu erstellen und dieses auf Ihren S3-Bucket hochzuladen.  
Diese ZIP-Datei können Sie dann herunterladen und den Inhalt in das entsprechende Verzeichnis extrahieren. So müssen Sie weder mehrere Dateien herunterladen noch eine Verzeichnisstruktur nachbilden.
Bei Produktionsanwendungen sollten Sie Ihre Dateien privat halten. Ein Beispiel, wie Sie mit einem Rezept Dateien aus einem privaten S3-Bucket herunterladen, finden Sie unter [Verwenden des SDK for Ruby auf einer OpsWorks Stacks-Windows-Instanz](cookbooks-101-opsworks-s3-windows.md).
Sie können Anwendungen in jedem geeigneten Repository speichern.  
Anwendungen werden üblicherweise über die öffentliche API eines Repositorys heruntergeladen. In diesem Beispiel wird die Amazon S3 S3-API verwendet. Wenn Sie Ihre Anwendung beispielsweise auf speichern GitHub, können Sie die [GitHub API](https://developer.github.com/guides/getting-started/) verwenden.

## Implementieren eines Rezepts für die Bereitstellung der Anwendung
<a name="w2ab1c14c47c17c23c25c17"></a>

Fügen Sie ein Rezept namens `deploy.rb` dem Verzeichnis `iis-cookbook` `recipes` hinzu, mit folgendem Inhalt.

```
chef_gem "aws-sdk-s3" do
  compile_time false
  action :install
end

ruby_block "download-object" do
  block do
    require 'aws-sdk-s3'

    #1  
    # Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt'
    Aws.use_bundled_cert!

    #2  
    query = Chef::Search::Query.new
    app = query.search(:aws_opsworks_app, "type:other").first
    s3region = app[0][:environment][:S3REGION]
    s3bucket = app[0][:environment][:BUCKET]
    s3filename = app[0][:environment][:FILENAME]

    #3  
    s3_client = Aws::S3::Client.new(region: s3region)
    s3_client.get_object(bucket: s3bucket,
                         key: s3filename,
                         response_target: 'C:\inetpub\wwwroot\default.htm')
  end 
  action :run
end
```

In diesem Beispiel wird [SDK for Ruby v2](https://docs.aws.amazon.com/sdkforruby/api/index.html) verwendet, um die Datei herunterzuladen. OpsWorks Stacks installiert dieses SDK jedoch nicht auf Windows-Instanzen, sodass das Rezept mit der [https://docs.chef.io/chef/resources.html#chef-gem](https://docs.chef.io/chef/resources.html#chef-gem)Ressource beginnt, die diese Aufgabe erledigt.

**Anmerkung**  
Die Ressource `chef_gem` installiert Gems in der Chef-eigenen Ruby-Version. Dies ist die Version, die in Rezepten verwendet wird. Wenn Sie ein Gem für eine systemweite Ruby-Version installieren möchten, verwenden Sie die Ressource [gem\$1package](https://docs.chef.io/chef/resources.html#gem-package).

Der Großteil des Rezepts ist eine [https://docs.chef.io/chef/resources.html#ruby-block](https://docs.chef.io/chef/resources.html#ruby-block)Ressource, die einen Block von Ruby-Code ausführt, der das SDK for Ruby zum Herunterladen verwendet`default.htm`. Der Code im `ruby_block` lässt sich in folgende Bereiche unterteilen, die den durchnummerierten Kommentaren im Codebeispiel entsprechen. 

**1: Angeben eines Zertifikat-Bundles**  
Amazon S3 verwendet SSL, sodass Sie ein entsprechendes Zertifikat benötigen, um Objekte aus einem S3-Bucket herunterzuladen. Das SDK for Ruby v2 enthält kein Zertifikatspaket, daher müssen Sie eines bereitstellen und das SDK for Ruby konfigurieren, um es verwenden zu können. OpsWorks Stacks installiert ein Zertifikatspaket nicht direkt, aber es installiert Git, das ein Zertifikatspaket (`curl-ca-bundle.crt`) enthält. Der Einfachheit halber konfiguriert dieses Beispiel das SDK for Ruby so, dass es das Git-Zertifikatspaket für SSL verwendet. Sie können auch eigene Bundles installieren und das SDK entsprechend konfigurieren.

**2: Abrufen der Repository-Daten**  
Um ein Objekt von Amazon S3 herunterzuladen, benötigen Sie die AWS-Region, den Bucket-Namen und den Schlüsselnamen. Wie nachfolgend beschrieben werden in diesem Beispiel diese Informationen bereitgestellt, indem eine Reihe von Umgebungsvariablen der Anwendung zugeordnet werden. Wenn Sie eine App bereitstellen, fügt OpsWorks Stacks dem Knotenobjekt der Instance eine Reihe von Attributen hinzu. Diese Attribute bestehen aus einer Hash-Tabelle, die die Anwendungskonfiguration einschließlich der Umgebungsvariablen enthält. Die Anwendungsattribute für diese Anwendung im JSON-Format sehen etwa wie folgt aus.   

```
{
  "app_id": "8f71a9b5-de7f-451c-8505-3f35086e5bb3",
  "app_source": {
      "password": null,
      "revision": null,
      "ssh_key": null,
      "type": "other",
      "url": null,
      "user": null
  },
  "attributes": {
      "auto_bundle_on_deploy": true,
      "aws_flow_ruby_settings": {},
      "document_root": null,
      "rails_env": null
  },
  "data_sources": [{"type": "None"}],
  "domains": ["iis_example_app"],
  "enable_ssl": false,
  "environment": {
      "S3REGION": "us-west-2",
      "BUCKET": "windows-example-app",
      "FILENAME": "default.htm"
  },
  "name": "IIS-Example-App",
  "shortname": "iis_example_app",
  "ssl_configuration": {
      "certificate": null,
      "private_key": null,
      "chain": null
  },
  "type": "other",
  "deploy": true
}
```
Die Umgebungsvariablen der Anwendung werden im Attribut `[:environment]` gespeichert. Um diese abzurufen, verwenden Sie eine Chef-Suchanfrage, mit der Sie die Hash-Tabelle der Anwendung abrufen, die im Knoten `aws_opsworks_app` gespeichert ist. Diese Anwendung hat den Typ `other`, die Anfrage sucht also nach Anwendungen dieses Typs. Das Rezept nutzt die Tatsache, dass sich auf dieser Instance nur eine Anwendung befindet. Die gewünschte Hash-Tabelle ist also einfach `app[0]`. Der Einfachheit halber weist das Rezept dann die Region-, Bucket- und Dateinamen Variablen zu.  
Weitere Informationen zur Verwendung der Chef-Suche finden Sie unter [Abrufen von Attributwerten mit der Chef-Suche](cookbooks-101-opsworks-opsworks-stack-config-search.md).

**3: Herunterladen der Datei**  
Im dritten Teil des Rezepts wird ein [S3-Client-Objekt](https://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html) erstellt und mit der Methode `[get\$1object](https://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#get_object-instance_method)` die Datei `default.htm` in das Verzeichnis `C:\inetpub\wwwroot` der Instance heruntergeladen. 

**Anmerkung**  
Ein Rezept ist eine Ruby-Anwendung, der Ruby-Code muss sich also nicht unbedingt in einem `ruby_block` befinden. Der Code im Text des Rezepts wird jedoch zuerst ausgeführt. Danach werden die Ressourcen der Reihe nach abgearbeitet. Wenn Sie in diesem Beispiel den Download-Code in den Rezepttext einfügen, schlägt dies fehl, da die `chef_gem` Ressource das SDK for Ruby noch nicht installiert hätte. Der Code in der `ruby_block` Ressource wird ausgeführt, wenn die Ressource ausgeführt wird, nachdem die `chef_gem` Ressource das SDK for Ruby installiert hat.

## Aktualisieren der Rezeptbücher der Instance
<a name="w2ab1c14c47c17c23c25c19"></a>

OpsWorks Stacks installiert automatisch benutzerdefinierte Kochbücher auf neuen Instanzen. Sie arbeiten jedoch mit einer bestehenden Instance und müssen Ihr Rezeptbuch daher manuell aktualisieren.

**So aktualisieren Sie die Rezeptbücher der Instance**

1. Erstellen Sie ein `.zip`-Archiv von `iis-cookbook` und laden Sie es in den S3-Bucket hoch.

   Das vorhandene Rezeptbuch wird dadurch überschrieben. Die URL bleibt jedoch dieselbe, Sie müssen die Stack-Konfiguration also nicht aktualisieren.

1. Wenn Ihre Instance nicht online ist, starten Sie sie neu.

1. Wenn die Instance online ist, wählen Sie im Navigationsbereich **Stack** und dann **Run Command (Befehl ausführen)** aus.

1. Wählen Sie für **Command (Befehl)** [Update Custom Cookbooks (Benutzerdefinierte Rezeptbücher aktualisieren)](workingstacks-commands.md) aus. Mit diesem Befehl installieren Sie das aktualisierte Rezeptbuch auf der Instance.

1. Wählen Sie **Update Custom Cookbooks (Benutzerdefinierte Rezeptbücher aktualisieren)** aus. Die Ausführung dieses Befehls kann einige Minuten dauern.

## Hinzufügen des Rezepts zum benutzerdefinierten IIS-Layer
<a name="w2ab1c14c47c17c23c25c21"></a>

Wie auch bei `install.rb` ist die bevorzugte Methode für die Bereitstellung, `deploy.rb` dem entsprechenden Lebenszyklusereignis zuzuweisen. Rezepte zur Bereitstellung werden normalerweise dem Ereignis "Bereitstellung" zugewiesen und zusammenfassend als Bereitstellungsrezepte bezeichnet. Allein durch die Zuweisung zum Ereignis "Bereitstellung" wird das Ereignis noch nicht ausgelöst. Stattdessen geschieht Folgendes:
+ Bei neuen Instanzen führt OpsWorks Stacks die Deploy-Rezepte automatisch aus, nachdem die Setup-Rezepte abgeschlossen sind, sodass neue Instanzen automatisch über die aktuelle Anwendungsversion verfügen.
+ Bei Online-Instances verwenden Sie einen [Bereitstellungsbefehl](workingapps-deploying.md), um neue oder aktualisierte Anwendungen manuell zu installieren.

  Über diesen Befehl wird ein Bereitstellungsereignis auf den Instances des Stack ausgelöst, das wiederum die Bereitstellungsrezepte ausführt.

**So weisen Sie deploy.rb dem Ereignis "Bereitstellung" des Layers zu**

1. Wählen Sie im Navigationsbereich **Ebenen** und dann unter **Ebene IISExample** die Option **Rezepte** aus.

1. Fügen Sie unter **Custom Chef Recipes (Benutzerdefinierte Chef-Rezepte)** die Zeichenfolge **iis-cookbook::deploy** dem Rezeptfeld **Deploy (Bereitstellen)** hinzu und wählen Sie **\$1** aus, um der Ebene das Rezept hinzuzufügen.

1. Wählen Sie **Save (Speichern)** aus, um die neue Konfiguration zu speichern. Die benutzerdefinierten Bereitstellungsrezepte sollten nun `iis-cookbook::deploy` enthalten.

## Hinzufügen einer Anwendung
<a name="w2ab1c14c47c17c23c25c23"></a>

Die letzte Aufgabe besteht darin, dem Stack eine App hinzuzufügen, um Ihre Anwendung in der OpsWorks Stacks-Umgebung darzustellen. Eine App enthält Metadaten wie den Anzeigenamen der Anwendung sowie die Daten, die Sie zum Herunterladen der App aus dem Repository benötigen.

**So fügen Sie dem Stack die App hinzu**

1. Wählen Sie im Navigationsbereich **Apps (Anwendungen)** und dann **Add an app (Anwendung hinzufügen)** aus.

1. Konfigurieren Sie die App mit den folgenden Einstellungen.
   + **Name** — ich **IIS-Example-App**
   + **Repository-Typ** — **Andere**
   + **Umgebungsvariablen** — Fügen Sie die folgenden drei Umgebungsvariablen hinzu:
     + **S3REGION**— Die Region des Buckets (in diesem Fall`us-west-1`).
     + **BUCKET**— Der Bucket-Name, z. `windows-example-app` B.
     + **FILENAME**— Der Dateiname:**default.htm**.

1. Akzeptieren Sie Standardwerte für die übrigen Einstellungen und wählen Sie dann **Add App (Anwendung hinzufügen)** aus, um dem Stack die Anwendung hinzuzufügen.

**Anmerkung**  
In diesem Beispiel werden die Download-Daten über Umgebungsvariablen bereitgestellt. Ein alternativer Ansatz besteht darin, einen S3-Archive-Repository-Typ zu verwenden und die URL der Datei anzugeben. OpsWorks Stacks fügt die Informationen zusammen mit optionalen Daten wie Ihren AWS-Anmeldeinformationen zum `app_source` Attribut der App hinzu. Ihr Bereitstellungsrezept muss daraufhin die URL aus den App-Attributen abrufen und daraus die Region, den Bucket-Namen und den Dateinamen extrahieren.

## Bereitstellen der App und Öffnen der Anwendung
<a name="w2ab1c14c47c17c23c25c25"></a>

OpsWorks Stacks stellt Apps automatisch für neue Instances bereit, nicht jedoch für Online-Instances. Da Ihre Instance bereits online ist, müssen Sie die App manuell bereitstellen.

**So stellen Sie die App bereit**

1. Wählen Sie im Navigationsbereich **Apps (Anwendungen)** und dann in der Spalte **Actions (Aktionen)** der Anwendung **deploy (Bereitstellen)** aus.

1. **Command (Befehl)** muss auf **Deploy (Bereitstellen)** eingestellt sein. Wählen Sie **Deploy (Bereitstellen)** rechts unten auf der Seite **Deploy App (App bereitstellen)**. Die Ausführung dieses Befehls kann einige Minuten dauern.

   Nachdem die Bereitstellung abgeschlossen wurde, kehren Sie zur Seite **Apps** zurück. Die Anzeige **Status** zeigt in grüner Schrift **successful (Erfolgreich)** an und neben dem Namen der Anwendung wird die erfolgreiche Bereitstellung durch ein grünes Häkchen dargestellt.

**Anmerkung**  
Windows-Apps haben grundsätzlich den App-Typ **Other (Sonstige)**. Durch die Bereitstellung der App geschieht daher Folgendes:  
Die Anwendungsdaten werden wie zuvor beschrieben den [Stack-Konfigurations- und Bereitstellungsattributen](workingcookbook-json.md) hinzugefügt.
Es wird ein Bereitstellungsereignis auf den Instances des Stacks ausgelöst, durch das Ihre benutzerdefinierten Bereitstellungsrezepte ausgeführt werden.

**Anmerkung**  
Weitere Informationen zur Fehlerbehebung bei fehlgeschlagenen Bereitstellungen oder Anwendungen finden Sie unter [Debuggen von Rezepten](troubleshoot-debug.md).

Die App ist jetzt installiert. Um sie zu öffnen, wählen Sie **Instances (Instances)** im **Navigationsbereich** und dann die öffentliche IP-Adresse der Instance aus. Es wird eine HTTP-Anfrage an die Instance gesendet und es wird in etwa Folgendes in Ihrem Browser angezeigt.

![\[Text displaying "Hello World!" in large, bold font against a white background.\]](http://docs.aws.amazon.com/de_de/opsworks/latest/userguide/images/windows-iis-app.png)
