

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.

# Rezeptbücher 101
<a name="cookbooks-101"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Ein OpsWorks Stacks-Stack auf Produktionsebene erfordert in der Regel einige [Anpassungen](customizing.md), was häufig die Implementierung eines benutzerdefinierten Chef-Kochbuchs mit einem oder mehreren Rezepten, Attributdateien oder Vorlagendateien bedeutet. Dieses Thema ist ein Tutorial zur Einführung in die Implementierung von Kochbüchern für Stacks. OpsWorks 

Weitere Informationen darüber, wie OpsWorks Stacks Kochbücher verwendet, einschließlich einer kurzen allgemeinen Einführung in Kochbücher, finden Sie unter. [Cookbooks und Rezepte](workingcookbook.md) Weitere Informationen zum Implementieren und Testen von Chef-Rezepten finden Sie in dem Buch [Test-Driven Infrastructure with Chef, 2nd Edition](https://www.amazon.com/Test-Driven-Infrastructure-Chef-Behavior-Driven-Development/dp/1449372201/ref=sr_1_fkmr0_1?ie=UTF8&qid=1405556803&sr=8-1-fkmr0&keywords=Test-Driven+Infrastructure+with+Chef%2C+2nd+Edition).

Die Tutorial-Beispiele sind in zwei Abschnitte unterteilt:
+  [Rezeptbücher – Grundlagen](cookbooks-101-basics.md) ist eine Gruppe von Anleitungen für Benutzer, die keine Erfahrung im Umgang mit Chef haben. Erfahrene Chef-Benutzer können diesen Abschnitt überspringen.

  Die Beispiele erläutern Ihnen die Grundlagen zur Implementierung von Rezeptbüchern, um allgemeine Aufgaben wie z. B. das Installieren von Paketen oder Erstellen von Verzeichnissen durchzuführen. Zur Vereinfachung des Prozesses verwenden Sie zwei nützliche Tools, um die meisten Beispiele lokal auf einer virtuellen Maschine auszuführen: [Vagrant](http://docs.vagrantup.com/v2/) und [Test Kitchen](http://kitchen.ci/). Bevor Sie beginnen, [Rezeptbücher – Grundlagen](cookbooks-101-basics.md), lesen Sie zuerst [Vagrant und Test Kitchen](#cookbooks-101-tools), um zu erfahren, wie Sie diese Tools installieren und verwenden. Da Windows von Test Kitchen noch nicht unterstützt wird, gelten alle Beispiele für Linux (die Notizen geben an, wie dies für Windows angepasst werden kann).
+ [Implementierung von Kochbüchern für Stacks OpsWorks](cookbooks-101-opsworks.md)beschreibt, wie Rezepte für OpsWorks Stacks implementiert werden, auch für Windows-Stacks.

  Es enthält auch einige fortgeschrittenere Informationen, z. B. die Verwendung von Berkshelf zur Verwaltung externer Kochbücher. Die Beispiele richten sich an neue Chef-Benutzer, wie die Beispiele in [Rezeptbücher – Grundlagen](cookbooks-101-basics.md). OpsWorks Stacks funktioniert jedoch etwas anders als der Chef-Server, daher empfehlen wir erfahrenen Chef-Benutzern, zumindest diesen Abschnitt durchzulesen.



## Vagrant und Test Kitchen
<a name="cookbooks-101-tools"></a>

Wenn Sie Rezepte für Linux-Instances anwenden, sind Vagrant und Test Kitchen sehr hilfreiche Tools zum Erlernen und für die erste Entwicklungs- und Testphase. Dies enthält kurze Beschreibungen von Vagrant und Test Kitchen und weist Sie auf Installationsanweisungen und Komplettlösungen hin, mit denen Sie die Tools einrichten und mit den Grundlagen der Verwendung der Tools vertraut machen können. Obwohl Windows von Vagrant unterstützt wird, ist dies bei Test Kitchen nicht der Fall, daher werden nur Linux-Beispiele für diese Tools erläutert.



### Vagrant
<a name="cookbooks-101-tools-vagrant"></a>

[Vagrant](http://docs.vagrantup.com/v2/) stellt eine konsistente Umgebung zur Ausführung und zum Testen von Code auf einer virtuellen Maschine zur Verfügung. Es unterstützt eine Vielzahl von Umgebungen — sogenannte Vagrant-Boxen —, von denen jede ein konfiguriertes Betriebssystem darstellt. Für OpsWorks Stacks basieren die interessierenden Umgebungen auf Ubuntu-, Amazon- oder Red Hat Enterprise Linux (RHEL) -Distributionen, sodass in den Beispielen hauptsächlich eine Vagrant-Box mit dem Namen verwendet wird. `opscode-ubuntu-12.04`

Vagrant ist für Linux, Windows und Macintosh-Systeme verfügbar, sodass Sie Ihre bevorzugte Workstation verwenden können, um Rezepte auf allen unterstützten Betriebssystemen zu implementieren und zu testen. Die Beispiele für dieses Kapitel wurden auf einem Ubuntu-Linux-System erstellt, aber die Übersetzung der Verfahren auf Windows- oder Macintosh-Systeme ist einfach.

Vagrant ist im Wesentlichen ein Wrapper für einen Anbieter von Virtualisierungsdiensten. Die meisten Beispiele verwenden den Anbieter. [VirtualBox](https://www.virtualbox.org/) VirtualBox ist kostenlos und für Linux-, Windows- und Macintosh-Systeme verfügbar. Die Vagrant-Komplettlösung enthält Installationsanweisungen, falls Sie diese noch nicht auf Ihrem System installiert haben VirtualBox . Beachten Sie, dass Sie auf Ubuntu basierende Umgebungen ausführen können VirtualBox, Amazon Linux jedoch nur für EC2 Amazon-Instances verfügbar ist. Sie können jedoch ein ähnliches Betriebssystem wie CentOS ausführen VirtualBox, was für die anfängliche Entwicklung und das Testen nützlich ist.

Weitere Informationen zu anderen Anbietern finden Sie in der [Vagrant](http://docs.vagrantup.com/v2/)-Dokumentation. Insbesondere ermöglicht Ihnen der `vagrant-aws` Plug-in-Anbieter die Verwendung von Vagrant mit EC2 Amazon-Instances. Dieser Anbieter ist besonders nützlich, um Rezepte auf Amazon Linux zu testen, das nur auf EC2 Amazon-Instances verfügbar ist. Der `vagrant-aws`-Anbieter ist kostenlos. Sie benötigen jedoch ein AWS-Konto und es werden die von Ihnen verwendeten AWS-Ressourcen berechnet.

An dieser Stelle empfehlen wir Ihnen die Anleitung [Getting Started](http://docs.vagrantup.com/v2/getting-started/index.html) von Vagrant, die Ihnen erläutert, wie Sie Vagrant auf Ihrer Workstation installieren, und die Ihnen die Grundlagen zur Verwendung von Vagrant vermittelt. Beachten Sie, dass die Beispiele in diesem Kapitel kein Git-Repository verwenden, sodass Sie diesen Teil der Anleitung überspringen können.

### Test Kitchen
<a name="cookbooks-101-tools-test-kitchen"></a>

[Test Kitchen](http://kitchen.ci/) vereinfacht die Ausführung und das Testen Ihrer Rezeptbücher auf Vagrant. In der Praxis werden Sie Vagrant nur in seltenen Fällen direkt verwenden müssen. Test Kitchen führt die gängigsten Aufgaben aus, darunter:
+ Starten einer Instance in Vagrant.
+ Übertragen von Rezeptbüchern auf die Instance.
+ Ausführen der Rezepte des Rezeptbuchs in der Instance.
+ Testen eines Rezepts des Rezeptbuchs in der Instance.
+ Verwenden von SSH für die Anmeldung bei der Instance.

Anstelle der direkten Installation des Test Kitchen-Gems empfehlen wir, [Chef DK](https://www.chef.io/downloads) zu installieren. Neben Chef selbst enthält dieses Paket Test Kitchen, [Berkshelf](http://berkshelf.com/) und mehrere andere nützliche Tools. [ChefSpec](https://docs.chef.io/chefspec.html)

An dieser Stelle sollten Sie die Anleitung [Getting Started](http://kitchen.ci/) von Test Kitchen durcharbeiten. Hier werden Ihnen die Grundlagen vermittelt, wie Sie Test Kitchen zum Ausführen und Testen von Rezepten verwenden. 

**Anmerkung**  
In den in diesem Kapitel aufgeführten Beispielen wird Test Kitchen als eine praktische Methode für die Ausführung von Rezepten verwendet. Wenn Sie möchten, können Sie die Anleitung "Erste Schritte" unterbrechen, nachdem Sie den Abschnitt "Manuelles Überprüfen" abgeschlossen haben, in dem alle wesentlichen Informationen für die Beispiele enthalten sind. Test Kitchen ist jedoch in erster Linie eine Test-Plattform, die Test-Frameworks wie das [Bash-automatisierte Testsystem (BATS)](https://github.com/sstephenson/bats) unterstützt. Gehen Sie den Rest der Anleitung zu einem späteren Zeitpunkt durch, um zu erfahren, wie Sie Test Kitchen zum Testen Ihrer Rezepte verwenden können.

# Rezeptbücher – Grundlagen
<a name="cookbooks-101-basics"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Sie können Rezeptbücher verwenden, um zahlreiche Aufgaben auszuführen. In den folgenden Themen wird davon ausgegangen, dass Sie mit Chef nicht vertraut sind. Daher wird beschrieben, wie Sie Rezeptbücher zur Ausführung zahlreicher gängiger Aufgaben verwenden können. Da Windows von Test Kitchen noch nicht unterstützt wird, gelten alle Beispiele für Linux (die Notizen geben an, wie dies für Windows angepasst werden kann). Sofern Sie mit Chef noch nicht vertraut sind, wird empfohlen, dass Sie diese Beispiele durcharbeiten (auch, wenn Sie Windows nutzen). Die meisten Beispiele in diesem Thema lassen sich mit geringfügigen Änderungen (die in den Beispielen angegeben werden) auch für Windows-Instances nutzen. Alle Beispiele werden auf einer virtuellen Maschine ausgeführt, daher benötigen Sie keinen Linux-Computer. Installieren Sie einfach Vagrant und Test Kitchen auf Ihrer regulären Workstation.

**Anmerkung**  
Falls Sie diese Rezepte auf einer Windows-Instance ausführen möchten, ist es am einfachsten, einen Windows-Stack zu erstellen und die Rezepte auf einer der Stack-Instances auszuführen. Weitere Informationen zum Ausführen von Rezepten auf einer OpsWorks Stacks-Windows-Instanz finden Sie unter. [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md)

Bevor Sie fortfahren, stellen Sie sicher, dass Sie Vagrant und Test Kitchen installiert und die jeweiligen Anleitungen für die ersten Schritte durchgearbeitet haben. Weitere Informationen finden Sie unter [Vagrant und Test Kitchen](cookbooks-101.md#cookbooks-101-tools).

**Topics**
+ [Rezeptstruktur](cookbooks-101-basics-structure.md)
+ [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md)
+ [Beispiel 2: Verwalten von Benutzern](cookbooks-101-basics-users.md)
+ [Beispiel 3: Erstellen von Verzeichnissen](cookbooks-101-basics-directories.md)
+ [Beispiel 4: Hinzufügen der Flusssteuerung](cookbooks-101-basics-ruby.md)
+ [Beispiel 5: Verwenden von Attributen](cookbooks-101-basics-attributes.md)
+ [Beispiel 6: Erstellen von Dateien](cookbooks-101-basics-files.md)
+ [Beispiel 7: Ausführen von Befehlen und Skripts](cookbooks-101-basics-commands.md)
+ [Beispiel 8: Verwalten von Services](cookbooks-101-basics-services.md)
+ [Beispiel 9: Verwenden von EC2 Amazon-Instances](cookbooks-101-basics-ec2.md)
+ [Nächste Schritte](cookbooks-101-basics-next.md)

# Rezeptstruktur
<a name="cookbooks-101-basics-structure"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Ein Rezeptbuch ist in erster Linie eine Sammlung von *Rezepten*, mit denen zahlreiche Aufgaben auf einer Instance ausgeführt werden können. Um die Implementierung von Rezepten zu verdeutlichen, ist ein einfaches Beispiel hilfreich. Nachfolgend finden Sie das Einrichtungsrezept für den integrierten [HAProxy Layer](layers-haproxy.md). Konzentrieren Sie sich zum jetzigen Zeitpunkt nur auf die allgemeine Struktur. Machen Sie sich keine Gedanken über die Details, sie werden in den nachfolgenden Beispielen veranschaulicht.

```
package 'haproxy' do
  action :install
end

if platform?('debian','ubuntu')
  template '/etc/default/haproxy' do
    source 'haproxy-default.erb'
    owner 'root'
    group 'root'
    mode 0644
  end
end

include_recipe 'haproxy::service'

service 'haproxy' do
  action [:enable, :start]
end

template '/etc/haproxy/haproxy.cfg' do
  source 'haproxy.cfg.erb'
  owner 'root'
  group 'root'
  mode 0644
  notifies :restart, "service[haproxy]"
end
```

**Anmerkung**  
Dieses und weitere Beispiele für funktionierende Rezepte und die zugehöriger Dateien finden Sie unter [OpsWorks  Stacks built-in recipes](https://github.com/aws/opsworks-cookbooks).

In diesem Beispiel werden die wichtigsten Rezeptelemente vorgestellt, die in den folgenden Abschnitten beschrieben werden.

**Topics**
+ [Ressourcen](#cookbooks-101-basics-structure-resources)
+ [Flusssteuerung](#cookbooks-101-basics-structure-ruby)
+ [Eingebundene Rezepte](#cookbooks-101-basics-structure-include)

## Ressourcen
<a name="cookbooks-101-basics-structure-resources"></a>

Rezepte bestehen zum Großteil aus Chef-*Ressourcen*. Jede gibt einen bestimmten Aspekt des letzten Instance-Status an, z. B. ein zu installierendes Paket oder ein zu startender Service. Im Beispiel werden vier Ressourcen verwendet:
+ Eine `package` Ressource, die ein installiertes Paket darstellt, in diesem Beispiel einen [HAProxy Server](http://haproxy.1wt.eu/).
+ Eine `service` Ressource, die einen Dienst darstellt, den HAProxy Dienst für dieses Beispiel.
+ Zwei `template` Ressourcen, die Dateien darstellen, die aus einer bestimmten Vorlage erstellt werden sollen, zwei HAProxy Konfigurationsdateien für dieses Beispiel.

Ressourcen sind eine deklarative Möglichkeit, um den Instance-Status anzugeben. Im Hintergrund ist jeder Ressource ein *Anbieter* zugeordnet, von dem die erforderlichen Aufgaben ausgeführt werden, z. B. Pakete installieren, Verzeichnisse erstellen und konfigurieren und Services starten. Falls die Details der Aufgabe vom jeweiligen Betriebssystem abhängen, verfügt die Ressource über mehrere Anbieter, von denen jeweils der geeignete für das System ausgewählt wird. Bei einem Red Hat Linux-System wird vom `package`-Anbieter `yum` zum Installieren der Pakete verwendet. Auf einem Ubuntu Linux-System verwendet der `package`-Anbieter hingegen `apt-get`.

Eine Ressource wird als Ruby-Codeblock im folgenden allgemeinen Format implementiert.

```
resource_type "resource_name" do
  attribute1 'value1'
  attribute2 'value2'
  ...
  action :action_name
  notifies : action 'resource'
end
```

Die Elemente lauten folgendermaßen:

**Ressourcentyp**  
(Erforderlich) Das Beispiel enthält drei Ressourcentypen, nämlich `package`, `service` und `template`.

**Ressourcenname**  
(Erforderlich) Der Name identifiziert eine bestimmte Ressource und wird gelegentlich als Standardwert für eines der Attribute verwendet. In diesem Beispiel steht `package` für eine "package"-Ressource mit dem Namen `haproxy` und die erste `template`-Ressource steht für eine Konfigurationsdatei mit dem Namen `/etc/default/haproxy`.

**Attribute**  
(Optional) Attribute geben die Ressourcenkonfiguration an. Sie hängen vom Ressourcentyp und davon, wie Sie die Ressource konfigurieren möchten, ab.  
+ Im Beispiel definieren die `template`-Ressourcen explizit mehrere Attribute, die jeweils die Quelle, den Besitzer, die Gruppe und den Modus der erstellten Datei spezifizieren. 
+ Von den im Beispiel verwendeten Ressourcen `package` und `service` werden keine Attribute explizit definiert.

  Der Ressourcenname ist in der Regel der Standardwert für ein erforderliches Attribut – und häufig ist auch nicht mehr nötig. Beispielsweise ist der Ressourcenname der Standardwert für das `package`-Attribut der `package_name`-Ressource und gleichzeitig auch das einzig erforderliche Attribut.
Die so genannten "Wächterattribute" sind besondere Attribute und geben an, wann eine Aktion seitens des Ressourcenanbieters erforderlich ist. Beispielsweise fordert das `only_if`-Attribut den Ressourcenanbieter nur zu einer Aktion auf, sofern eine festgelegte Bedingung erfüllt wird. Das HAProxy Rezept verwendet keine Guard-Attribute, aber sie werden in mehreren der folgenden Beispiele verwendet.

**Aktionen und Benachrichtigungen**  
(Optional) Aktionen und Benachrichtigungen geben an, welche Aufgaben vom Anbieter ausgeführt werden sollen.  
+ Mit `action` wird der Anbieter zu einer bestimmten Aktion aufgefordert, z. B. etwas zu installieren oder zu erstellen.

  Für jede Ressource sind mehrere ressourcenabhängige Aktionen möglich, eine davon ist immer die Standardaktion. In diesem Beispiel lautet die Aktion für die `package`-Ressource `install` und weist den Anbieter an, das Paket zu installieren. Die erste `template`-Ressource hat kein `action`-Element, daher führt der Anbieter die `create`-Standardaktion aus.
+ Mit `notifies` wird der Anbieter einer anderen Ressource zur Ausführung einer Aktion aufgefordert. Dies gilt nur, wenn sich der Ressourcenstatus geändert hat.

  `notifies` wird in der Regel mit Ressourcen wie `template` und `file` für die Aufgabenausführung verwendet, z. B. um den Service nach einer Änderung der Konfigurationsdatei neu zu starten. Ressourcen verfügen nicht über Standardbenachrichtigungen. Wenn eine Benachrichtigung gesendet werden soll, muss für die Ressource explizit ein `notifies`-Element deklariert werden. Im HAProxy Rezept benachrichtigt die zweite `template` Ressource die `service` Haproxy-Ressource, den HAProxy Dienst neu zu starten, falls sich die zugehörige Konfigurationsdatei geändert hat. 

Manchmal hängen Ressourcen vom Betriebssystem ab.
+ Einige Ressourcen können nur auf Linux- oder Windows-Systemen verwendet werden.

  Beispielsweise werden mit [package](https://docs.chef.io/chef/resources.html#package) Pakete auf Linux-Systemen und mit [windows\$1package](https://docs.chef.io/chef/resources.html#windows-package) Pakete auf Windows-Systemen installiert.
+ Einige Ressourcen können mit einem beliebigen Betriebssystem genutzt werden, haben aber Attribute für ein bestimmtes System.

  Beispielsweise kann die [file](https://docs.chef.io/chef/resources.html#file)-Ressource sowohl auf Linux- als auch auf Windows-Systemen eingesetzt werden, verfügt aber über unterschiedliche Attributsätze für die Berechtigungskonfiguration.

Beschreibungen der Standardressourcen einschließlich der verfügbaren Attribute, Aktionen und Benachrichtigungen für die einzelnen Ressourcen finden Sie unter [About Resources and Providers](https://docs.chef.io/resource.html). 

## Flusssteuerung
<a name="cookbooks-101-basics-structure-ruby"></a>

Da es sich bei Rezepten um Ruby-Anwendungen handelt, können Sie Ruby-Steuerungsstrukturen für die Einbindung der Flusssteuerung in ein Rezept verwenden. Beispielsweise können Sie mit der Ruby-Bedingungslogik unterschiedliches Rezeptverhalten auf verschiedenen Systemen erzeugen. Das HAProxy Rezept beinhaltet einen `if` Block, der eine `template` Ressource verwendet, um eine Konfigurationsdatei zu erstellen, aber nur, wenn das Rezept auf einem Debian- oder Ubuntu-System läuft. 

Ein anderes gängiges Szenario besteht darin, in einer Schleife eine Ressource mehrere Male mit unterschiedlichen Attributeinstellungen auszuführen. Beispielsweise können Sie Verzeichnisse anlegen, indem Sie eine `directory`-Ressource mehrfach mit unterschiedlichen Verzeichnisnamen in einer Schleife ausführen.

**Anmerkung**  
Falls Sie mit Ruby nicht vertraut sind, finden Sie die für die meisten Rezepte erforderlichen Informationen unter [Just Enough Ruby for Chef](https://docs.chef.io/just_enough_ruby_for_chef.html).

## Eingebundene Rezepte
<a name="cookbooks-101-basics-structure-include"></a>

Mit `include_recipe` können Sie weitere Rezepte in den Code einbinden, sodass Sie die Rezepte "modularisieren" und denselben Code in mehreren Rezepten verwenden können. Vor der Ausführung des Host-Rezepts ersetzt Chef jedes `include_recipe`-Element durch den angegebenen Rezeptcode. Sie erkennen ein eingebundenes Rezept an der Standardsyntax von Chef, `cookbook_name::recipe_name`, wobei für `recipe_name` die Erweiterung `.rb` fehlt. Das Beispiel beinhaltet ein Rezept`haproxy::service`, das den HAProxy Dienst repräsentiert. 

**Anmerkung**  
Falls Sie Rezepte aus einem anderen Rezeptbuch mit `include_recipe` in Rezepte einbinden, die mit Chef 11.10 und neuer ausgeführt werden, müssen Sie in einer `depends`-Anweisung die Abhängigkeit in der Datei `metadata.rb` des Rezeptbuchs deklarieren. Weitere Informationen finden Sie unter [Implementieren von Rezepten: Chef 11.10](workingcookbook-chef11-10.md).

# Beispiel 1: Installieren von Paketen
<a name="cookbooks-101-basics-packages"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Die Paketinstallation zählt zu den gängigeren Einsatzzwecken von Rezepten und kann, je nach Paket, recht einfach sein. Beispielsweise wird mit folgendem Paket Git auf einem Linux-System installiert.

```
package 'git' do
  action :install
end
```

Die Paketinstallation wird von der [`package`-Ressource](https://docs.chef.io/chef/resources.html#package) ausgeführt. In diesem Beispiel müssen keine Attribute angegeben werden. Der Ressourcenname ist der Standardwert für das `package_name`-Attribut, mit dem das Paket identifiziert wird. Mit der `install`-Aktion wird der Anbieter aufgefordert, das Paket zu installieren. Sie könnten den Code noch weiter vereinfachen, indem Sie `install` weglassen, denn das ist die Standardaktion der `package`-Ressource. Wenn Sie das Rezept ausführen, wird von Chef der entsprechende Anbieter für die Paketinstallation verwendet. In diesem Beispiel wird ein Ubuntu-System verwendet, auf dem der Anbieter Git durch den Aufruf von `apt-get` installiert.

**Anmerkung**  
Bei der Softwareinstallation auf einem Windows-System ist ein anderes Vorgehen erforderlich. Weitere Informationen finden Sie unter [Installieren von Windows-Software](cookbooks-101-opsworks-install-software.md).

Wenn Sie dieses Rezept in Vagrant mit Test Kitchen ausführen möchten, müssen Sie zunächst ein Rezeptbuch einrichten und Test Kitchen initialisieren und konfigurieren. Die nachfolgenden Schritte gelten für ein Linux-System, aber das Verfahren ist für Windows- und Macintosh-Systeme im Wesentlichen gleich. Öffnen Sie zunächst ein Terminalfenster. In allen Beispielen dieses Kapitels werden Befehlszeilen-Tools genutzt.

**So bereiten Sie ein Rezeptbuch vor**

1. Erstellen Sie in Ihrem Stammverzeichnis das Unterverzeichnis `opsworks_cookbooks`, das alle Rezeptbücher für dieses Kapitel enthalten wird. Erstellen Sie anschließend ein Unterverzeichnis mit dem Namen `installpkg` für dieses Rezeptbuch und öffnen Sie es.

1. Erstellen Sie in `installpkg` die Datei `metadata.rb`, die folgenden Code enthält.

   ```
   name "installpkg"
   version "0.1.0"
   ```

   Aus Gründen der Übersichtlichkeit werden in den Beispielen dieses Kapitels nur der Name und die Version des Rezeptbuchs angegeben, aber `metadata.rb` kann eine Vielzahl von Metadaten für ein Rezeptbuch enthalten. Weitere Informationen finden Sie unter [About Cookbook Metadata](http://docs.chef.io/cookbook_repo.html#about-cookbook-metadata).
**Anmerkung**  
Achten Sie darauf, `metadata.rb` vor der Test Kitchen-Initialisierung zu erstellen, denn die Daten werden für die Standardkonfigurationsdatei benötigt.

1. Führen Sie in `installpkg` den Befehl `kitchen init` zur Test Kitchen-Initialisierung und zur Installation des Vagrant-Standardtreibers aus.

1. Mit dem Befehl `kitchen init` wird in `installpkg` eine YAML-Konfigurationsdatei mit dem Namen `.kitchen.yml` generiert. Öffnen Sie die Datei in Ihrem bevorzugten Texteditor. Die Datei `.kitchen.yml` enthält einen `platforms`-Bereich mit den Systemen, auf denen die Rezepte ausgeführt werden sollen. Test Kitchen generiert eine Instance und führt die spezifizierten Rezepte auf den einzelnen Plattformen aus. 
**Anmerkung**  
Standardmäßig führt Test Kitchen die Rezepte nur auf jeweils einer Plattform aus. Wenn Sie ein `-p`-Argument zu den Befehlen hinzufügen, mit denen die Instance erstellt wird, führt Test Kitchen die Rezepte auf allen Plattformen gleichzeitig aus.

   Eine einzelne Plattform ist für dieses Beispiel ausreichend. Bearbeiten Sie daher `.kitchen.yml` und entfernen Sie die `centos-6.4`-Plattform. Ihre Datei `.kitchen.yml` sollte nun wie folgt aussehen:

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: default
       run_list:
         - recipe[installpkg::default]
       attributes:
   ```

   Test Kitchen führt nur die Rezepte aus, die in der `.kitchen.yml`-Ausführungsliste genannt werden. Sie identifizieren Rezepte anhand des `[cookbook_name::recipe_name]` Formats, bei dem die Erweiterung *recipe\$1name* weggelassen wird. `.rb` Anfänglich enthält die `.kitchen.yml`-Ausführungsliste das Standardrezept des Rezeptbuchs, `installpkg::default`. Dieses Rezept werden Sie implementieren, daher muss die Ausführungsliste nicht geändert werden.

1. Erstellen Sie ein Unterverzeichnis von `installpkg` namens `recipes`.

   Wenn ein Kochbuch Rezepte enthält — was bei den meisten der Fall ist —, müssen sie sich im Unterverzeichnis befinden. `recipes`

Nun können Sie das Rezept zum Rezeptbuch hinzufügen und mithilfe von Test Kitchen auf einer Instance ausführen.

**So führen Sie das Rezept aus**

1. Erstellen Sie eine Datei mit dem Namen `default.rb`, fügen Sie den Beispiel-Code für die Git-Installation vom Abschnittsanfang ein und speichern Sie die Datei im Unterverzeichnis `recipes`.

1. Führen Sie im Verzeichnis `installpkg` den Befehl `kitchen converge` aus. Dieser Befehl startet eine neue Ubuntu-Instanz in Vagrant, kopiert Ihre Kochbücher auf die Instanz und initiiert einen Chef-Lauf, um die Rezepte in der Ausführungsliste auszuführen. `.kitchen.yml`

1. Um zu prüfen, ob das Rezept erfolgreich ausgeführt wurde, führen Sie `kitchen login` aus und öffnen damit eine SSH-Verbindung zur Instance. Führen Sie dann `git --version` aus, um zu überprüfen, ob Git erfolgreich installiert wurde. Um zur Workstation zurückzukehren, führen Sie `exit` aus.

1. Wenn Sie fertig sind, führen Sie `kitchen destroy` aus und fahren damit die Instance herunter. Im nächsten Beispiel wird ein anderes Rezeptbuch verwendet.

Dieses Beispiel ist gut für die ersten Schritte geeignet, es ist jedoch besonders einfach. Die Installation anderer Pakete kann komplizierter sein und Sie müssen möglicherweise einen oder alle der folgenden Schritte ausführen:
+ Erstellen und konfigurieren Sie einen Benutzer.
+ Erstellen Sie ein oder mehrere Verzeichnisse für Daten, Protokolle usw.
+ Installieren Sie eine oder mehrere Konfigurationsdateien.
+ Geben Sie einen anderen Paketnamen oder verschiedene Attributwerte für unterschiedliche Betriebssysteme an.
+ Starten Sie einen Service und starten Sie diesen bei Bedarf neu.

In den folgenden Beispielen wird erklärt, wie Sie mit diesen Aspekten umgehen. Zudem werden einige weitere hilfreiche Vorgehensweisen beschrieben.

# Beispiel 2: Verwalten von Benutzern
<a name="cookbooks-101-basics-users"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Eine andere einfache Aufgabe ist das Verwalten von Benutzern auf einer Instance. Mit dem folgenden Rezept wird ein neuer Benutzer zu einer Linux-Instance hinzugefügt.

```
user "myuser" do
  home "/home/newuser"
  shell "/bin/bash"
end
```

Verwenden Sie eine [user](https://docs.chef.io/chef/resources.html#user)-Ressource, um die Benutzer sowohl auf Linux- als auch auf Windows-Systemen zu verwalten. Einige Attribute gelten jedoch nur für ein System. Im Beispiel wird der Benutzer `myuser` erstellt, für den Stammverzeichnis und Shell angegeben werden. Es ist keine Aktion vorgegeben, daher wird von der Ressource die `create`-Standardaktion verwendet. Sie können Attribute zu `user` hinzufügen und so weitere Einstellungen (z. B. Passwort oder Gruppen-ID) spezifizieren. Zudem können Sie `user` für entsprechende Benutzerverwaltungsaufgaben einsetzen, z. B. Benutzereinstellungen ändern oder Benutzer löschen. Weitere Informationen finden Sie unter [user](https://docs.chef.io/chef/resources.html#user).

**So führen Sie das Rezept aus**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `newuser` und öffnen Sie es.

1. Erstellen Sie die Datei `metadata.rb`, die folgenden Code enthält, und speichern Sie diese unter `newuser`.

   ```
   name "newuser"
   version "0.1.0"
   ```

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben und fügen Sie das Verzeichnis `recipes` zum Verzeichnis `newuser` hinzu.

1.  Fügen Sie die Datei `default.rb` mit dem Beispielrezept zum Rezeptbuch-Verzeichnis `recipes` hinzu. 

1. Führen Sie `kitchen converge` aus, um das Rezept auszuführen.

1. Melden Sie sich über `kitchen login` an der Instance an. Prüfen Sie, ob der neue Benutzer vorhanden ist, indem Sie `cat /etc/passwd` ausführen. Der Benutzer `myuser` sollte unten in der Datei angezeigt werden.

# Beispiel 3: Erstellen von Verzeichnissen
<a name="cookbooks-101-basics-directories"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Service hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Wenn Sie ein Paket auf einer Instance installieren, müssen Sie häufig einige Konfigurationsdateien erstellen und sie in den entsprechenden Verzeichnissen platzieren. Doch diese Verzeichnisse sind möglicherweise noch nicht vorhanden. Zudem müssen ggf. auch Verzeichnisse für Daten, Protokolldateien usw. erstellt werden. Beispielsweise booten Sie zuerst das Ubuntu-System, das Sie für die meisten Beispiele verwenden. Das `/srv` Verzeichnis hat keine Unterverzeichnisse. Wenn Sie einen Anwendungsserver installieren, benötigen Sie das Verzeichnis `/srv/www/` und vermutlich auch einige Unterverzeichnisse für Datendateien, Protokolle und so weiter. Mit dem folgenden Rezept wird `/srv/www/` auf einer Instance erstellt.

```
directory "/srv/www/" do
  mode 0755
  owner 'root'
  group 'root'
  action :create
end
```

Mithilfe einer [`directory`-Ressource](https://docs.chef.io/chef/resources.html#directory) erstellen und konfigurieren Sie Verzeichnisse auf Linux- und Windows-Systemen, wobei einige Attribute unterschiedlich verwendet werden. Der Ressourcenname ist der Standardwert für das `path`-Attribut der Ressource, daher wird im Beispiel das Verzeichnis `/srv/www/` mit den Eigenschaften `mode`, `owner` und `group` erstellt.

**So führen Sie das Rezept aus**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `createdir` und öffnen Sie es.

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben und fügen Sie das Verzeichnis `recipes` zu `createdir` hinzu.

1.  Fügen Sie die Datei `default.rb` mit dem Rezeptcode zum Rezeptbuch-Unterverzeichnis `recipes` hinzu. 

1. Führen Sie `kitchen converge` aus, um das Rezept auszuführen.

1. Führen Sie `kitchen login` aus und öffnen Sie `/srv`, um zu prüfen, ob das Unterverzeichnis `www` vorhanden ist.

1. Führen Sie `exit` aus, um zur Workstation zurückzukehren, und lassen Sie die Instance aktiv.

**Anmerkung**  
Um auf der Instance ein Verzeichnis ähnlich dem Stammverzeichnis zu erstellen, bilden Sie das Stammverzeichnis mit `#{ENV['HOME']}` ab. Beispielsweise wird wie folgt das Verzeichnis `~/shared` erstellt.  

```
directory "#{ENV['HOME']}/shared" do
  ...
end
```

Angenommen, Sie möchten ein tiefer geschachteltes Verzeichnis wie `/srv/www/shared` erstellen. Dann modifizieren Sie das vorherige Rezept wie folgt.

```
directory "/srv/www/shared" do
  mode 0755
  owner 'root'
  group 'root'
  action :create
end
```

**So führen Sie das Rezept aus**

1.  Ersetzen Sie den Code in `default.rb` durch das vorherige Rezept. 

1. Führen Sie `kitchen converge` im Verzeichnis `createdir` aus.

1. Überprüfen Sie, ob das Verzeichnis erstellt wurde. Führen Sie dazu `kitchen login` aus und öffnen Sie `/srv/www`, um zu prüfen, ob das Unterverzeichnis `shared` vorhanden ist. 

1. Führen Sie `kitchen destroy` aus, um die Instance herunterzufahren.

Wie Sie sehen können, wurde der Befehl `kitchen converge` viel schneller ausgeführt. Das liegt daran, dass die Instance bereits ausgeführt wird, daher ist es nicht nötig, die Instance zu starten, Chef zu installieren usw. Test Kitchen kopiert einfach das aktualisierte Rezeptbuch auf die Instance und startet Chef.

Führen Sie nun `kitchen converge` noch einmal aus, damit das Rezept auf einer neuen Instance ausgeführt wird. Das Ergebnis sieht folgendermaßen aus.

```
Chef Client failed. 0 resources updated in 1.908125788 seconds       
[2014-06-20T20:54:26+00:00] ERROR: directory[/srv/www/shared] (createdir::default line 1) had an error: Chef::Exceptions::EnclosingDirectoryDoesNotExist: Parent directory /srv/www does not exist, cannot create /srv/www/shared       
[2014-06-20T20:54:26+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)       
>>>>>> Converge failed on instance <default-ubuntu-1204>.
>>>>>> Please see .kitchen/logs/default-ubuntu-1204.log for more details
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: SSH exited (1) for command: [sudo -E chef-solo --config /tmp/kitchen/solo.rb --json-attributes /tmp/kitchen/dna.json  --log_level info]
>>>>>> ----------------------
```

Was ist passiert? Das Problem ist, dass mit einer `directory`-Ressource standardmäßig nur ein Verzeichnis – und nicht mehrere – erstellt werden kann. Das Rezept konnte zuvor erfolgreich ausgeführt werden, weil das zuerst auf der Instance ausgeführte Rezept das Verzeichnis `/srv/www` bereits erstellt hatte, folglich wurde mit `/srv/www/shared` nur ein Unterverzeichnis erstellt.

**Anmerkung**  
Achten Sie beim Ausführen von `kitchen converge` darauf, ob Sie die Rezepte auf einer neuen oder einer vorhandenen Instance ausführen. Die Ergebnisse könnten unterschiedlich ausfallen.

Um mehrere Unterverzeichnisse zu erstellen, fügen Sie zu `recursive` das `directory`-Attribut mit dem Wert `true` hinzu. Mit dem folgenden Rezept wird `/srv/www/shared` direkt auf einer neuen Instance erstellt.

```
directory "/srv/www/shared" do
  mode 0755
  owner 'root'
  group 'root'
  recursive true
  action :create
end
```

# Beispiel 4: Hinzufügen der Flusssteuerung
<a name="cookbooks-101-basics-ruby"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Einige Rezepte sind nur eine Reihe von Chef-Ressourcen. In dem Fall werden bei der Rezeptausführung einfach die einzelnen Ressourcenanbieter nacheinander ausgeführt. Allerdings ist ein komplexerer Ausführungspfad meist sinnvoller. Nachfolgend finden Sie zwei gängige Szenarien:
+ Ein Rezept soll die gleiche Ressource mehrfach und mit unterschiedlichen Attributeinstellungen ausführen.
+ Für unterschiedliche Betriebssysteme sollen verschiedene Attributeinstellungen verwendet werden.

Sie können solche Szenarien durch die Einbindung von Ruby-Steuerungsstrukturen in das Rezept realisieren. In diesem Abschnitt wird erklärt, wie Sie das Rezept aus [Beispiel 3: Erstellen von Verzeichnissen](cookbooks-101-basics-directories.md) für beide Szenarien anpassen.

**Topics**
+ [Iteration](#cookbooks-101-basics-ruby-iteration)
+ [Bedingungslogik](#cookbooks-101-basics-ruby-conditional)

## Iteration
<a name="cookbooks-101-basics-ruby-iteration"></a>

In [Beispiel 3: Erstellen von Verzeichnissen](cookbooks-101-basics-directories.md) wurde veranschaulicht, wie Sie mit einer `directory`-Ressource ein oder mehrere Verzeichnisse erstellen. Aber was ist, wenn Sie zwei separate Verzeichnisse – `/srv/www/config` und `/srv/www/shared` – erstellen möchten? Sie können für jedes Verzeichnis eine separate "directory"-Ressource implementieren. Sollen viele Verzeichnisse erstellt werden, ist das jedoch sehr mühselig. Das folgende Rezept bietet dafür eine einfachere Methode. 

```
[ "/srv/www/config", "/srv/www/shared" ].each do |path|
  directory path do
    mode 0755
    owner 'root'
    group 'root'
    recursive true
    action :create
  end
end
```

Anstatt für jedes Unterverzeichnis eine separate "directory"-Ressource zu verwenden, wird im Rezept eine Zeichenfolgensammlung mit enthaltenen Unterverzeichnispfaden genutzt. Bei der `each`-Methode von Ruby wird die Ressource einmal für jedes Sammlungselement (beginnend mit dem ersten) ausgeführt. Der Elementwert wird in der Ressource durch die `path`-Variable – in diesem Fall der Verzeichnispfad – dargestellt. Dieses Beispiel können Sie einfach anpassen, um eine beliebige Anzahl an Unterverzeichnissen zu erstellen.

**So führen Sie das Rezept aus**

1. Bleiben Sie im Verzeichnis `createdir`. Dieses Rezeptbuch wird auch in den nächsten Beispielen verwendet. 

1. Führen Sie `kitchen destroy` aus, damit Sie mit einer neuen Instance beginnen können (sofern noch nicht geschehen). 

1. Ersetzen Sie den Code in `default.rb` durch den Beispiel-Code und führen Sie `kitchen converge` aus.

1. Melden Sie sich an der Instance an. Die neu erstellten Verzeichnisse werden unter `/srv` angezeigt.

Sie können mithilfe einer Hash-Tabelle zwei Werte für jede Iteration angeben. Mit dem folgenden Rezept werden `/srv/www/config` und `/srv/www/shared` jeweils mit einem anderen Modus erstellt.

```
{ "/srv/www/config" => 0644, "/srv/www/shared" => 0755 }.each do |path, mode_value|
  directory path do
    mode mode_value
    owner 'root'
    group 'root'
    recursive true
    action :create
  end
end
```

**So führen Sie das Rezept aus**

1. Führen Sie `kitchen destroy` aus, damit Sie mit einer neuen Instance beginnen können (sofern noch nicht geschehen). 

1. Ersetzen Sie den Code in `default.rb` durch den Beispiel-Code und führen Sie `kitchen converge` aus.

1. Melden Sie sich an der Instance an. Die neu erstellten Verzeichnisse werden unter `/srv` mit den angegebenen Modi angezeigt.

**Anmerkung**  
OpsWorks In Stacks-Rezepten wird dieser Ansatz häufig verwendet, um Werte aus der [JSON-Datei für die Stack-Konfiguration und Bereitstellung](workingcookbook-json.md) zu extrahieren — was im Grunde eine große Hashtabelle ist — und sie in eine Ressource einzufügen. Ein Beispiel finden Sie unter [Bereitstellungsrezepte](create-custom-deploy.md).

## Bedingungslogik
<a name="cookbooks-101-basics-ruby-conditional"></a>

Mithilfe der Bedingungslogik von Ruby können Sie auch mehrere Ausführungsvarianten erstellen. Im folgenden Rezept wird die Logik `if-elsif-else` als Erweiterung des vorherigen Beispiels eingesetzt, um das Unterverzeichnis `/srv/www/shared` zu erstellen, sofern es sich um Debian- und Ubuntu-Systeme handelt. Auf allen anderen Systemen wird in der Test Kitchen-Ausgabe eine Fehlermeldung protokolliert.

```
if platform?("debian", "ubuntu")
  directory "/srv/www/shared" do
    mode 0755
    owner 'root'
    group 'root'
    recursive true
    action :create
  end
else
  log "Unsupported system"
end
```

**So führen Sie das Beispielrezept aus**

1. Falls die Instance noch aktiv ist, fahren Sie sie mit `kitchen destroy` herunter.

1. Ersetzen Sie den Code in `default.rb` durch den Beispiel-Code.

1. Bearbeiten Sie `.kitchen.yml` und fügen Sie das CentOS 6.4-System zur Liste der Plattformen hinzu. Der `platforms`-Abschnitt der Datei sieht nun aus wie folgt.

   ```
   ...
   platforms:
     - name: ubuntu-12.04
     - name: centos-6.4
   ...
   ```

1. Führen Sie `kitchen converge` aus, um eine Instance zu erstellen und die Rezepte für die einzelnen Plattformen in `.kitchen.yml` nacheinander auszuführen. 
**Anmerkung**  
Wenn nur eine Instance konvergiert werden soll, können Sie den Instance-Namen als Parameter hinzufügen. Um beispielsweise das Rezept nur auf der Ubuntu-Plattform zu konvergieren, führen Sie `kitchen converge default-ubuntu-1204` aus. Falls Sie die Namen der Plattformen vergessen haben, führen Sie einfach `kitchen list` aus.

Die Protokollmeldung im CentOS-Abschnitt der Test Kitchen-Ausgabe sieht in etwa folgendermaßen aus:

```
...
Converging 1 resources
Recipe: createdir::default
* log[Unsupported system] action write[2014-06-23T19:10:30+00:00] INFO: Processing log[Unsupported system] action write (createdir::default line 12)
[2014-06-23T19:10:30+00:00] INFO: Unsupported system
       
[2014-06-23T19:10:30+00:00] INFO: Chef Run complete in 0.004972162 seconds
```

Nun können Sie sich an den Instances anmelden und prüfen, ob die Verzeichnisse erstellt wurden. Allerdings können Sie hier nicht einfach `kitchen login` ausführen. Sie müssen unter Angabe des Plattformnamens die Instance angeben, z. B. `kitchen login default-ubuntu-1204`. 

**Anmerkung**  
Sofern ein Test Kitchen-Befehl den Instance-Namen übernimmt, müssen Sie nicht den vollständigen Namen eingeben. Test Kitchen behandelt den Instance-Namen als regulären Ruby-Ausdruck, daher müssen nur genügend Zeichen eingegeben werden, um einen eindeutigen Treffer zu finden. Beispielsweise können Sie durch Ausführen von `kitchen converge ub` nur die Ubuntu-Instance konvergieren oder sich durch Ausführen von `kitchen login 64` an der CentOS-Instance anmelden.

Möglicherweise stellen Sie sich jetzt die Frage, woher das Rezept wissen kann, auf welcher Plattform es ausgeführt wird. Chef führt das Tool [Ohai](https://docs.chef.io/ohai.html) bei jeder Ausführung aus und erfasst so Systemdaten, darunter auch die Plattform. Diese Daten werden als Attribute in einer Struktur mit der Bezeichnung *Knotenobjekt* dargestellt. Mit der `platform?`-Methode von Chef werden die in Klammern gesetzten Systeme mit den Ohai-Plattformwerten verglichen. Bei einer Übereinstimmung wird der Wert "true" zurückgegeben.

Sie können den Wert eines Knotenattributs mit `node['attribute_name']` direkt im Code referenzieren. Der Plattformwert wird beispielsweise mit `node['platform']` angegeben. Sie könnten z. B. das vorherige Beispiel wie folgt schreiben.

```
if node[:platform] == 'debian' or node[:platform] == 'ubuntu'
  directory "/srv/www/shared" do
    mode 0755
    owner 'root'
    group 'root'
    recursive true
    action :create
  end
else
  log "Unsupported system"
end
```

Mit der Einbindung der Bedingungslogik in ein Rezept wird häufig die Tatsache berücksichtigt, dass verschiedene Linux-Familien gelegentlich unterschiedliche Namen für Pakete, Verzeichnisse etc. verwenden. Beispielsweise lautet der Apache-Paketname auf CentOS-Systemen `httpd` und auf Ubuntu-Systemen `apache2`.

Falls Sie nur eine andere Zeichenfolge für verschiedene Systeme benötigen, ist die [http://docs.chef.io/dsl_recipe.html#value-for-platform](http://docs.chef.io/dsl_recipe.html#value-for-platform)-Methode von Chef eine einfachere Lösung als `if-elsif-else`. Mit dem folgenden Rezept wird das Verzeichnis `/srv/www/shared` auf CentOS-Systemen, das Verzeichnis `/srv/www/data` auf Ubuntu-Systemen und das Verzeichnis `/srv/www/config` auf allen anderen Systemen erstellt.

```
data_dir = value_for_platform(
  "centos" => { "default" => "/srv/www/shared" },
  "ubuntu" => { "default" => "/srv/www/data" },
  "default" => "/srv/www/config"
)
directory data_dir do
  mode 0755
  owner 'root'
  group 'root'
  recursive true
  action :create
end
```

`value_for_platform` weist den entsprechenden Pfad für `data_dir` zu und die `directory`-Ressource nutzt diesen Wert für die Verzeichniserstellung.

**So führen Sie das Beispielrezept aus**

1. Falls die Instance noch aktiv ist, fahren Sie sie mit `kitchen destroy` herunter.

1. Ersetzen Sie den Code in `default.rb` durch den Beispiel-Code.

1. Führen Sie `kitchen converge` aus und melden Sie sich anschließend an den einzelnen Instances an, um zu prüfen, ob die entsprechenden Verzeichnisse vorhanden sind.

# Beispiel 5: Verwenden von Attributen
<a name="cookbooks-101-basics-attributes"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Für die Rezepte in den vorherigen Abschnitten wurden stets fest programmierte Werte verwendet, außer für die Plattform. Diese Methode kann ungünstig sein, z. B. wenn Sie denselben Wert in mehreren Rezepten verwenden möchten. Sie können Werte getrennt von Rezepten definieren, indem Sie eine Attributdatei in das Rezeptbuch einbinden.

Eine Attributdatei ist eine Ruby-Anwendung, mit der Werte für ein oder mehrere Attribute zugewiesen werden. Die Datei muss im Rezeptbuch-Ordner `attributes` sein. Chef bindet die Attribute in das Knotenobjekt ein, sodass alle Rezepte diese Attributwerte durch Referenzierung des Attributs verwenden können. In diesem Thema wird gezeigt, wie Sie das Rezept aus [Iteration](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-iteration) für die Nutzung von Attributen anpassen. Hier ist zu Referenzzwecken das ursprüngliche Rezept.

```
[ "/srv/www/config", "/srv/www/shared" ].each do |path|
  directory path do
    mode 0755
    owner 'root'
    group 'root'
    recursive true
    action :create
  end
end
```

Nachfolgend werden Attribute für Unterverzeichnisnamen, Modus, Besitzer und Gruppenwerte definiert.

```
default['createdir']['shared_dir'] = 'shared'
default['createdir']['config_dir'] = 'config'
default['createdir']['mode'] = 0755
default['createdir']['owner'] = 'root'
default['createdir']['group'] = 'root'
```

Beachten Sie Folgendes:
+ Jede Definition beginnt mit einem *Attributtyp*.

  Wenn ein Attribut mehr als einmal definiert ist — vielleicht in verschiedenen Attributdateien — gibt der Attributtyp die Priorität des Attributs an, die bestimmt, welche Definition in das Knotenobjekt aufgenommen wird. Weitere Informationen finden Sie unter [Priorität von Attributen](workingcookbook-attributes-precedence.md). Alle Definitionen in diesem Beispiel weisen den Attributtyp `default` auf, der üblicherweise für diesen Zweck verwendet wird.
+ Die Attribute haben verschachtelte Namen.

  Das Knotenobjekt ist im Wesentlichen eine Hash-Tabelle, die beliebig tief verschachtelt werden kann. Daher lassen sich auch Attributnamen verschachteln, was gängige Praxis ist. Diese Attributdatei folgt der Standardvorgehensweise und verwendet eine verschachtelte Datei mit dem Rezeptbuch-Namen `createdir` als erstes Element.

Hier wird "createdir" als erstes Element verwendet, weil bei der Chef-Ausführung die Attribute aus allen Rezeptbüchern in das Knotenobjekt eingebunden werden. Bei OpsWorks Stacks enthält das Knotenobjekt zusätzlich zu allen von Ihnen definierten Attributen eine große Anzahl von Attributen aus den [integrierten Kochbüchern](https://github.com/aws/opsworks-cookbooks). Durch das Einbeziehen des Rezeptbuch-Namens in den Attributnamen werden Namenskonflikte mit Attributen aus anderen Rezeptbüchern vermieden. Dies gilt besonders für Attributnamen wie `port` oder `user`. Vergeben Sie keine Attributnamen wie z. B. [`[:apache2][:user]`](attributes-recipes-apache.md#attributes-recipes-apache-user), außer Sie möchten den Attributwert überschreiben. Weitere Informationen finden Sie unter [Verwenden von benutzerdefinierten Rezeptbuchattributen](workingcookbook-cookbook-attributes.md).

Im folgenden Beispiel wird das ursprüngliche Rezept mit Attributen anstelle von fest programmierten Werten gezeigt.

```
[ "/srv/www/#{node['createdir']['shared_dir']}", "/srv/www/#{node['createdir']['config_dir']}" ].each do |path|
  directory path do
    mode node['createdir']['mode']
    owner node['createdir']['owner']
    group node['createdir']['group']
    recursive true
    action :create
  end
end
```

**Anmerkung**  
Wenn Sie einen Attributwert in eine Zeichenfolge einbinden möchten, umschließen Sie diesen mit `#{}`. Im vorigen Beispiel wird "shared" mit `#{node['createdir']['shared_dir']}` zu "/srv/www/" hinzugefügt.

**So führen Sie das Rezept aus**

1. Führen Sie `kitchen destroy` aus, damit Sie mit einer neuen Instance beginnen können.

1. Ersetzen Sie den Code in `recipes/default.rb` durch das vorige Rezeptbeispiel.

1. Erstellen Sie für `createdir` das Unterverzeichnis `attributes` und fügen Sie die Datei `default.rb` mit den Attributdefinitionen hinzu.

1. Bearbeiten Sie `.kitchen.yml`, um CentOS aus der Liste der Plattformen zu entfernen.

1. Führen Sie `kitchen converge` aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob `/srv/www/shared` und `/srv/www/config` vorhanden sind.

**Anmerkung**  
Bei OpsWorks Stacks bietet die Definition von Werten als Attribute einen zusätzlichen Vorteil. Sie können [benutzerdefiniertes JSON](workingstacks-json.md) verwenden, um diese Werte pro Stack oder sogar pro Bereitstellung zu überschreiben. Dies kann in vielen Fällen sinnvoll sein, z. B. in den folgenden:  
Sie können das Verhalten Ihrer Rezepte anpassen, wie z. B. die Konfigurationseinstellungen oder Benutzernamen, ohne das Rezeptbuch zu verändern.  
Beispielsweise können Sie dasselbe Rezeptbuch für unterschiedliche Stacks einsetzen und die wichtigsten Konfigurationseinstellungen für einen bestimmten Stack mit den benutzerdefinierten JSON-Daten angeben. Auf diese Weise müssen Sie weder die Zeit noch den Aufwand für eine Anpassung des Rezeptbuchs aufbringen noch für jeden Stack ein anderes Rezeptbuch verwenden.
Es ist nicht nötig, potenziell vertrauliche Informationen (wie z. B. Datenbank-Passwörter) im Rezeptbuch-Repository zu hinterlegen.  
Stattdessen können Sie mittels eines Attributs einen Standardwert festlegen und dann mit den benutzerdefinierten JSON-Daten diesen Wert mit dem echten Wert überschreiben.
Weitere Informationen zur Verwendung der benutzerdefinierten JSON-Daten zum Überschreiben von Attributen finden Sie unter [Überschreiben der Attribute](workingcookbook-attributes.md).

Die Attributdatei hat den Namen `default.rb`, da es sich um eine (wenn auch sehr einfache) Ruby-Anwendung handelt. Das heißt, Sie können beispielsweise mithilfe der Bedingungslogik die Attributwerte auf Basis des Betriebssystems angeben. Unter [Bedingungslogik](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-conditional) haben Sie einen anderen Unterverzeichnisnamen für die verschiedenen Linux-Familien im Rezept angegeben. Wenn Sie eine Attributdatei nutzen, können Sie stattdessen die Bedingungslogik in die Attributdatei einbinden.

In der folgenden Attributdatei wird mit `value_for_platform` ein anderer `['shared_dir']`-Attributwert auf Basis des Betriebssystems angegeben. Für andere Bedingungen können Sie die `if-elsif-else`-Logik von Ruby oder eine `case`-Anweisung verwenden.

```
data_dir = value_for_platform(
  "centos" => { "default" => "shared" },
  "ubuntu" => { "default" => "data" },
  "default" => "user_data"
)
default['createdir']['shared_dir'] = data_dir
default['createdir']['config_dir'] = "config"
default['createdir']['mode'] = 0755
default['createdir']['owner'] = 'root'
default['createdir']['group'] = 'root'
```

**So führen Sie das Rezept aus**

1. Führen Sie `kitchen destroy` aus, damit Sie mit einer neuen Instance beginnen können.

1. Ersetzen Sie den Code in `attributes/default.rb` durch das vorherige Beispiel.

1. Bearbeiten Sie `.kitchen.yml` und fügen Sie wie unter [Bedingungslogik](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-conditional) beschrieben eine CentOS-Plattform zum Abschnitt mit den Plattformen hinzu.

1. Führen Sie `kitchen converge` aus und melden Sie sich anschließend an den Instances an, um zu prüfen, ob die Verzeichnisse vorhanden sind.

Wenn Sie fertig sind, führen Sie `kitchen destroy` aus, um die Instance zu beenden. Im nächsten Beispiel wird ein neues Rezeptbuch verwendet.

# Beispiel 6: Erstellen von Dateien
<a name="cookbooks-101-basics-files"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Nachdem Sie Verzeichnisse erstellt haben, müssen diese meist mit Konfigurationsdateien, Datendateien usw. gefüllt werden. In diesem Thema werden zwei Möglichkeiten vorgestellt, mit denen Sie Dateien auf einer Instance installieren können.

**Topics**
+ [Installieren einer Datei mithilfe eines Rezeptbuchs](#cookbooks-101-basics-files-cookbook_file)
+ [Erstellen einer Datei mithilfe einer Vorlage](#cookbooks-101-basics-files-template)

## Installieren einer Datei mithilfe eines Rezeptbuchs
<a name="cookbooks-101-basics-files-cookbook_file"></a>

Die einfachste Möglichkeit zum Installieren einer Datei auf einer Instance bietet eine [https://docs.chef.io/chef/resources.html#cookbook-file](https://docs.chef.io/chef/resources.html#cookbook-file)-Ressource, mit der eine Datei aus dem Rezeptbuch kopiert und am angegebenen Speicherort auf der Instance eingefügt wird (dies gilt für Linux- und Windows-Systeme). In diesem Beispiel wird das in [Beispiel 3: Erstellen von Verzeichnissen](cookbooks-101-basics-directories.md) verwendete Rezept erweitert, um nach der Verzeichniserstellung eine Datendatei `/srv/www/shared` hinzuzufügen. Hier ist zu Referenzzwecken das ursprüngliche Rezept.

```
directory "/srv/www/shared" do
  mode 0755
  owner 'root'
  group 'root'
  recursive true
  action :create
end
```

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `createfile` und öffnen Sie es.

1. Fügen Sie eine Datei `metadata.rb` zu `createfile` mit dem folgenden Inhalt hinzu:

   ```
   name "createfile"
   version "0.1.0"
   ```

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben und entfernen Sie CentOS aus der Liste `platforms`.

1. Fügen Sie ein Unterverzeichnis `recipes` zu `createfile` hinzu.

Die zu installierende Datei enthält folgende JSON-Daten.

```
{
  "my_name" : "myname",
  "your_name" : "yourname",
  "a_number" : 42,
  "a_boolean" : true
}
```

**So richten Sie die Datendatei ein**

1. Fügen Sie ein Unterverzeichnis `files` zu `createfile` und ein Unterverzeichnis `default` zu `files` hinzu. Alle Dateien, die Sie mit `cookbook_file` installieren, müssen in einem Unterverzeichnis von `files` sein – in diesem Beispiel in `files/default`. 
**Anmerkung**  
Falls Sie unterschiedliche Dateien für verschiedene Systeme angeben möchten, können Sie die einzelnen systemspezifischen Dateien in einem Unterordner platzieren, der nach dem jeweiligen System benannt ist (z. B. `files/ubuntu`). Von der `cookbook_file`-Ressource wird dann die geeignete systemspezifische Datei kopiert, sofern vorhanden. Andernfalls wird die Datei `default` verwendet. Weitere Informationen finden Sie unter [cookbook\$1file](https://docs.chef.io/chef/resources.html#cookbook-file).

1. Erstellen Sie eine Datei `example_data.json` mit dem JSON-Objekt aus dem vorigen Beispiel und fügen Sie sie zu Verzeichnis `files/default` hinzu.

Mit folgendem Rezept wird `example_data.json` an einen angegebenen Speicherort kopiert. 

```
directory "/srv/www/shared" do
  mode 0755
  owner 'root'
  group 'root'
  recursive true
  action :create
end

cookbook_file "/srv/www/shared/example_data.json" do
  source "example_data.json"
  mode 0644
  action :create_if_missing
end
```

Nachdem von der Verzeichnisressource das Verzeichnis `/srv/www/shared` erstellt wurde, kopiert die Ressource `cookbook_file` die Datei `example_data.json` in das Verzeichnis und legt zudem den Benutzer, die Gruppe und den Modus für die Datei fest. 

**Anmerkung**  
Mit der `cookbook_file`-Ressource wird eine neue Aktion eingeführt: `create_if_missing`. Sie könnten auch eine `create`-Aktion verwenden, aber diese würde eine vorhandene Datei überschreiben. Falls nichts überschrieben werden soll, verwenden Sie `create_if_missing`. Damit wird die Datei `example_data.json` nur installiert, wenn sie nicht bereits vorhanden ist.

**So führen Sie das Rezept aus**

1. Führen Sie `kitchen destroy` aus, damit Sie mit einer neuen Instance beginnen können.

1. Erstellen Sie die Datei `default.rb`, die das vorherige Rezept enthält, und speichern Sie diese in `recipes`.

1. Führen Sie `kitchen converge` aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei `/srv/www/shared` in `example_data.json` vorhanden ist.

## Erstellen einer Datei mithilfe einer Vorlage
<a name="cookbooks-101-basics-files-template"></a>

Die `cookbook_file`-Ressource ist für einige Zwecke sehr gut geeignet, jedoch werden von ihr alle im Rezeptbuch vorhandenen Dateien installiert. Eine [https://docs.chef.io/chef/resources.html#template](https://docs.chef.io/chef/resources.html#template)-Ressource bietet eine flexiblere Methode, um eine Datei auf einem Windows- oder Linux-System zu installieren, da die Datei dynamisch aus einer Vorlage erstellt wird. Somit können Sie die Inhalte der Datei zur Laufzeit bestimmen und bei Bedarf ändern. Beispielsweise können Sie beim Start einer Instance eine bestimmte Einstellung in der Konfigurationsdatei vorgeben und diese später ändern, wenn Sie weitere Instances zum Stack hinzufügen.

Im Beispiel wird das Rezeptbuch `createfile` so angepasst, dass mit einer `template`-Ressource eine leicht abgewandelte Version von `example_data.json` installiert wird.

So sieht die installierte Datei aus.

```
{
  "my_name" : "myname",
  "your_name" : "yourname",
  "a_number" : 42,
  "a_boolean" : true,
  "a_string" : "some string",
  "platform" : "ubuntu"
}
```

"template"-Ressourcen werden in der Regel in Verbindung mit Attributdateien verwendet, daher wird auch in diesem Beispiel eine zur Definition der folgenden Werte genutzt.

```
default['createfile']['my_name'] = 'myname'
default['createfile']['your_name'] = 'yourname'
default['createfile']['install_file'] = true
```

**So richten Sie das Rezeptbuch ein**

1. Löschen Sie das Verzeichnis `createfile` und dessen Inhalte aus dem Rezeptbuch `files`.

1. Fügen Sie das Unterverzeichnis `attributes` zu `createfile` hinzu. Fügen Sie außerdem die Datei `default.rb` mit den vorherigen Attributdefinitionen zu `attributes` hinzu.

Bei einer Vorlage handelt es sich um eine `.erb`-Datei, die im Grunde genommen eine Kopie der letzten Datei ist, in der einige Inhalte durch Platzhalter dargestellt werden. Bei der Dateierstellung mithilfe der `template`-Ressource werden die Vorlageninhalte in die angegebene Datei kopiert und die Platzhalter mit den zugewiesenen Werten überschrieben. Hier ist die Vorlage für `example_data.json`.

```
{
  "my_name" : "<%= node['createfile']['my_name'] %>",
  "your_name" : "<%= node['createfile']['your_name'] %>",
  "a_number" : 42,
  "a_boolean" : <%= @a_boolean_var %>,
  "a_string" : "<%= @a_string_var %>",
  "platform" : "<%= node['platform'] %>"
}
```

Die Werte `<%=...%>` sind die Platzhalter.
+ `<%=node[...]%>` stellt den Wert eines Knotenattributs dar.

  In diesem Beispiel ist der Wert "your\$1name" ein Platzhalter für einen Attributwert aus der Attributdatei des Rezeptbuchs.
+ `<%=@...%>` stellt den Wert einer Variable dar, die in der "template"-Ressource definiert ist (wird später erläutert).

**So erstellen Sie die Vorlagendatei**

1. Fügen Sie ein Unterverzeichnis `templates` zu dem Rezeptbuch `createfile` und ein Unterverzeichnis `default` zu `templates` hinzu.
**Anmerkung**  
Das Verzeichnis `templates` funktioniert auf die gleiche Weise wie das Verzeichnis `files`. Sie können systemspezifische Vorlagen in einem Unterverzeichnis, das z. B. wie `ubuntu` nach dem jeweiligen System benannt ist, speichern. Von der `template`-Ressource wird dann die geeignete systemspezifische Datei genutzt, sofern vorhanden. Andernfalls wird die Vorlage `default` verwendet.

1. Erstellen Sie eine Datei namens `example_data.json.erb` und legen Sie sie in das Verzeichnis `templates/default`. Der Vorlagenname ist beliebig wählbar, wird aber durch die Dateinamenerweiterung `.erb` (einschließlich anderer Erweiterungen) gekennzeichnet. 

Das folgende Rezept verwendet eine `template`-Ressource, um `/srv/www/shared/example_data.json` zu erstellen. 

```
directory "/srv/www/shared" do
  mode 0755
  owner 'root'
  group 'root'
  recursive true
  action :create
end

template "/srv/www/shared/example_data.json" do
  source "example_data.json.erb"
  mode 0644
  variables(
    :a_boolean_var => true,
    :a_string_var => "some string"
  )
  only_if {node['createfile']['install_file']}
end
```

Von der `template`-Ressource wird mithilfe einer Vorlage die Datei `example_data.json` erstellt und in `/srv/www/shared` installiert.
+ Der Vorlagenname `/srv/www/shared/example_data.json` gibt den Pfad und den Namen der installierten Datei an.
+ Das `source`-Attribut gibt die Vorlage an, mit der die Datei erstellt wurde.
+ Das `mode`-Attribut gibt den Modus der installierten Datei an.
+ Die Ressource definiert die beiden Variablen `a_boolean_var` und `a_string_var`. 

  Wenn die Datei `example_data.json` von der Ressource erstellt wird, werden die Variablenplatzhalter in der Vorlage mit den entsprechenden Werten aus der Ressource überschrieben. 
+ Mit dem `only_if` *-Wächterattribut* wird die Ressource angewiesen, die Datei nur zu erstellen, sofern `['createfile']['install_file']` auf den Wert `true` gesetzt ist.

**So führen Sie das Rezept aus**

1. Führen Sie `kitchen destroy` aus, damit Sie mit einer neuen Instance beginnen können.

1. Ersetzen Sie den Code in `recipes/default.rb` durch das vorherige Beispiel.

1. Führen Sie `kitchen converge` aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei in `/srv/www/shared` mit dem korrekten Inhalt vorhanden ist.

Wenn Sie fertig sind, führen Sie `kitchen destroy` aus und fahren damit die Instance herunter. Im nächsten Abschnitt wird ein neues Rezeptbuch verwendet.

# Beispiel 7: Ausführen von Befehlen und Skripts
<a name="cookbooks-101-basics-commands"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Service hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Chef-Ressourcen können zahlreiche Aufgaben auf Instances ausführen, aber gelegentlich ist es sinnvoller, einen Shell-Befehl oder ein Skript zu verwenden. Das ist beispielsweise der Fall, wenn Sie bereits Skripts für bestimmte Aufgaben einsetzen. Dann ist es einfacher, diese weiterzuverwenden, anstatt neuen Code zu implementieren. In diesem Abschnitt erfahren Sie, wie Befehle oder Skripts auf einer Instance ausgeführt werden. 

**Topics**
+ [Ausführen von Befehlen](#cookbooks-101-basics-commands-script)
+ [Ausführen von Skripts](#cookbooks-101-basics-commands-execute)

## Ausführen von Befehlen
<a name="cookbooks-101-basics-commands-script"></a>

Die [https://docs.chef.io/chef/resources.html#script](https://docs.chef.io/chef/resources.html#script)-Ressource kann einen oder mehrere Befehle ausführen. Sie unterstützt die Befehlsinterpreter csh, bash, Perl, Python und Ruby, sodass sie sowohl auf Linux- als auch auf Windows-Systemen eingesetzt werden kann (sofern die entsprechenden Befehlsinterpreter installiert sind). In diesem Thema wird gezeigt, wie ein einfacher bash-Befehl auf einer Linux-Instance ausgeführt wird. Chef unterstützt zudem [powershell\$1script](https://docs.chef.io/chef/resources.html#powershell-script) und [batch](https://docs.chef.io/chef/resources.html#batch)-Ressourcen für die Skriptausführung auf Windows. Weitere Informationen finden Sie unter [Ein PowerShell Windows-Skript ausführen](cookbooks-101-opsworks-opsworks-powershell.md). 

**Dies sind Ihre ersten Schritte**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `script` und öffnen Sie es.

1. Fügen Sie eine Datei `metadata.rb` zu `script` mit dem folgenden Inhalt hinzu:

   ```
   name "script"
   version "0.1.0"
   ```

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben und entfernen Sie CentOS aus der Liste `platforms`.

1. Erstellen Sie in `script` ein Verzeichnis namens `recipes`.

Sie können Befehle direkt mit der `script`-Ressource ausführen, aber Chef unterstützt auch eine Reihe von Ressourcenversionen, die auf bestimmte Befehlsinterpreter ausgerichtet und nach diesen benannt sind. Im folgenden Rezept wird ein einfaches bash-Skript mithilfe einer [https://docs.chef.io/chef/resources.html#bash](https://docs.chef.io/chef/resources.html#bash)-Ressource ausgeführt.

```
bash "install_something" do
  user "root"
  cwd "/tmp"
  code <<-EOH
    touch somefile
  EOH
  not_if do
    File.exists?("/tmp/somefile")
  end
end
```

Die `bash`-Ressource ist wie folgt konfiguriert.
+ Sie verwendet die `run`-Standardaktion zur Ausführung der Befehle im `code`-Block.

  In diesem Beispiel ist nur ein einziger Befehl (`touch somefile`) vorhanden, aber ein `code`-Block kann mehrere Befehle enthalten.
+ Das `user`-Attribut gibt den Benutzer an, der den Befehl ausführt.
+ Das `cwd`-Attribut gibt das Arbeitsverzeichnis an.

  In diesem Beispiel wird von `touch` eine Datei im Verzeichnis `/tmp` erstellt.
+ Das `not_if`-Wächterattribut weist die Ressource an, keine Aktion auszuführen, wenn die Datei bereits vorhanden ist.

**So führen Sie das Rezept aus**

1. Erstellen Sie die Datei `default.rb`, die den vorherigen Beispiel-Code enthält, und speichern Sie diese in `recipes`.

1. Führen Sie `kitchen converge` aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei in `/tmp` vorhanden ist.

## Ausführen von Skripts
<a name="cookbooks-101-basics-commands-execute"></a>

Die `script`-Ressource ist sehr praktisch, insbesondere, wenn Sie nur einen oder zwei Befehle ausführen möchten. In vielen Fällen ist es jedoch sinnvoller, das Skript in einer Datei zu speichern und diese auszuführen. Mit der [https://docs.chef.io/chef/resources.html#execute](https://docs.chef.io/chef/resources.html#execute)-Ressource wird eine angegebene ausführbare Datei, einschließlich Skriptdateien, auf Linux- oder Windows-Systemen ausgeführt. In diesem Thema wird das Rezeptbuch `script` aus dem vorherigen Beispiel angepasst, um mithilfe von `execute` ein einfaches Shell-Skript auszuführen. Sie können das Beispiel problemlos für komplexere Skripte oder andere ausführbare Dateitypen erweitern.

**So richten Sie die Skriptdatei ein**

1. Fügen Sie ein Unterverzeichnis `files` zu `script` und ein Unterverzeichnis `default` zu `files` hinzu.

1. Erstellen Sie eine Datei namens `touchfile`, die Folgendes enthält, und fügen Sie sie zu `files/default` hinzu. In diesem Beispiel wird ein gängiger bash-Interpreter genutzt, aber Sie können bei Bedarf auch einen Interpreter wählen, der für Ihre Shell-Umgebung geeignet ist.

   ```
   #!/usr/bin/env bash
   touch somefile
   ```

   Die Skriptdatei kann beliebig viele Befehle enthalten. In diesem Beispielskript ist aus Gründen der Übersichtlichkeit nur ein `touch`-Befehl enthalten.

Mit dem folgenden Rezept wird das Skript ausgeführt. 

```
cookbook_file "/tmp/touchfile" do
  source "touchfile"
  mode 0755
end

execute "touchfile" do
  user "root"
  cwd "/tmp"
  command "./touchfile"
end
```

Von der Ressource `cookbook_file` wird die Skriptdatei in `/tmp` kopiert, zudem wird der Modus festgelegt, damit die Datei ausführbar ist. Die `execute`-Ressource führt dann die Datei wie folgt aus:
+ Das `user`-Attribut gibt den Benutzer des Befehls an (in diesem Beispiel `root`).
+ Das Attribut `cwd` gibt das Arbeitsverzeichnis an (in diesem Beispiel `/tmp`).
+ Das `command`-Attribut gibt das auszuführende Skript an (in diesem Beispiel `touchfile`), das im Arbeitsverzeichnis gespeichert ist.

**So führen Sie das Rezept aus**

1. Ersetzen Sie den Code in `recipes/default.rb` durch das vorherige Beispiel.

1. Führen Sie `kitchen converge` aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob `/tmp` nun die Skriptdatei, den Modus 0755 und `somefile` enthält.

Wenn Sie fertig sind, führen Sie `kitchen destroy` aus und fahren damit die Instance herunter. Im nächsten Abschnitt wird ein neues Rezeptbuch verwendet.

# Beispiel 8: Verwalten von Services
<a name="cookbooks-101-basics-services"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Service hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Paketen wie z. B. Anwendungsservern ist in der Regel ein Service zugeordnet, der gestartet, gestoppt, neu gestartet usw. werden muss. Beispielsweise müssen Sie den Tomcat-Service nach der Paketinstallation und nach beendetem Instance-Start starten sowie nach jeder Änderung der Konfigurationsdatei neu starten. In diesem Thema werden die Grundlagen für die Verwaltung eines Service auf einer Linux-Instance am Beispiel eines Tomcat-Anwendungsservers dargelegt. Die "service"-Ressource funktioniert auf Windows-Instances auf dieselbe Weise, allerdings gibt es ein paar kleine Unterschiede. Weitere Informationen finden Sie unter [https://docs.chef.io/chef/resources.html#service](https://docs.chef.io/chef/resources.html#service).

**Anmerkung**  
Im Beispiel wird eine sehr minimale Tomcat-Installation ausgeführt. Sie reicht aus, um die Grundlagen für die Verwendung einer `service`-Ressource zu veranschaulichen. Ein Beispiel für die Rezeptimplementierung auf einem Tomcat-Server mit mehr Funktionen finden Sie unter [Erstellen eines benutzerdefinierten Tomcat-Server-Layers](create-custom.md).

**Topics**
+ [Definieren und Starten eines Service](#cookbooks-101-basics-services-service)
+ [Verwenden von "notifies" für den Start oder Neustart eines Service](#cookbooks-101-basics-services-notifies)

## Definieren und Starten eines Service
<a name="cookbooks-101-basics-services-service"></a>

In diesem Abschnitt werden die Grundlagen zum Definieren und Starten eines Service erläutert.

**Dies sind Ihre ersten Schritte**

1. Erstellen Sie ein Verzeichnis im Verzeichnis `opsworks_cookbooks` namens `tomcat` und öffnen Sie es.

1. Fügen Sie eine Datei `metadata.rb` zu `tomcat` mit dem folgenden Inhalt hinzu:

   ```
   name "tomcat"
   version "0.1.0"
   ```

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben und entfernen Sie CentOS aus der Liste `platforms`.

1. Fügen Sie ein Unterverzeichnis `recipes` zu `tomcat` hinzu.

Verwenden Sie eine [https://docs.chef.io/chef/resources.html#service](https://docs.chef.io/chef/resources.html#service)-Ressource für die Serviceverwaltung. Mit dem folgenden Standardrezept wird Tomcat installiert und der Service gestartet.

```
execute "install_updates" do
  command "apt-get update"
end

package "tomcat7" do
    action :install
end

include_recipe 'tomcat::service'

service 'tomcat' do
  action :start
end
```

Vom Rezept werden folgende Schritte ausgeführt:
+ Die `execute`-Ressource führt `apt-get update` aus, um aktuelle Systemupdates zu installieren.

  Für die in diesem Beispiel verwendete Ubuntu-Instanz müssen Sie die Updates installieren, bevor Sie Tomcat installieren. Bei anderen Systemen können die Anforderungen abweichen.
+ Die `package`-Ressource installiert Tomcat 7.
+ Das enthaltene `tomcat::service`-Rezept definiert den Service (wird später erläutert).
+ Die `service`-Ressource startet den Tomcat-Service.

  Mit dieser Ressource können Sie auch andere Befehle ausgeben, z. B. den Service stoppen und neu starten.

Im folgenden Beispiel finden Sie das `tomcat::service`-Rezept.

```
service 'tomcat' do
  service_name "tomcat7"
  supports :restart => true, :reload => false, :status => true
  action :nothing
end
```

Mit diesem Rezept wird die Tomcat-Servicedefinition wie folgt erstellt: 
+ Der Ressourcenname `tomcat` wird von anderen Rezepten als Referenz auf den Service verwendet.

  Beispielsweise wird `default.rb` von `tomcat` für den Servicestart referenziert.
+ Die `service_name`-Ressource gibt den Servicenamen an. 

  Wenn Sie die Services auf der Instance auflisten, wird der Tomcat-Service mit dem Namen "tomcat7" angegeben.
+ `supports` gibt an, wie Chef die Befehle `restart`, `reload` und `status` des Service verwaltet.
  + Der Wert `true` gibt an, dass Chef das "init"-Skript oder einen anderen Serviceanbieter zum Ausführen des Befehls verwenden kann.
  + `false` gibt an, dass Chef versuchen muss, den Befehl anderweitig auszuführen.

Beachten Sie, dass `action` auf `:nothing` festgelegt ist. Damit wird die Ressource angewiesen, keine Aktion auszuführen. Die "service"-Ressource unterstützt Aktionen wie `start` und `restart`. Dieses Rezeptbuch folgt jedoch der Standardvorgehensweise und verwendet eine Servicedefinition, bei der keine Aktion erfolgt. Der Service wird anderweitig gestartet bzw. neu gestartet. Jedes Rezept, über das ein Service gestartet oder neu gestartet wird, muss diesen zunächst definieren. Die einfachste Methode ist daher, die Servicedefinition in einem separaten Rezept zu speichern und dieses bei Bedarf in andere Rezepte einzubinden.

**Anmerkung**  
Der Einfachheit halber wird im Standardrezept dieses Beispiels eine `service`-Ressource verwendet, um den Service nach Ausführung der Servicedefinition zu starten. In einer Produktionsimplementierung wird ein Service in der Regel mit `notifies` gestartet oder neu gestartet (wird später erläutert).

**So führen Sie das Rezept aus**

1. Erstellen Sie die Datei `default.rb`, die das Standardrezeptbeispiel enthält, und speichern Sie diese in `recipes`.

1. Erstellen Sie die Datei `service.rb`, die das Servicedefinitionsbeispiel enthält, und speichern Sie diese in `recipes`.

1. Führen Sie `kitchen converge` aus, melden Sie sich anschließend an der Instance an und führen Sie den folgenden Befehl aus, um zu prüfen, ob der Service ausgeführt wird.

   ```
   sudo service tomcat7 status
   ```

**Anmerkung**  
Falls Sie `service.rb` getrennt von `default.rb` ausführen möchten, müssen Sie `.kitchen.yml` ändern und `tomcat::service` zur Ausführungsliste hinzufügen. Wenn Sie ein Rezept einbinden, wird dessen Code vor der Rezeptausführung jedoch in das übergeordnete Rezept übernommen. Daher ist `service.rb` im Grunde genommen ein Teil von `default.rb` und erfordert keinen eigenen Eintrag in der Ausführungsliste.

## Verwenden von "notifies" für den Start oder Neustart eines Service
<a name="cookbooks-101-basics-services-notifies"></a>

In einer Produktionsimplementierung wird ein Service in der Regel nicht mit `service` gestartet oder neu gestartet. Stattdessen wird `notifies` zu verschiedenen Ressourcen hinzugefügt. Wenn Sie beispielsweise den Service nach einer Änderung der Konfigurationsdatei neu starten möchten, binden Sie `notifies` in die zugehörige `template`-Ressource ein. Die Verwendung von `notifies` bietet im Vergleich zur `service`-Ressource für den expliziten Neustart des Service die folgenden Vorteile. 
+ Das `notifies`-Element startet den Service nur dann neu, wenn die zugehörige Konfigurationsdatei geändert wurde. Das Risiko eines unnötigen Serviceneustarts fällt damit weg. 
+ Chef startet den Service höchstens einmal am Ende jeder Ausführung neu, unabhängig von der `notifies`-Anzahl pro Ausführung.

  Beispielsweise können in der Chef-Ausführung mehrere "template"-Ressourcen enthalten sein, von denen jede eine andere Konfigurationsdatei ändert und nach der Dateiänderung einen Neustart des Service erfordert. Sie möchten aber in der Regel den Service nur einmal neu starten, und zwar am Ende der Chef-Ausführung. Andernfalls wird möglicherweise ein Service neu gestartet, der nach dem vorherigen Neustart noch nicht wieder betriebsbereit ist, und das könnte zu Fehlern führen.

In diesem Beispiel wird `tomcat::default` angepasst, um eine `template`-Ressource einzubinden, die den Service mithilfe von `notifies` neu startet. Für ein realistisches Beispiel würden Sie eine "template"-Ressource nutzen, die eine benutzerdefinierte Version von einer Tomcat-Konfigurationsdatei erstellt, aber diese sind meist sehr lang und komplex. Der Einfachheit halber wird in diesem Beispiel die "template"-Ressource aus [Erstellen einer Datei mithilfe einer Vorlage](cookbooks-101-basics-files.md#cookbooks-101-basics-files-template) verwendet. Sie hat keinerlei Verbindung zu Tomcat, bietet aber eine einfache Möglichkeit, die Verwendung von `notifies` darzustellen. Ein Beispiel für die Vorlagenverwendung beim Erstellen von Tomcat-Konfigurationsdateien finden Sie unter [Einrichtungsrezepte](create-custom-setup.md).

**So richten Sie das Rezeptbuch ein**

1. Fügen Sie ein Unterverzeichnis `templates` zu `tomcat` und ein Unterverzeichnis `default` zu `templates` hinzu.

1. Kopieren Sie die Vorlage `example_data.json.erb` aus dem Rezeptbuch `createfile` in das Verzeichnis `templates/default`.

1. Fügen Sie ein Unterverzeichnis `attributes` zu `tomcat` hinzu.

1. Kopieren Sie die Attributdatei `default.rb` aus dem Rezeptbuch `createfile` in das Verzeichnis `attributes`.

Im folgenden Rezept wird `notifies` für den Neustart des Tomcat-Service verwendet.

```
execute "install_updates" do
  command "apt-get update"
end

package "tomcat7" do
    action :install
end

include_recipe 'tomcat::service'

service 'tomcat' do
  action :enable
end

directory "/srv/www/shared" do
  mode 0755
  owner 'root'
  group 'root'
  recursive true
  action :create
end

template "/srv/www/shared/example_data.json" do
  source "example_data.json.erb"
  mode 0644
  variables(
    :a_boolean_var => true,
    :a_string_var => "some string"
  )
  only_if {node['createfile']['install_file']}
  notifies :restart, resources(:service => 'tomcat')
end
```

Im Beispiel wird das Rezept aus [Erstellen einer Datei mithilfe einer Vorlage](cookbooks-101-basics-files.md#cookbooks-101-basics-files-template) mit dem Rezept aus dem vorherigen Abschnitt zusammengeführt. Dabei gibt es zwei wichtige Änderungen:
+ Die `service`-Ressource ist nach wie vor vorhanden, erfüllt aber nun einen anderen Zweck.

  Die `:enable`-Aktion aktiviert den Tomcat-Service beim Start.
+ In die "template"-Ressource ist `notifies` eingebunden, sodass der Tomcat-Service bei einer Änderung der Datei `example_data.json` neu gestartet wird.

  Auf diese Weise wird sichergestellt, dass der Service bei der Tomcat-Installation gestartet und nach jeder Konfigurationsänderung neu gestartet wird.

**So führen Sie das Rezept aus**

1. Führen Sie `kitchen destroy` aus, damit Sie mit einer neuen Instance beginnen können.

1. Ersetzen Sie den Code in `default.rb` durch das vorherige Beispiel.

1. Führen Sie `kitchen converge` aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob der Service ausgeführt wird.

**Anmerkung**  
Wenn Sie einen Service neu starten möchten, aber das Rezept keine Ressource wie z. B. `template` enthält, die `notifies` unterstützt, können Sie stattdessen eine `execute`-Dummy-Ressource nutzen. Beispiel  

```
execute 'trigger tomcat service restart' do
  command 'bin/true'
  notifies :restart, resources(:service => 'tomcat')
end
```
Die `execute`-Ressource muss ein `command`-Attribut aufweisen, auch wenn Sie die Ressource nur zur Ausführung von `notifies` einsetzen. In diesem Beispiel wird diese Anforderung durch die Ausführung von `/bin/true` umgangen. Dieser Shell-Befehl gibt einfach einen Erfolgscode zurück.

# Beispiel 9: Verwenden von EC2 Amazon-Instances
<a name="cookbooks-101-basics-ec2"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Service hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Bis zu diesem Zeitpunkt haben Sie Instanzen lokal in ausgeführt. VirtualBox Dies ist zwar schnell und einfach, aber Sie werden Ihre Rezepte irgendwann auf einer EC2 Amazon-Instanz testen wollen. Insbesondere wenn Sie Rezepte auf Amazon Linux ausführen möchten, ist dies nur bei Amazon verfügbar EC2. Sie können ein ähnliches System wie CentOS für die vorläufige Implementierung und das Testen verwenden, aber die einzige Möglichkeit, Ihre Rezepte auf Amazon Linux vollständig zu testen, ist eine EC2 Amazon-Instance. 

In diesem Thema wird gezeigt, wie Rezepte auf einer EC2 Amazon-Instance ausgeführt werden. Dafür verwenden Sie Test Kitchen und Vagrant auf dieselbe Weise wie in den vorherigen Abschnitten, allerdings gibt es zwei Unterschiede: 
+ Anstelle von Vagrant wird [https://rubygems.org/gems/kitchen-ec2](https://rubygems.org/gems/kitchen-ec2) als Treiber eingesetzt.
+ Die `.kitchen.yml` Datei des Kochbuchs muss mit den Informationen konfiguriert werden, die zum Starten der EC2 Amazon-Instance erforderlich sind.

**Anmerkung**  
Alternativ können Sie das Vagrant-Plug-in `vagrant-aws` verwenden. Weitere Informationen finden Sie unter [Vagrant AWS Provider](https://github.com/mitchellh/vagrant-aws).

Sie benötigen AWS-Anmeldeinformationen, um eine EC2 Amazon-Instance zu erstellen. Falls Sie noch kein AWS-Konto haben, können Sie wie folgt eines anlegen. 

## Melden Sie sich für eine an AWS-Konto
<a name="sign-up-for-aws"></a>

Wenn Sie noch keine haben AWS-Konto, führen Sie die folgenden Schritte aus, um eine zu erstellen.

**Um sich für eine anzumelden AWS-Konto**

1. Öffnen Sie [https://portal.aws.amazon.com/billing/die Anmeldung.](https://portal.aws.amazon.com/billing/signup)

1. Folgen Sie den Online-Anweisungen.

   Während der Anmeldung erhalten Sie einen Telefonanruf oder eine Textnachricht und müssen einen Verifizierungscode über die Telefontasten eingeben.

   Wenn Sie sich für eine anmelden AWS-Konto, *Root-Benutzer des AWS-Kontos*wird eine erstellt. Der Root-Benutzer hat Zugriff auf alle AWS-Services und Ressourcen des Kontos. Als bewährte Sicherheitsmethode weisen Sie einem Benutzer Administratorzugriff zu und verwenden Sie nur den Root-Benutzer, um [Aufgaben auszuführen, die Root-Benutzerzugriff erfordern](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS sendet Ihnen nach Abschluss des Anmeldevorgangs eine Bestätigungs-E-Mail. Du kannst jederzeit deine aktuellen Kontoaktivitäten einsehen und dein Konto verwalten, indem du zu [https://aws.amazon.com/](https://aws.amazon.com/)gehst und **Mein Konto** auswählst.

## Erstellen eines Benutzers mit Administratorzugriff
<a name="create-an-admin"></a>

Nachdem Sie sich für einen angemeldet haben AWS-Konto, sichern Sie Ihren Root-Benutzer des AWS-Kontos AWS IAM Identity Center, aktivieren und erstellen Sie einen Administratorbenutzer, sodass Sie den Root-Benutzer nicht für alltägliche Aufgaben verwenden.

**Sichern Sie Ihre Root-Benutzer des AWS-Kontos**

1.  Melden Sie sich [AWS-Managementkonsole](https://console.aws.amazon.com/)als Kontoinhaber an, indem Sie **Root-Benutzer** auswählen und Ihre AWS-Konto E-Mail-Adresse eingeben. Geben Sie auf der nächsten Seite Ihr Passwort ein.

   Hilfe bei der Anmeldung mit dem Root-Benutzer finden Sie unter [Anmelden als Root-Benutzer](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) im *AWS-Anmeldung -Benutzerhandbuch* zu.

1. Aktivieren Sie die Multi-Faktor-Authentifizierung (MFA) für den Root-Benutzer.

   Anweisungen finden Sie unter [Aktivieren eines virtuellen MFA-Geräts für Ihren AWS-Konto Root-Benutzer (Konsole)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) im *IAM-Benutzerhandbuch*.

**Erstellen eines Benutzers mit Administratorzugriff**

1. Aktivieren Sie das IAM Identity Center.

   Anweisungen finden Sie unter [Aktivieren AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html) im *AWS IAM Identity Center -Benutzerhandbuch*.

1. Gewähren Sie einem Administratorbenutzer im IAM Identity Center Benutzerzugriff.

   *Ein Tutorial zur Verwendung von IAM-Identity-Center-Verzeichnis als Identitätsquelle finden Sie IAM-Identity-Center-Verzeichnis im Benutzerhandbuch unter [Benutzerzugriff mit der Standardeinstellung konfigurieren](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html).AWS IAM Identity Center *

**Anmelden als Administratorbenutzer**
+ Um sich mit Ihrem IAM-Identity-Center-Benutzer anzumelden, verwenden Sie die Anmelde-URL, die an Ihre E-Mail-Adresse gesendet wurde, als Sie den IAM-Identity-Center-Benutzer erstellt haben.

  Hilfe bei der Anmeldung mit einem IAM Identity Center-Benutzer finden Sie [im *AWS-Anmeldung Benutzerhandbuch* unter Anmeldung beim AWS Access-Portal](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html).

**Weiteren Benutzern Zugriff zuweisen**

1. Erstellen Sie im IAM-Identity-Center einen Berechtigungssatz, der den bewährten Vorgehensweisen für die Anwendung von geringsten Berechtigungen folgt.

   Anweisungen hierzu finden Sie unter [ Berechtigungssatz erstellen](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-a-permission-set.html) im *AWS IAM Identity Center -Benutzerhandbuch*.

1. Weisen Sie Benutzer einer Gruppe zu und weisen Sie der Gruppe dann Single Sign-On-Zugriff zu.

   Eine genaue Anleitung finden Sie unter [ Gruppen hinzufügen](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) im *AWS IAM Identity Center -Benutzerhandbuch*.

Sie sollten [einen IAM-Benutzer mit Berechtigungen für den Zugriff auf Amazon erstellen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) EC2 und den Zugriff und die geheimen Schlüssel des Benutzers an einem sicheren Ort auf Ihrer Workstation speichern. Test Kitchen verwendet diese Anmeldeinformationen für die Instance-Erstellung. Am besten stellen Sie die Anmeldeinformationen für Test Kitchen bereit, indem Sie die Schlüssel den folgenden Umgebungsvariablen auf der Workstation zuweisen.

**Warnung**  
IAM-Benutzer verfügen über langfristige Anmeldeinformationen, was ein Sicherheitsrisiko darstellt. Um dieses Risiko zu minimieren, empfehlen wir, diesen Benutzern nur die Berechtigungen zu gewähren, die sie für die Ausführung der Aufgabe benötigen, und diese Benutzer zu entfernen, wenn sie nicht mehr benötigt werden.
+ AWS\$1ACCESS\$1KEY — der Zugriffsschlüssel Ihres Benutzers, der ungefähr so AKIAIOSFODNN7EXAMPLE aussehen wird.
+ AWS\$1SECRET\$1KEY — der geheime Schlüssel Ihres Benutzers, der ungefähr so aussehen wirdwJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

Auf diese Weise wird vermieden, dass Ihre Kontodaten versehentlich offengelegt werden, wenn Sie z. B. ein Projekt, das Ihre Anmeldeinformationen enthält, in ein öffentliches Repository hochladen.

**So richten Sie das Rezeptbuch ein**

1. Für die Verwendung des `kitchen-ec2`-Treibers muss das Paket `ruby-dev` auf Ihrem System installiert sein. Im folgenden Beispiel wird veranschaulicht, wie Sie das Paket mit `aptitude` auf einem Ubuntu-System installieren. 

   ```
   sudo aptitude install ruby1.9.1-dev 
   ```

1. Bei `kitchen-ec2` handelt es sich um einen Gem-Treiber, der wie folgt installiert wird:

   ```
   gem install kitchen-ec2
   ```

   Abhängig von Ihrer Workstation benötigen Sie hierfür womöglich `sudo` oder einen Ruby-Umgebungsmanager wie [RVM](https://rvm.io/). Dieses Verfahren wurde mit Version 0.8.0 des `kitchen-ec2`-Treibers getestet, jedoch gibt es inzwischen neuere Versionen. Um eine [bestimmte Version](https://rubygems.org/gems/kitchen-ec2/versions) zu installieren, führen Sie `gem install kitchen-ec2 -v <version number>` aus.

1. Sie müssen ein Amazon EC2 SSH-Schlüsselpaar angeben, das Test Kitchen verwenden kann, um eine Verbindung mit der Instance herzustellen. Wenn Sie kein EC2 Amazon-Schlüsselpaar haben, finden Sie unter [ EC2Amazon-Schlüsselpaare](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) Informationen darüber, wie Sie eines erstellen können. Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie die Instance. Das Beispiel verwendet US West (Nordkalifornien).

   Wenn Sie ein Schlüsselpaar ausgewählt haben, erstellen Sie in `opsworks_cookbooks` das Unterverzeichnis `ec2_keys` und kopieren die Datei mit dem privaten Schlüssel des Schlüsselpaars (`.pem`) in das Unterverzeichnis. Der private Schlüssel wird nur in `ec2_keys` gespeichert, um den Code ein wenig zu vereinfachen; er kann überall auf dem System gespeichert werden.

1. Erstellen Sie ein Unterverzeichnis von `opsworks_cookbooks` namens `createdir-ec2` und öffnen Sie es.

1. Fügen Sie eine Datei `metadata.rb` zu `createdir-ec2` mit dem folgenden Inhalt hinzu:

   ```
   name "createdir-ec2"
   version "0.1.0"
   ```

1. Initialisieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben. Im folgenden Abschnitt wird die Konfiguration beschrieben`.kitchen.yml`, die für EC2 Amazon-Instances erheblich komplizierter ist.

1. Fügen Sie ein Unterverzeichnis `recipes` zu `createdir-ec2` hinzu.

## .kitchen.yml für Amazon konfigurieren EC2
<a name="w2ab1c14c71b9c15c17c31c37"></a>

Sie konfigurieren `.kitchen.yml` mit den Informationen, die der `kitchen-ec2` Treiber benötigt, um eine entsprechend konfigurierte EC2 Amazon-Instance zu starten. Im Folgenden finden Sie ein Beispiel für eine `.kitchen.yml` Datei für eine Amazon Linux-Instance in der Region USA West (Nordkalifornien).

```
driver:
  name: ec2
  aws_ssh_key_id: US-East1
  region: us-west-1
  availability_zone: us-west-1c
  require_chef_omnibus: true
  security_group_ids: sg........
  subnet_id: subnet-.........
  associate_public_ip: true
  interface: dns

provisioner:
  name: chef_solo

platforms:
  -name: amazon
  driver:
    image_id: ami-xxxxxxxx
  transport:
    username: ec2-user
    ssh_key: ../ec2_keys/US-East1.pem

suites:
  - name: default
    run_list:
      - recipe[createdir-ec2::default]
    attributes:
```

In den Abschnitten `provisioner` und `suites` können Sie die Standardeinstellungen verwenden, aber für `driver` und `platforms` müssen diese angepasst werden. In diesem Beispiel werden nur die minimal erforderlichen Einstellungen angepasst, ansonsten werden Standardwerte genutzt. Eine vollständige Liste der `kitchen-ec2` Einstellungen finden Sie unter [Kitchen: :Ec2: A Test Kitchen Driver for Amazon](https://github.com/test-kitchen/kitchen-ec2). EC2

Im Beispiel werden die folgenden `driver`-Attribute festgelegt. Es wird vorausgesetzt, dass Sie den Zugriffsschlüssel und den geheimen Schlüssel Ihres Benutzers den Standardumgebungsvariablen zugewiesen haben (wie zuvor erläutert). Diese Schlüssel werden vom Treiber standardmäßig verwendet. Andernfalls müssen Sie die Schlüssel explizit deklarieren, indem Sie `aws_access_key_id` und `aws_secret_access_key` zu den `driver`-Attributen hinzufügen und auf die entsprechenden Schlüsselwerte festlegen.

**Name**  
(Erforderlich) Dieses Attribut muss auf `ec2` festgelegt werden.

**aws\$1ssh\$1key\$1id**  
(Erforderlich) Der Name des Amazon EC2 SSH-Schlüsselpaars, der `US-East1` in diesem Beispiel benannt ist. 

**transport.ssh\$1key**  
(Erforderlich) Die Datei mit dem privaten Schlüssel (`.pem`) zum Schlüssel, den Sie für `aws_ssh_key_id` angegeben haben. In diesem Beispiel heißt die Datei `US-East1.pem` und ist im Verzeichnis `../opsworks/ec2_keys` gespeichert.

**Region**  
(Erforderlich) Die AWS-Region der Instance. In dem Beispiel wird US West (Nordkalifornien) verwendet, was durch`us-west-1`) dargestellt wird.

**availability\$1zone**  
(Optional) Die Availability Zone (AZ) der Instance. Wenn Sie diese Einstellung weglassen, verwendet Test Kitchen eine standardmäßige Availability Zone für die angegebene Region, die `us-west-1b` für USA West (Nordkalifornien) gilt. Möglicherweise ist diese Standard-AZ für Ihr Konto nicht verfügbar. In dem Fall müssen Sie explizit eine Availability Zone angeben. Das für diese Beispiele verwendete Konto unterstützt `us-west-1b` nicht, daher wird `us-west-1c` im Beispiel explizit angegeben.

**require\$1chef\$1omnibus**  
Mit dem Wert `true` stellt diese Einstellung sicher, dass das Omnibus-Installationsprogramm für die Installation von `chef-client` auf allen Plattform-Instances verwendet wird.

**security\$1group\$1ids**  
(Optional) Eine Liste der Sicherheitsgruppen, die IDs auf die Instance angewendet werden sollen. Mit dieser Einstellung wird die Sicherheitsgruppe `default` für die Instance verwendet. Stellen Sie sicher, dass die für den Dateneingang festgelegten Regeln der Sicherheitsgruppe eingehende SSH-Verbindungen zulassen. Andernfalls kann Test Kitchen nicht mit der Instance kommunizieren. Wenn Sie die Sicherheitsgruppe `default` nutzen, müssen Sie diese möglicherweise entsprechend anpassen. Weitere Informationen finden Sie unter [Amazon EC2 Security Groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html).

**subnet\$1id**  
Die ID des Ziel-Subnetzes für die Instance (falls zutreffend).

**associate\$1public\$1ip**  
Sie können Amazon der Instance eine öffentliche IP-Adresse EC2 zuordnen lassen, wenn Sie über das Internet auf die Instance zugreifen möchten.

**interface**  
Der Konfigurationstyp des Host-Namens, der für den Zugriff auf die Instance verwendet wird. Gültige Werte sind `dns`, `public`, `private` oder `private_dns`. Falls Sie keinen Wert für dieses Attribut angeben, wird die Host-Namenskonfiguration von `kitchen-ec2` in folgender Reihenfolge eingerichtet. Wenn Sie dieses Attribut weglassen, wird kein Konfigurationstyp festgelegt.  

1. DNS-Name

1. Öffentliche IP-Adresse

1. Private IP-Adresse

1. Private DNS name (Privater DNS-Name)

**Wichtig**  
Anstatt Ihre Kontoanmeldeinformationen für den Zugriff und die geheimen Schlüssel zu verwenden, sollten Sie einen Benutzer erstellen und diese Anmeldeinformationen an Test Kitchen weitergeben. Weitere Informationen finden Sie unter [Bewährte Methoden für die Verwaltung von AWS-Zugriffsschlüsseln](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html).  
Achte darauf, es nicht an einem öffentlich zugänglichen Ort zu speichern, z. B. wenn du es `.kitchen.yml` in ein öffentliches Repository GitHub oder ein Bitbucket-Repository hochlädst. Dadurch könnten Ihre Anmeldeinformationen offengelegt und die Sicherheit Ihres Kontos beeinträchtigt werden.

Der `kitchen-ec2`-Treiber unterstützt standardmäßig die folgenden Plattformen:
+ ubuntu-10.04
+ ubuntu-12.04
+ ubuntu-12.10
+ ubuntu-13.04
+ ubuntu-13.10
+ ubuntu-14.04
+ centos-6.4
+ debian-7.1.0
+ windows-2012r2
+ windows-2008r2

Wenn Sie eine oder mehrere dieser Plattformen verwenden möchten, fügen Sie zu `platforms` die entsprechenden Plattformnamen hinzu. Der `kitchen-ec2`-Treiber wählt automatisch ein geeignetes AMI aus und generiert einen SSH-Benutzernamen. Sie können andere Plattformen verwenden — in diesem Beispiel wird Amazon Linux verwendet —, aber Sie müssen die folgenden Attribute explizit angeben. `platforms`

**Name**  
Der Name der Plattform. In diesem Beispiel wird Amazon Linux verwendet, folglich ist `name` auf `amazon` gesetzt.

**driver**  
Die `driver`-Attribute, zu denen die nachfolgenden zählen:  
+ `image_id`— Das AMI der Plattform, das zur angegebenen Region gehören muss. Das Beispiel verwendet `ami-ed8e9284` ein Amazon Linux-AMI aus der Region USA West (Nordkalifornien).
+ `transport.username`— Der SSH-Benutzername, den Test Kitchen für die Kommunikation mit der Instance verwenden wird.

  Verwenden Sie `ec2-user` für Amazon Linux. Andere haben AMIs möglicherweise andere Benutzernamen.

Ersetzen Sie den Code in `.kitchen.yml` durch das Beispiel und weisen Sie den kontobezogenen Attributen (wie `aws_access_key_id`) entsprechende Werte zu.

## Ausführen des Rezepts
<a name="w2ab1c14c71b9c15c17c31c39"></a>

Im Beispiel wird das Rezept aus [Iteration](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-iteration) verwendet.

**So führen Sie das Rezept aus**

1. Erstellen Sie die Datei `default.rb` mit folgendem Code und speichern Sie diese im Rezeptbuch-Ordner `recipes`.

   ```
   directory "/srv/www/shared" do
     mode 0755
     owner 'root'
     group 'root'
     recursive true
     action :create
   end
   ```

1. Führen Sie `kitchen converge` aus, um das Rezept auszuführen. Beachten Sie, dass die Ausführung dieses Befehls aufgrund der Zeit, die zum Starten und Initialisieren einer EC2 Amazon-Instance benötigt wird, länger dauert als bei den vorherigen Beispielen.

1.  Gehen Sie zur [ EC2Amazon-Konsole](https://console.aws.amazon.com/ec2/), wählen Sie die Region USA West (Nordkalifornien) aus und klicken Sie im Navigationsbereich auf **Instances**. Die neu erstellte Instance wird in der Liste angezeigt. 

1. Führen Sie `kitchen login` den Befehl aus, um sich bei der Instance anzumelden, genau wie Sie es bei Instances getan haben, die in der Instance laufen VirtualBox. Die neu erstellten Verzeichnisse werden unter `/srv` angezeigt. Für die Verbindung zur Instance können Sie auch Ihren bevorzugten SSH-Client nutzen.

# Nächste Schritte
<a name="cookbooks-101-basics-next"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

In diesem Kapitel haben Sie die Grundlagen der Implementierung von Chef-Rezeptbüchern kennengelernt, aber das ist noch lange nicht alles:
+ In den Beispielen wurde veranschaulicht, wie Sie einige der gängigen Ressourcen verwenden, aber es gibt noch zahlreiche mehr. 

  Für die vorgestellten Ressourcen wurden in den Beispielen nur ein paar der verfügbaren Attribute und Aktionen genutzt. Ausführlichere Informationen finden Sie unter [About Resources and Providers](https://docs.chef.io/resource.html).
+ In den Beispielen wurden nur die Core-Elemente eines Rezeptbuchs angewendet: `recipes`, `attributes`, `files` und `templates`.

  Rezeptbücher können noch zahlreiche andere Elemente enthalten, z. B. `libraries`, `definitions` und `specs`. Weitere Informationen finden Sie unter [Chef documentation](https://docs.chef.io).
+ In den Beispielen wurde Test Kitchen nur als gute Möglichkeit genutzt, um Instances zu starten, Rezepte auszuführen und sich an der Instance anzumelden.

  In erster Linie ist Test Kitchen aber eine Testplattform, mit der Sie viele Tests für Ihre Rezepte ausführen können. Lesen Sie die [Test Kitchen-Anleitung](https://kitchen.ci/docs/getting-started/introduction/) und lernen Sie die Testfunktionen kennen (sofern noch nicht geschehen).
+ [Implementierung von Kochbüchern für Stacks OpsWorks](cookbooks-101-opsworks.md)bietet einige fortgeschrittenere Beispiele und zeigt, wie Kochbücher für Stacks implementiert werden. OpsWorks 

# Implementierung von Kochbüchern für Stacks OpsWorks
<a name="cookbooks-101-opsworks"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

In [Rezeptbücher – Grundlagen](cookbooks-101-basics.md) haben sie Rezeptbücher und Rezepte kennengelernt. Die Beispiele in diesem Abschnitt waren vom Design her einfach und funktionieren auf jeder Instanz, die Chef unterstützt, einschließlich OpsWorks Stacks-Instanzen. Um anspruchsvollere Kochbücher für OpsWorks Stacks zu implementieren, müssen Sie in der Regel alle Vorteile der OpsWorks Stacks-Umgebung nutzen, die sich in vielerlei Hinsicht vom Standard-Chef unterscheidet.

In diesem Thema werden die Grundlagen der Implementierung von Rezepten für OpsWorks Stacks-Instanzen beschrieben. 

**Anmerkung**  
Wenn Sie mit der Implementierung von Rezeptbüchern noch nicht vertraut sind, arbeiten Sie zunächst [Rezeptbücher – Grundlagen](cookbooks-101-basics.md) durch.

**Topics**
+ [Ein Rezept auf einer OpsWorks Stacks-Linux-Instance ausführen](cookbooks-101-opsworks-opsworks-instance.md)
+ [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md)
+ [Ein Windows-Skript ausführen PowerShell](cookbooks-101-opsworks-opsworks-powershell.md)
+ [Nachahmen der Stack-Konfiguration und Bereitstellungsattribute auf Vagrant](opsworks-opsworks-mock.md)
+ [Verwenden der Stack-Konfigurations- und Bereitstellungsattributwerte](cookbooks-101-opsworks-opsworks-stack-config.md)
+ [Verwenden von externen Rezeptbüchern auf einer Linux-Instance: Berkshelf](cookbooks-101-opsworks-berkshelf.md)
+ [Verwenden des SDK for Ruby: Dateien von Amazon S3 herunterladen](cookbooks-101-opsworks-s3.md)
+ [Installieren von Windows-Software](cookbooks-101-opsworks-install-software.md)
+ [Überschreiben von integrierten Attributen](cookbooks-101-opsworks-attributes.md)
+ [Überschreiben von integrierten Vorlagen](cookbooks-101-opsworks-templates.md)

# Ein Rezept auf einer OpsWorks Stacks-Linux-Instance ausführen
<a name="cookbooks-101-opsworks-opsworks-instance"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Test Kitchen und Vagrant bieten eine einfache und effiziente Möglichkeit, Kochbücher zu implementieren. Um jedoch zu überprüfen, ob die Rezepte eines Kochbuchs in der Produktion korrekt ausgeführt werden, müssen Sie sie auf einer Stacks-Instanz ausführen. OpsWorks In diesem Thema wird beschrieben, wie Sie ein benutzerdefiniertes Rezeptbuch auf einer OpsWorks  Stacks-Linux-Instance installieren und ein einfaches Rezept ausführen. Außerdem finden Sie hier einige Tipps zur effizienten Behebung von Fehlern in Rezepten.

Eine Anleitung zum Ausführen von Rezepten auf Windows-Instances finden Sie unter [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md).

**Topics**
+ [Erstellen und Ausführen von Rezepten](#opsworks-opsworks-instance-create)
+ [Automatisches Ausführen des Rezepts](#cookbooks-101-opsworks-opsworks-instance-events)
+ [Fehlersuche und Fehlerbehebung bei Rezepten](#cookbooks-101-opsworks-opsworks-instance-bugs)

## Erstellen und Ausführen von Rezepten
<a name="opsworks-opsworks-instance-create"></a>

Zunächst müssen Sie einen Stack erstellen. Nachfolgend wird kurz beschrieben, wie Sie für dieses Beispiel einen Stack erstellen. Weitere Informationen finden Sie unter [Erstellen eines neuen Stacks](workingstacks-creating.md).

**So erstellen Sie einen -Stack**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und klicken Sie auf **Add Stack (Stack hinzufügen)**.

1. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und klicken Sie auf **Add Stack (Stack hinzufügen)**.
   + **Name —** OpsTest
   + **Standard-SSH-Schlüssel** — Ein EC2 Amazon-Schlüsselpaar

   Wenn Sie ein EC2 Amazon-Schlüsselpaar erstellen müssen, finden Sie weitere Informationen unter [ EC2 Amazon-Schlüsselpaare](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie die Instance. Das Beispiel verwendet die Standardregion USA West (Oregon).

1. Klicken Sie auf **Add a layer (Layer hinzufügen)** und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu.
   + **Name** — OpsTest
   + **Kurzname** — opstest

   Für Linux-Stacks können Sie einen beliebigen Layer-Typ verwenden. In diesem Beispiel werden jedoch keine der durch die anderen Layer-Typen installierten Pakete benötigt, daher ist es am einfachsten, einen benutzerdefinierten Layer zu verwenden.

1. Fügen Sie dem Layer [eine 24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und [starten Sie sie](workinginstances-starting.md).

Während die Instanz gestartet wird — das dauert in der Regel mehrere Minuten — können Sie das Kochbuch erstellen. In diesem Beispiel verwenden wir eine geringfügig angepasste Version des Rezepts aus [Bedingungslogik](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-conditional), um ein Datenverzeichnis anzulegen, dessen Name abhängig von der Plattform ist.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `opstest` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `opstest`.

   ```
   name "opstest"
   version "0.1.0"
   ```

1. Erstellen Sie ein Verzeichnis `recipes` in `opstest`.

1. Erstellen Sie eine Datei `default.rb` mit dem folgenden Rezept und speichern Sie sie im Verzeichnis `recipes`.

   ```
   Chef::Log.info("******Creating a data directory.******")
   
   data_dir = value_for_platform(
     "centos" => { "default" => "/srv/www/shared" },
     "ubuntu" => { "default" => "/srv/www/data" },
     "default" => "/srv/www/config"
   )
   
   directory data_dir do
     mode 0755
     owner 'root'
     group 'root'
     recursive true
     action :create
   end
   ```

   Das Rezept erstellt eine Nachricht durch Aufrufen von `Chef::Log.info`. Sie verwenden Test Kitchen für dieses Beispiel nicht, daher ist die `log` Methode nicht sehr nützlich. `Chef::Log.info`fügt die Nachricht in das Chef-Protokoll ein, das Sie nach Abschluss des Chef-Laufs lesen können. OpsWorks Stacks bietet eine einfache Möglichkeit, diese Protokolle anzuzeigen, wie später beschrieben.
**Anmerkung**  
Chef-Protokolle enthalten normalerweise zahlreiche Routinedaten und vergleichsweise uninteressante Informationen. Über das Zeichen "\$1", das zur Strukturierung der Nachricht verwendet wird, können Sie diese leichter finden.

1. Erstellen Sie ein `.zip`-Archiv von `opsworks_cookbooks`. Um Ihr Kochbuch auf einer OpsWorks Stacks-Instanz zu installieren, müssen Sie es in einem Repository speichern und OpsWorks Stacks die Informationen zur Verfügung stellen, die zum Herunterladen des Kochbuchs auf die Instanz erforderlich sind. Sie können Rezeptbücher in verschiedenen unterstützten Repository-Typen speichern. In diesem Beispiel wird eine Archivdatei mit den Kochbüchern in einem Amazon S3 S3-Bucket gespeichert. Weitere Informationen zu Rezeptbuch-Repositorys finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).
**Anmerkung**  
Der Einfachheit halber wird in diesem Beispiel das gesamte Verzeichnis `opsworks_cookbooks` archiviert. Dies bedeutet jedoch, dass OpsWorks Stacks alle Kochbücher in `opsworks_cookbooks` die Instanz herunterlädt, obwohl Sie nur eines davon verwenden werden. Um nur das Beispielrezeptbuch zu installieren, erstellen Sie ein neues Verzeichnis und verschieben Sie `opstest` in dieses Verzeichnis. Erstellen Sie dann ein `.zip`-Archiv des übergeordneten Verzeichnisses und verwenden Sie dieses anstelle von `opsworks_cookbooks.zip`.   
Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

1. [Laden Sie das Archiv in einen Amazon S3 S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html) hoch, [machen Sie das Archiv öffentlich](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) und notieren Sie die URL des Archivs.

Jetzt können Sie das Rezeptbuch installieren und das Rezept ausführen.

**So führen Sie das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** — **S3-Archiv**
   + **Repository-URL** — Die URL des Kochbuch-Archivs, die Sie zuvor aufgezeichnet haben

   Verwenden Sie für die übrigen Einstellungen die Standardwerte und klicken Sie auf **Save (Speichern)**, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf den Stack-Instances zu installieren. Wenn bereits eine ältere Version der Rezeptbücher installiert ist, werden diese überschrieben.

1. Führen Sie das Rezept aus, indem Sie den Stack-Befehl **Execute Recipes** ausführen. Achten Sie darauf, dass bei **Recipes to execute** **opstest::default** eingestellt ist. Durch diesen Befehl wird Chef mit der Option `opstest::default` ausgeführt.

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie es überprüfen.

**So überprüfen Sie opstest**

1. Werfen Sie zunächst einen Blick in das [Chef-Protokoll](troubleshoot-debug-log.md). Klicken Sie auf **show** in der Spalte **Log** der Instance „opstest1”, um das Protokoll anzuzeigen. Blättern Sie nach unten, wo Sie Ihre Protokollmeldung finden.

   ```
   ...
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache.
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache.
   [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.******
   [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3)
   ...
   ```

1. [Melden Sie sich über SSH bei der Instance an](workinginstances-ssh.md) und rufen Sie den Inhalt des Verzeichnisses `/srv/www/` auf.

Wenn Sie alle Schritte befolgt haben, werden Sie `/srv/www/config` anstelle des erwarteten Verzeichnisses `/srv/www/shared` sehen. Die folgenden Abschnitte enthalten einige Tipps, um solche Probleme schnell zu beheben.

## Automatisches Ausführen des Rezepts
<a name="cookbooks-101-opsworks-opsworks-instance-events"></a>

Mit dem Befehl **Execute Recipes (Rezepte ausführen)** können Sie benutzerdefinierte Rezepte einfach testen, daher wird er auch in den meisten dieser Beispiele verwendet. In der Praxis führen Sie Rezepte jedoch in der Regel zu Standardzeitpunkten im Lebenszyklus einer Instanz aus, z. B. nachdem der Start der Instanz abgeschlossen ist oder wenn Sie eine App bereitstellen. OpsWorks Stacks vereinfacht die Ausführung von Rezepten auf Ihrer Instance, indem es eine Reihe von [Lebenszyklusereignissen](workingcookbook-events.md) für jede Ebene unterstützt: Setup, Configure, Deploy, Undeploy und Shutdown. Sie können OpsWorks Stacks veranlassen, ein Rezept automatisch für die Instanzen einer Ebene auszuführen, indem Sie das Rezept dem entsprechenden Lebenszyklusereignis zuweisen.

Normalerweise erstellen Sie Verzeichnisse, sobald die Instance hochgefahren wurde, also während des Einrichtens. Nachfolgend wird beschrieben, wie Sie das Beispielrezept während des Einrichtens auf demselben Stack ausführen, den Sie zuvor in diesem Beispiel erstellt haben. Für die anderen Ereignisse können Sie ebenso vorgehen.

**So führen Sie Rezepte automatisch beim Einrichten aus**

1. Wählen Sie im Navigationsbereich **Ebenen** aus und klicken Sie dann auf das Stiftsymbol neben dem Link **Rezepte** der OpsTest Ebene.

1. Fügen Sie **opstest::default** zu den **Setup**-Rezepten des Layers hinzu, klicken Sie auf **\$1**, um es dem Layer hinzuzufügen, und wählen Sie **Save** aus, um die Konfiguration zu speichern.

1. Wählen Sie **Instances** aus, fügen Sie dem Layer eine weitere Instance hinzu und starten Sie sie.

   Die Instance sollte den Namen `opstest2` haben. Nach Abschluss des Startvorgangs wird OpsWorks Stacks ausgeführt. `opstest::default`

1. Nachdem die Instance `opstest2` online ist, überprüfen Sie, ob das Verzeichnis `/srv/www/shared` angelegt wurde.

**Anmerkung**  
Falls Sie den Ereignissen Einrichtung, Konfiguration oder Bereitstellung Rezepte zugewiesen haben, können Sie diese auch mit einem [Stack-Befehl](workingstacks-commands.md) (Einrichtung und Konfiguration) oder einem [Bereitstellungsbefehl](workingapps-deploying.md) (Bereitstellung) manuell ausführen, um das Ereignis auszulösen. Falls einem Ereignis mehrere Rezepte zugewiesen sind, werden mit diesen Befehlen alle Rezepte eines Ereignisses ausgeführt.

## Fehlersuche und Fehlerbehebung bei Rezepten
<a name="cookbooks-101-opsworks-opsworks-instance-bugs"></a>

Falls Sie nicht die erwarteten Ergebnisse erhalten oder Ihre Rezepte gar nicht erst erfolgreich ausgeführt werden, beginnt die Fehlersuche normalerweise im Chef-Protokoll. Es enthält eine detaillierte Beschreibung der Rezeptausführung sowie interne Protokollmeldungen Ihrer Rezepte. Die Protokolle sind insbesondere bei fehlgeschlagenen Rezepten hilfreich, da in diesem Fall sowohl der Fehler als auch ein Stacktrace im Chef-Protokoll gespeichert werden. 

Wenn das Rezept erfolgreich ausgeführt wurde wie in diesem Beispiel, ist das Chef-Protokoll allerdings oft keine große Hilfe. In diesem Fall sollten Sie sich einfach das Rezept und insbesondere die ersten Zeilen genauer ansehen:

```
Chef::Log.info("******Creating a data directory.******")

data_dir = value_for_platform(
  "centos" => { "default" => "/srv/www/shared" },
  "ubuntu" => { "default" => "/srv/www/data" },
  "default" => "/srv/www/config"
)
...
```

CentOS ist ein angemessener Ersatz für Amazon Linux, wenn Sie Rezepte auf Vagrant testen. Jetzt führen Sie Rezepte jedoch auf einer tatsächlichen Amazon Linux-Instance aus. Der Plattformwert für Amazon Linux ist `amazon`. Dieser Wert ist im Aufruf `value_for_platform` nicht enthalten, daher erstellt das Rezept standardmäßig das Verzeichnis `/srv/www/config`. Weitere Informationen zur Fehlerbehebung finden Sie unter [Handbuch zur Fehlersuche und Fehlerbehebung](troubleshoot.md).

Nachdem Sie nun das Problem gefunden haben, können Sie das Rezept entsprechend aktualisieren und noch einmal testen. Sie könnten zu den ursprünglichen Quelldateien zurückkehren, aktualisieren`default.rb`, ein neues Archiv auf Amazon S3 hochladen und so weiter. Dies ist jedoch ziemlich mühsam und zeitaufwändig. Nachfolgend wird ein wesentlich schnellerer Ansatz vorgestellt, der insbesondere bei einfachen Fehlern wie in unserem Beispiel hilfreich ist: Wir bearbeiten das Rezept auf der Instance. 

**So bearbeiten Sie ein Rezept auf einer Instance**

1. Melden Sie sich über SSH bei der Instance an und führen Sie `sudo su` aus, um Administratorberechtigungen zu erhalten. Sie benötigen diese Root-Berechtigungen, um auf das Rezeptbuch-Verzeichnis zugreifen zu können.

1. OpsWorks Stacks speichert Ihr Kochbuch in`/opt/aws/opsworks/current/site-cookbooks`, navigieren Sie also zu. `/opt/aws/opsworks/current/site-cookbooks/opstest/recipes`
**Anmerkung**  
OpsWorks Stacks speichert auch eine Kopie Ihrer Kochbücher in. `/opt/aws/opsworks/current/merged-cookbooks` Bearbeiten Sie dieses Rezeptbuch nicht. Wenn Sie das Rezept ausführen, kopiert OpsWorks Stacks das Kochbuch von `.../site-cookbooks` nach`.../merged-cookbooks`, sodass alle Änderungen, die Sie daran vornehmen, überschrieben werden. `.../merged-cookbooks`

1. Bearbeiten Sie die Datei `default.rb` mit einem Texteditor auf der Instance und ersetzen Sie `centos` durch `amazon`. Ihr Rezept sollte jetzt wie folgt aussehen.

   ```
   Chef::Log.info("******Creating a data directory.******")
   
   data_dir = value_for_platform(
     "amazon" => { "default" => "/srv/www/shared" },
     "ubuntu" => { "default" => "/srv/www/data" },
     "default" => "/srv/www/config"
   )
   ...
   ```

Führen Sie den Stack-Befehl **Execute Recipe (Rezept ausführen)** erneut aus, um zu überprüfen, ob der Fehler behoben wurde. Die Instance sollte jetzt ein Verzeichnis `/srv/www/shared` haben. Wenn Sie weitere Änderungen an einem Rezept vornehmen möchten, können Sie den Befehl **Execute Recipe** jederzeit erneut ausführen. Die Instance muss dafür nicht jedes Mal angehalten und neu gestartet werden. Wenn Sie mit dem Rezept zufrieden sind, vergessen Sie nicht, den Code auch in Ihrem Quellrezeptbuch zu aktualisieren.

**Anmerkung**  
Wenn Sie Ihr Rezept einem Lebenszyklusereignis zugewiesen haben, sodass OpsWorks Stacks es automatisch ausführt, können Sie Execute Recipe jederzeit verwenden, um **das Rezept erneut auszuführen**. Sie können das Rezept auch beliebig oft erneut ausführen, ohne die Instanz neu zu starten, indem Sie die OpsWorks Stacks-Konsole verwenden, um das entsprechende Ereignis manuell auszulösen. Auf diese Weise werden jedoch alle Rezepte des Ereignisses ausgeführt. Zur Erinnerung:  
Verwenden Sie einen [Stack-Befehl](workingstacks-commands.md), um Einrichtungs- oder Konfigurationsereignisse auszulösen.
Verwenden Sie einen [Bereitstellungsbefehl](workingapps-deploying.md), um Bereitstellungsereignisse oder Ereignisse zum Aufheben der Bereitstellung auszulösen.

# Ausführen eines Rezepts auf einer Windows-Instance
<a name="cookbooks-101-opsworks-opsworks-windows"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Dieses Thema ist im Grunde eine verkürzte Version von [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md) und erläutert, wie Sie ein Rezept auf einem Windows-Stack ausführen. Wir empfehlen Ihnen daher, zunächst [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md) durchzuarbeiten, da Sie dort detailliertere Informationen finden, die für beide Betriebssysteme relevant sind.

Eine Beschreibung der Ausführung von Rezepten auf OpsWorks Stacks-Linux-Instances finden Sie unter. [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md)

**Topics**
+ [Aktivieren von RDP-Zugriff](#cookbooks-101-opsworks-opsworks-windows-rdp)
+ [Erstellen und Ausführen von Rezepten](#cookbooks-101-opsworks-opsworks-windows-run-recipe)
+ [Automatisches Ausführen des Rezepts](#cookbooks-101-opsworks-opsworks-windows-event)

## Aktivieren von RDP-Zugriff
<a name="cookbooks-101-opsworks-opsworks-windows-rdp"></a>

Falls Sie dies noch nicht getan haben, müssen Sie zunächst eine Sicherheitsgruppe mit einer Regel für eingehenden Datenverkehr einrichten, die RDP-Zugriff für Ihre Instances zulässt. Sie benötigen diese Gruppe beim Erstellen des Stacks.

Wenn Sie den ersten Stack in einer Region erstellen, erstellt OpsWorks Stacks eine Reihe von Sicherheitsgruppen. Dazu gehört eine mit dem Namen etwa`AWS-OpsWorks-RDP-Server`, die OpsWorks Stacks an alle Windows-Instanzen anhängt, um RDP-Zugriff zu ermöglichen. Standardmäßig sind in diesen Sicherheitsgruppe jedoch keine Regeln enthalten. Daher müssen Sie eine Regel für den eingehenden Datenverkehr zum Zulassen von RDP-Zugriff auf Ihre Instances hinzufügen.

**So ermöglichen Sie den RDP-Zugriff**

1. Öffnen Sie die [ EC2Amazon-Konsole](https://console.aws.amazon.com/ec2/v2/), stellen Sie sie auf die Region des Stacks ein und wählen Sie im Navigationsbereich **Sicherheitsgruppen** aus.

1. **Wählen Sie **AWS- OpsWorks -RDP-Server**, klicken Sie auf die Registerkarte **Inbound** und dann auf Bearbeiten.**

1. Fügen Sie eine Regel mit folgenden Einstellungen hinzu:
   + **Typ** **—** RDP
   + **Quelle** — Die zulässigen Quell-IP-Adressen.

     In der Regel erlauben Sie eingehende RDP-Anfragen von Ihrer eigenen IP-Adresse oder einem festen IP-Adressbereich (üblicherweise der IP-Adressbereich Ihres Unternehmens).

**Anmerkung**  
Wie nachfolgend beschrieben müssen Sie auch die Benutzerberechtigungen bearbeiten, um RDP-Zugriff für reguläre Benutzer zu ermöglichen.

Weitere Informationen finden Sie unter [Anmelden mit RDP](workinginstances-rdp.md). 

## Erstellen und Ausführen von Rezepten
<a name="cookbooks-101-opsworks-opsworks-windows-run-recipe"></a>

Nachfolgend wird kurz beschrieben, wie Sie für dieses Beispiel einen Stack erstellen. Weitere Informationen finden Sie unter [Erstellen eines neuen Stacks](workingstacks-creating.md).

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie **Add Stack (Stack hinzufügen)** aus. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und wählen Sie **Add Stack (Stack hinzufügen)** aus.
   + **Name** — WindowsRecipeTest
   + **Region** — USA West (Oregon)

     Dieses Beispiel funktioniert in jeder Region, wir empfehlen jedoch, US West (Oregon) für Tutorials zu verwenden.
   + **Standardbetriebssystem** — Microsoft Windows Server 2012 R2

1. Wählen Sie **Add a layer (Layer hinzufügen)** aus und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu:
   + **Name** — RecipeTest
   + **Kurzname** — Recipetest

1. [Fügen Sie dem RecipeTest Layer eine 24/7-Instanz](workinginstances-add.md) mit Standardeinstellungen hinzu und [starten Sie](workinginstances-starting.md) ihn.

   OpsWorks Stacks weist diese Instanz automatisch `AWS-OpsWorks-RDP-Server` zu, sodass sich autorisierte Benutzer bei der Instanz anmelden können.

1. Wählen Sie **Permissions (Berechtigungen)**, dann **Edit (Bearbeiten)** und anschließend **SSH/RDP** und **sudo/admin** aus. Reguläre Benutzer benötigen zusätzlich zur Sicherheitsgruppe `AWS-OpsWorks-RDP-Server` diese Autorisierung, um sich bei der Instance anzumelden. 
**Anmerkung**  
Sie können sich auch als Administrator anmelden, allerdings mit einem anderen Verfahren. Weitere Informationen finden Sie unter [Anmelden mit RDP](workinginstances-rdp.md).

Während die Instanz gestartet wird — das dauert in der Regel mehrere Minuten — können Sie das Kochbuch erstellen. Über das Rezept in diesem Beispiel, bei dem es sich um eine für Windows angepasste Version des Rezepts aus [Beispiel 3: Erstellen von Verzeichnissen](cookbooks-101-basics-directories.md) handelt, wird ein Datenverzeichnis erstellt.

**Anmerkung**  
Bei der Implementierung von Kochbüchern für OpsWorks Stacks-Windows-Instances verwenden Sie eine etwas andere Verzeichnisstruktur als bei der Implementierung von Cookbooks für Stacks-Linux-Instances. OpsWorks Weitere Informationen finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md). 

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis `windowstest` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `windowstest`.

   ```
   name "windowstest"
   version "0.1.0"
   ```

1. Erstellen Sie ein Verzeichnis `recipes` in `windowstest`.

1. Erstellen Sie eine Datei `default.rb` mit dem folgenden Rezept und speichern Sie sie im Verzeichnis `recipes`.

   ```
   Chef::Log.info("******Creating a data directory.******")
   
   directory 'C:\data' do
     rights :full_control, 'instance_name\username'
     inherits false
     action :create
   end
   ```

   Ersetzen Sie *username* durch den Benutzernamen.

1. Speichern Sie das Rezeptbuch in einem Repository.

   Um Ihr Kochbuch auf einer OpsWorks Stacks-Instanz zu installieren, müssen Sie es in einem Repository speichern und Stacks die Informationen zur Verfügung stellen, die zum OpsWorks Herunterladen des Kochbuchs auf die Instanz erforderlich sind. Sie können Windows-Rezeptbücher als Archivdatei in einem S3-Bucket oder in einem Git-Repository speichern. In diesem Beispiel verwenden wir einen S3-Bucket, daher müssen Sie ein ZIP-Archiv des Verzeichnisses `windowstest` erstellen. Weitere Informationen zu Rezeptbuch-Repositorys finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

1. [Laden Sie das Archiv in einen S3-Bucket hoch](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html), [veröffentlichen Sie das Archiv](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) und notieren Sie sich die URL des Archivs. Sie können auch ein privates Archiv verwenden. Für dieses Beispiel ist ein öffentliches Archiv jedoch ausreichend und einfacher zu handhaben.

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Jetzt können Sie das Rezeptbuch installieren und das Rezept ausführen.

**So führen Sie das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ — **S3-Archiv****
   + **Repository-URL** — Die URL des Kochbuch-Archivs, die Sie zuvor aufgezeichnet haben

   Übernehmen Sie für die übrigen Einstellungen die Standardwerte und wählen Sie **Save** aus, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf den Stack-Instances einschließlich Online-Instances zu installieren. Wenn bereits eine ältere Version der Rezeptbücher installiert ist, werden diese überschrieben.

1. Nachdem die benutzerdefinierten Rezeptbücher aktualisiert wurden, führen Sie das Rezept mithilfe des Stack-Befehls [**Execute Recipes** aus](workingstacks-commands.md). Achten Sie darauf, dass bei **Recipes to execute** **windowstest::default** eingestellt ist. Durch diesen Befehl wird Chef mit Ihrem Rezept ausgeführt.

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie es überprüfen.

**So überprüfen Sie windowstest**

1. Sehen Sie sich das [Chef-Protokoll](troubleshoot-debug-log.md) an. Wählen Sie **show** in der Spalte **Log** der Instance „opstest1” aus, um das Protokoll anzuzeigen. Blättern Sie nach unten, wo Sie Ihre Protokollmeldung finden.

   ```
   ...
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache.
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache.
   [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.******
   [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3)
   ...
   ```

1. Wählen Sie **Instances** und anschließend **rdp** in der Spalte **Actions (Aktionen)** der Instance aus und fordern Sie ein RDP-Passwort mit einer angemessenen Ablaufzeit an. Kopieren Sie den DNS-Namen, den Benutzernamen und das Passwort. Sie können sich mithilfe eines RDP-Clients wie dem Windows Remote Desktop Connection-Client mit diesen Informationen bei der Instance anmelden und überprüfen, ob das Verzeichnis `c:\data` angelegt wurde. Weitere Informationen finden Sie unter [Anmelden mit RDP](workinginstances-rdp.md).

**Anmerkung**  
Wenn Ihr Rezept nicht ordnungsgemäß ausgeführt wurde, finden Sie unter [Fehlersuche und Fehlerbehebung bei Rezepten](cookbooks-101-opsworks-opsworks-instance.md#cookbooks-101-opsworks-opsworks-instance-bugs) Tipps zur Fehlerbehebung. Die meisten dieser Tipps lassen sich auch auf Windows-Instances übertragen. Wenn du deine Lösung testen möchtest, indem du das Rezept auf der Instanz bearbeitest, suche in dem `C:\chef\cookbooks` Verzeichnis, in dem OpsWorks Stacks benutzerdefinierte Kochbücher installiert, nach deinem Kochbuch.

## Automatisches Ausführen des Rezepts
<a name="cookbooks-101-opsworks-opsworks-windows-event"></a>

Mit dem Befehl **Execute Recipes (Rezepte ausführen)** können Sie benutzerdefinierte Rezepte einfach testen, daher wird er auch in den meisten dieser Beispiele verwendet. In der Praxis führen Sie Rezepte jedoch in der Regel zu Standardzeitpunkten im Lebenszyklus einer Instanz aus, z. B. nachdem die Instanz den Startvorgang abgeschlossen hat oder wenn Sie eine App bereitstellen. OpsWorks Stacks vereinfacht die Ausführung von Rezepten auf Ihrer Instance, indem es eine Reihe von [Lebenszyklusereignissen](workingcookbook-events.md) für jede Ebene unterstützt: Setup, Configure, Deploy, Undeploy und Shutdown. Sie können OpsWorks Stacks veranlassen, ein Rezept automatisch für die Instanzen einer Ebene auszuführen, indem Sie das Rezept dem entsprechenden Lebenszyklusereignis zuweisen.

Normalerweise erstellen Sie Verzeichnisse, sobald die Instance hochgefahren wurde, also während des Einrichtens. Nachfolgend wird beschrieben, wie Sie das Beispielrezept während des Einrichtens auf demselben Stack ausführen, den Sie zuvor in diesem Beispiel erstellt haben. Für die anderen Ereignisse können Sie ebenso vorgehen.

**So führen Sie Rezepte automatisch beim Einrichten aus**

1. Wählen Sie im Navigationsbereich „**Ebenen**“ und dann das Stiftsymbol neben dem Link „**Rezepte**“ der RecipeTest Ebene aus.

1. Fügen Sie **windowstest::default** zu den **Setup**-Rezepten des Layers hinzu, klicken Sie auf **\$1**, um es dem Layer hinzuzufügen, und wählen Sie **Save** aus, um die Konfiguration zu speichern.

1. Wählen Sie **Instances** aus, fügen Sie dem Layer eine weitere Instance hinzu und starten Sie sie.

   Die Instance sollte den Namen `recipetest2` haben. Nach Abschluss des Startvorgangs wird OpsWorks Stacks ausgeführt. `windowstest::default`

1. Nachdem die Instance `recipetest2` online ist, überprüfen Sie, ob das Verzeichnis `c:\data` angelegt wurde.

**Anmerkung**  
Falls Sie den Ereignissen Einrichtung, Konfiguration oder Bereitstellung Rezepte zugewiesen haben, können Sie diese auch mit einem [Stack-Befehl](workingstacks-commands.md) (Einrichtung und Konfiguration) oder einem [Bereitstellungsbefehl](workingapps-deploying.md) (Bereitstellung) auch manuell ausführen, um das Ereignis auszulösen. Falls einem Ereignis mehrere Rezepte zugewiesen sind, werden mit diesen Befehlen alle Rezepte eines Ereignisses ausgeführt.

# Ein Windows-Skript ausführen PowerShell
<a name="cookbooks-101-opsworks-opsworks-powershell"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
In diesen Beispielen wird davon ausgegangen, dass Sie das Beispiel [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md) bereits durchgearbeitet haben. Falls Sie das noch nicht getan haben, holen Sie das nun nach. Insbesondere wird darin beschrieben, wie Sie für Ihre Instances [RDP-Zugriff aktivieren](cookbooks-101-opsworks-opsworks-windows.md#cookbooks-101-opsworks-opsworks-windows-rdp).

Eine Möglichkeit, ein Rezept Aufgaben auf einer Windows-Instanz ausführen zu lassen — insbesondere Aufgaben, für die es keine entsprechende Chef-Ressource gibt — besteht darin, das Rezept ein Windows-Skript ausführen zu lassen. PowerShell In diesem Abschnitt werden Sie mit den Grundlagen vertraut gemacht, indem beschrieben wird, wie Sie ein PowerShell Windows-Skript verwenden, um eine Windows-Funktion zu installieren.

Die [https://docs.chef.io/chef/resources.html#powershell-script](https://docs.chef.io/chef/resources.html#powershell-script)Ressource führt PowerShell Windows-Cmdlets auf einer Instanz aus. Im folgenden Beispiel wird ein [WindowsFeature Install-Cmdlet](https://technet.microsoft.com/en-us/library/hh849795.aspx) verwendet, um einen XPS-Viewer auf der Instanz zu installieren. 

Nachfolgend wird kurz beschrieben, wie Sie für dieses Beispiel einen Stack erstellen. Weitere Informationen finden Sie unter [Erstellen eines neuen Stacks](workingstacks-creating.md).

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie **Add Stack (Stack hinzufügen)** aus. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und klicken Sie auf **Add Stack (Stack hinzufügen)**.
   + **Name —** PowerShellTest
   + **Region** — USA West (Oregon)

     Dieses Beispiel funktioniert in jeder Region, wir empfehlen jedoch, US West (Oregon) für Tutorials zu verwenden.
   + **Standardbetriebssystem** — Microsoft Windows Server 2012 R2

1. Wählen Sie **Add a layer (Layer hinzufügen)** aus und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu:
   + **Name** — PowerShell
   + **Kurzname** — Powershell

1. [Fügen Sie dem PowerShell Layer eine 24/7-Instanz](workinginstances-add.md) mit Standardeinstellungen hinzu und [starten Sie ihn](workinginstances-starting.md).

1. Wählen Sie **Permissions (Berechtigungen)**, dann **Edit (Bearbeiten)** und anschließend **SSH/RDP** und **sudo/admin** aus. Als regulärer Benutzer benötigen Sie zusätzlich zur Sicherheitsgruppe `AWS-OpsWorks-RDP-Server` diese Autorisierung, um sich bei der Instance anzumelden.

Während die Instanz gestartet wird — das dauert in der Regel mehrere Minuten — können Sie das Kochbuch erstellen. Über das Rezept in diesem Beispiel, bei dem es sich um eine für Windows angepasste Version des Rezepts aus [Beispiel 3: Erstellen von Verzeichnissen](cookbooks-101-basics-directories.md) handelt, wird ein Datenverzeichnis erstellt.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis `powershell` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `windowstest`.

   ```
   name "powershell"
   version "0.1.0"
   ```

1. Erstellen Sie ein Verzeichnis `recipes` innerhalb des Verzeichnisses `powershell`.

1. Erstellen Sie eine Datei `default.rb` mit dem folgenden Rezept und speichern Sie sie im Verzeichnis `recipes`.

   ```
   Chef::Log.info("******Installing XPS.******")
   
   powershell_script "Install XPS Viewer" do
     code <<-EOH
       Install-WindowsFeature XPS-Viewer
     EOH
     guard_interpreter :powershell_script
     not_if "(Get-WindowsFeature -Name XPS-Viewer).installed"
   end
   ```
   + Mithilfe der Ressource `powershell_script` wird ein Cmdlet ausgeführt, um den XPS-Viewer zu installieren.

     In diesem Beispiel wird nur ein Cmdlet ausgeführt. Der `code`-Block kann jedoch beliebig viele Befehlszeilen enthalten.
   + Das `guard_interpreter` Attribut weist Chef an, die 64-Bit-Version von Windows zu verwenden. PowerShell
   + Über das Wächterattribut `not_if` wird sichergestellt, dass Chef die Funktion nur dann installiert, wenn sie nicht bereits installiert ist.

1. Erstellen Sie ein `.zip`-Archiv des Verzeichnisses `powershell`.

1. [Laden Sie das Archiv in einen Amazon S3 S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html) hoch, [machen Sie das Archiv öffentlich](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) und notieren Sie die URL des Archivs. Sie können auch ein privates Archiv verwenden. Für dieses Beispiel ist ein öffentliches Archiv jedoch ausreichend und einfacher zu handhaben.

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Jetzt können Sie das Rezeptbuch installieren und das Rezept ausführen.

**So führen Sie das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** — **S3-Archiv**
   + **Repository-URL** — Die URL des Kochbuch-Archivs, die Sie zuvor aufgezeichnet haben

   Übernehmen Sie für die übrigen Einstellungen die Standardwerte und wählen Sie **Save** aus, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl **Update Custom Cookbooks **aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf der Instance zu installieren. 

1. Nachdem die benutzerdefinierten Rezeptbücher über den Befehl **Update Custom Cookbooks** aktualisiert wurden, führen Sie das Rezept mithilfe des Stack-Befehls [**Execute Recipes** aus](workingstacks-commands.md). Achten Sie darauf, das bei **Recipes to execute** **powershell::default** eingestellt ist. 

**Anmerkung**  
In diesem Beispiel wird der Einfachheit halber **Execute Recipes** verwendet, aber normalerweise lassen Sie OpsWorks Stacks [Ihre Rezepte automatisch ausführen](workingcookbook-assigningcustom.md), indem Sie sie dem entsprechenden Lebenszyklusereignis zuweisen. Sie können diese Rezepte auch durch manuelles Auslösen des Ereignisses ausführen. Verwenden Sie für Einrichtungs- und Konfigurationsereignisse einen Stack-Befehl und für Bereitstellungsereignisse und für Ereignisse zum Aufheben der Bereitstellung einen [Bereitstellungsbefehl](workingapps-deploying.md).

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie es überprüfen.

**So überprüfen Sie das powershell-Rezept**

1. Sehen Sie sich das [Chef-Protokoll](troubleshoot-debug-log.md) an. Klicken Sie auf **show** in der Spalte **Log** der Instance „powershell1”, um das Protokoll anzuzeigen. Blättern Sie nach unten, wo Sie Ihre Protokollmeldung finden.

   ```
   ...
   [2015-04-27T18:12:09+00:00] INFO: Storing updated cookbooks/powershell/metadata.rb in the cache.
   [2015-04-27T18:12:09+00:00] INFO: ******Installing XPS.******
   [2015-04-27T18:12:09+00:00] INFO: Processing powershell_script[Install XPS Viewer] action run (powershell::default line 3)
   [2015-04-27T18:12:09+00:00] INFO: Processing powershell_script[Guard resource] action run (dynamically defined)
   [2015-04-27T18:12:42+00:00] INFO: powershell_script[Install XPS Viewer] ran successfully 
   ...
   ```

1. [Melden Sie sich über RDP bei der Instance an](workinginstances-rdp.md) und öffnen Sie das Menü **Start**. XPS Viewer sollte unter **Windows Zubehör** aufgelistet sein.

# Nachahmen der Stack-Konfiguration und Bereitstellungsattribute auf Vagrant
<a name="opsworks-opsworks-mock"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
Dieses Thema bezieht sich nur auf Linux-Instances. Test Kitchen unterstützt Windows noch nicht, daher werden Sie alle Windows-Beispiele auf OpsWorks Stacks-Instanzen ausführen.

OpsWorks Stacks fügt dem Knotenobjekt für jede Instanz in Ihrem [Stack für jedes Lebenszyklusereignis Stackkonfigurations- und Bereitstellungsattribute](workingcookbook-json.md) hinzu. Diese Attribute sind ein Snapshot der Stack-Konfiguration einschließlich der Konfiguration der einzelnen Layer und deren Online-Instances, der Konfiguration der einzelnen bereitgestellten Apps usw. Da sich diese Attribute im Node-Objekt befinden, kann auf sie mit jedem Rezept zugegriffen werden. Die meisten Rezepte für OpsWorks Stacks-Instances verwenden eines oder mehrere dieser Attribute. 

Eine Instanz, die in einer Vagrant-Box ausgeführt wird, wird nicht von OpsWorks Stacks verwaltet, sodass ihr Knotenobjekt standardmäßig keine Stackkonfigurations- und Bereitstellungsattribute enthält. Sie können jedoch der Test Kitchen-Umgebung entsprechend geeignete Attribute hinzufügen. Test Kitchen fügt dann die Attribute zum Knotenobjekt der Instanz hinzu, und Ihre Rezepte können auf die Attribute zugreifen, genauso wie sie es auf einer OpsWorks Stacks-Instanz tun würden.

In diesem Thema wird gezeigt, wie Sie eine Kopie von geeigneten Stack-Konfigurations- und Bereitstellungsattributen erstellen, die Attribute auf einer Instance installieren und dann darauf zugreifen.

**Anmerkung**  
Wenn Sie Ihre Rezepte mit Test Kitchen testen, können Sie die Stack-Konfiguration und Bereitstellungs-JSON auch mit [fauxhai](https://github.com/customink/fauxhai) simulieren.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Unterverzeichnis von `opsworks_cookbooks` namens `printjson` und öffnen Sie es.

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben.

1. Fügen Sie zwei Unterverzeichnisse zu `printjson` hinzu: `recipes` und `environments`.

Sie können die Stack-Konfigurations- und Bereitstellungsattribute beispielsweise dadurch nachahmen, dass Sie Ihrem Rezeptbuch eine Attributdatei mit den entsprechenden Definitionen hinzufügen. Besser ist es jedoch, dafür die Test Kitchen-Umgebung zu nutzen. Hierfür gibt es zwei grundlegende Ansätze:
+ Fügen Sie Attributdefinitionen zu `.kitchen.yml` hinzu.

  Dieser Ansatz ist insbesondere bei einer geringen Anzahl an Attributen hilfreich. Weitere Informationen finden Sie unter [kitchen.yml](https://docs.chef.io/config_yml_kitchen.html).
+ Definieren Sie die Attribute in einer Umgebungsdatei und verweisen Sie in `.kitchen.yml` auf diese Datei.

  Dieser Ansatz ist für Stack-Konfigurations- und Bereitstellungsattribute in der Regel besser, da die Umgebungsdatei bereits im JSON-Format vorliegt. Sie können eine Kopie der Attribute im JSON-Format von einer geeigneten OpsWorks Stacks-Instanz abrufen und sie einfach einfügen. In allen Beispielen wird eine solche Umgebungsdatei verwendet.

Am einfachsten erstellen Sie Stack-Konfigurations- und Bereitstellungsattribute für Ihr Rezeptbuch, indem Sie einen entsprechend konfigurierten Stack erstellen und die entsprechenden Attribute aus einer Instance im JSON-Format kopieren. Damit Ihre Test Kitchen-Umgebungsdatei übersichtlich bleibt, können Sie diese JSON-Datei anschließend bearbeiten und alle Attribute löschen, die Sie für Ihre Rezepte nicht brauchen. Die Beispiele in diesem Kapitel basieren auf dem Stack aus [Erste Schritte mit Chef 11 Linux-Stacks](gettingstarted.md), einem einfachen PHP-Anwendungsserver-Stack mit Load Balancer, PHP-Anwendungsservern und einem MySQL-Datenbankserver.

**So erstellen Sie eine Stack-Konfiguration und ein Bereitstellungs-JSON**

1. Erstellen Sie MyStack wie unter beschrieben[Erste Schritte mit Chef 11 Linux-Stacks](gettingstarted.md), einschließlich der Bereitstellung von SimplePHPApp. Wenn Sie möchten, können Sie die zweite PHP App Server-Instanz weglassen[Schritt 4: Skalieren MyStack](gettingstarted-scale.md), die in aufgerufen wird. Die Beispiele verwenden diese Attribute nicht.

1. Falls Sie das noch nicht getan haben, starten Sie die Instance `php-app1` und [melden Sie sich über SSH an](workinginstances-ssh.md).

1. Führen Sie im Terminal-Fenster den folgenden [agent cli](agent.md)-Befehl aus:

   ```
   sudo opsworks-agent-cli get_json
   ```

   Über diesen Befehl werden die aktuellen Stack-Konfigurations- und Bereitstellungsattribute der Instance im JSON-Format im Terminal-Fenster aufgerufen.

1. Kopieren Sie die JSON in eine `.json`-Datei und speichern Sie diese lokal auf Ihrem Computer. Die Details sind abhängig vom verwendeten SSH-Client. Wenn Sie beispielsweise PuTTY unter Windows verwenden, können Sie mit dem Befehl `Copy All to Clipboard` den gesamten Text des Terminal-Fensters in die Windows-Zwischenablage kopieren. Dann können Sie den Inhalt in eine `.json`-Datei einfügen und nicht benötigten Text löschen.

1. Bearbeiten Sie MyStack JSON nach Bedarf. Es gibt zahlreiche Stack-Konfigurations- und Bereitstellungsattribute, von denen Rezeptbücher meist nur einen geringen Teil nutzen. Damit Ihre Umgebungsdatei übersichtlich bleibt, können Sie alle bis auf die von Ihren Rezeptbüchern tatsächlich verwendeten Attribute löschen, ohne die Struktur zu beschädigen.

   In diesem Beispiel wird eine stark bearbeitete Version von MyStack JSON verwendet, die nur zwei `['opsworks']['stack']` Attribute enthält, `['id]` und`['name']`. Erstellen Sie eine bearbeitete Version des MyStack JSON, die in etwa wie folgt aussieht:

   ```
   {
     "opsworks": {
       "stack": {
         "name": "MyStack",
         "id": "42dfd151-6766-4f1c-9940-ba79e5220b58",
       },
     },
   }
   ```

Um diese JSON in das Knotenobjekt der Instance einzufügen, müssen Sie es einer Test Kitchen-Umgebung hinzufügen.

**So fügen Sie Stack-Konfigurations- und Bereitstellungsattribute der Test Kitchen-Umgebung hinzu**

1. Erstellen Sie eine Umgebungsdatei `test.json` mit dem folgenden Inhalt und speichern Sie sie im Verzeichnis `environments` des Rezeptbuchs.

   ```
   {
     "default_attributes": {
       "opsworks" : {
         "stack" : {
           "name" : "MyStack",
           "id" : "42dfd151-6766-4f1c-9940-ba79e5220b58"
         }
       }
     },
     "chef_type" : "environment",
     "json_class" : "Chef::Environment"
   }
   ```

   Die Umgebungsdatei besteht aus folgenden Elementen:
   + `default_attributes`— Die Standardattribute im JSON-Format.

     Diese Attribute werden dem Knotenobjekt mit dem Attributtyp `default` hinzugefügt. Dieser Attributtyp wird von allen Stack-Konfigurations- und Bereitstellungs-JSON-Attributen verwendet. In diesem Beispiel wird die bereits vorgestellte bearbeitete Version der Stack-Konfigurations- und Bereitstellungs-JSON-Attribute verwendet.
   + `chef_type`— Setze dieses Element auf`environment`.
   + `json_class`— Setze dieses Element auf`Chef::Environment`.

1. Bearbeiten Sie `.kitchen.yml`, um wie nachfolgend beschrieben die Test Kitchen-Umgebung festzulegen.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
     environments_path: ./environments
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: printjson 
       provisioner:
         solo_rb:
           environment: test
       run_list:
         - recipe[printjson::default]
       attributes:
   ```

   Sie können die Umgebung definieren, indem Sie der Standarddatei `.kitchen.yml`, die von `kitchen init` erstellt wurde, folgende Elemente hinzufügen.  
**provisioner**  
Fügen Sie die folgenden Elemente hinzu.  
   + `name`— Setze dieses Element auf`chef_solo`.

     Um die OpsWorks Stacks-Umgebung besser zu replizieren, könnten Sie den [lokalen Modus des Chef-Clients](https://docs.chef.io/ctl_chef_client.html) anstelle von Chef Solo verwenden. Der lokale Modus ist eine Chef-Client-Option, die auf einer abgespeckten Version von Chef Server (Chef Zero) basiert und lokal auf den Instances statt auf einem Remote-Server ausgeführt wird. So können Ihre Rezepte Chef Server-Funktionen wie die Suchfunktion oder Data Bags verwenden, ohne eine Verbindung zu einem Remote-Server herstellen zu müssen.
   + `environments_path`— Das Cookbook-Unterverzeichnis, das die Umgebungsdatei enthält, `./environments` für dieses Beispiel.  
**suites:provisioner**  
Fügen Sie ein Element `solo_rb` ein, bei dem das Element `environment` den Namen der Umgebungsdatei (ohne die Erweiterung ".json") trägt. In diesem Beispiel wird für `environment` `test` verwendet.

1. Erstellen Sie eine Rezeptdatei `default.rb` mit folgendem Inhalt und speichern Sie sie im Verzeichnis `recipes` des Rezeptbuchs.

   ```
   log "Stack name: #{node['opsworks']['stack']['name']}"
   log "Stack id: #{node['opsworks']['stack']['id']}"
   ```

   Dieses Rezept ruft nur die beiden Stack-Konfigurations- und Bereitstellungswerte ab, die Sie der Umgebung hinzugefügt haben. Obwohl das Rezept lokal in Virtual Box ausgeführt wird, referenzieren Sie diese Attribute mit derselben Knotensyntax, die Sie verwenden würden, wenn das Rezept auf einer OpsWorks Stacks-Instanz ausgeführt würde.

1. Führen Sie `kitchen converge`. Es sollte etwa folgendes Protokoll ausgegeben werden.

   ```
   ...
   Converging 2 resources       
   Recipe: printjson::default       
     * log[Stack name: MyStack] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack name: MyStack] action write (printjson::default line 1)       
   [2014-07-01T23:14:09+00:00] INFO: Stack name: MyStack       
                
     * log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write (printjson::default line 2)       
   [2014-07-01T23:14:09+00:00] INFO: Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58       
   ...
   ```

# Verwenden der Stack-Konfigurations- und Bereitstellungsattributwerte
<a name="cookbooks-101-opsworks-opsworks-stack-config"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Rezepte benötigen häufig Informationen zur Stack-Konfiguration oder den bereitgestellten Apps. Sie könnten beispielsweise eine Liste der IP-Adressen des Stacks brauchen, um eine Konfigurationsdatei zu erstellen, oder das Bereitstellungsverzeichnis einer App zum Erstellen eines Protokollverzeichnisses. Anstatt diese Daten auf einem zentralen Server zu speichern, installiert OpsWorks Stacks für jedes Lebenszyklusereignis eine Reihe von Stackkonfigurations- und Bereitstellungsattributen im Knotenobjekt jeder Instanz. Diese Attribute stellen den aktuellen Status des Stacks einschließlich der bereitgestellten Apps dar. Rezepte können benötige Daten aus dem Knotenobjekt abrufen.

**Anmerkung**  
Anwendungen brauchen gelegentlich Informationen aus dem Knotenobjekt wie Stack-Konfigurations- und Bereitstellungsattributwerte. Anwendungen können jedoch nicht auf das Knotenobjekt zugreifen. Um einer Anwendung Daten aus einem Knotenobjekt bereitzustellen, können Sie ein Rezept implementieren, dass die benötigten Informationen aus dem Knotenobjekt abruft und in einer Datei in einem geeigneten Format speichert. Die Anwendung kann dann auf diese Datei zugreifen. Weitere Informationen sowie ein Beispiel finden Sie unter [Übermitteln von Daten an Anwendungen](apps-data.md).

Rezepte können wie nachfolgend beschrieben Stack-Konfigurations- und Bereitstellungsattributwerte aus Knotenobjekten abrufen.
+ Direkt über den vollständig qualifizierten Namen eines Attributs

  Diese Methode kann auf beliebigen Linux-Stacks, nicht jedoch auf Windows-Stacks angewendet werden.
+ Mit der Chef-Suche, über die Sie eine Anfrage für Attributwerte an das Knotenobjekt senden können

  Diese Methode ist für Windows-Stacks und Chef 11.10-Linux-Stacks geeignet.

**Anmerkung**  
Für Linux-Stacks können Sie die Agenten-CLI verwenden, um eine Kopie der Stack-Konfigurations- und Bereitstellungsattribute einer Instance im JSON-Format zu erstellen. Weitere Informationen finden Sie unter [Nachahmen der Stack-Konfiguration und Bereitstellungsattribute auf Vagrant](opsworks-opsworks-mock.md).

**Topics**
+ [Direktes Abrufen von Attributwerten](cookbooks-101-opsworks-opsworks-stack-config-node.md)
+ [Abrufen von Attributwerten mit der Chef-Suche](cookbooks-101-opsworks-opsworks-stack-config-search.md)

# Direktes Abrufen von Attributwerten
<a name="cookbooks-101-opsworks-opsworks-stack-config-node"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
Diese Methode funktioniert nur auf Linux-Stacks.

[Nachahmen der Stack-Konfiguration und Bereitstellungsattribute auf Vagrant](opsworks-opsworks-mock.md) zeigt, wie Sie Stack-Konfigurations- und Bereitstellungsdaten abrufen, indem Sie über die Knotensyntax direkt auf bestimmte Attribute verweisen. Dies ist manchmal die geeignetste Methode. Viele Attribute sind jedoch in Sammlungen oder Listen definiert, deren Inhalt und Name sich je nach Stack und im Laufe der Zeit auch einem bestimmten Stack unterscheiden können. Das Attribut `deploy` beispielsweise enthält eine Liste von App-Attributen, die nach dem kurzen Namen der App benannt sind. Die Liste einschließlich der App-Attributnamen unterscheidet sich meist je nach Stack und sogar je nach Bereitstellung. 

Es kann oft hilfreich, wenn nicht sogar notwendig sein, die Attribute in einer Liste oder Sammlung durchzunummerieren, um die erforderlichen Daten abzurufen. Angenommen, Sie brauchen die öffentlichen IP-Adressen der Instances eines Stacks. Diese Information ist im Attribut `['opsworks']['layers']` gespeichert, bei dem es sich um eine Hash-Tabelle mit einem Element für jeden Layer des Stacks handelt, wobei die einzelnen Elemente nach den kurzen Namen der Layers benannt sind. Jedes Layer-Element besteht aus einer Hash-Tabelle, die die Attribute des Layers enthält, eines davon `['instances']`. Dieses Element wiederum enthält eine weitere Hash-Tabelle mit einem Attribut für jede Instance des Layers. Die Attribute sind hierbei nach den kurzen Namen der jeweiligen Instance benannt. Jedes Instance-Attribut enthält wiederum eine Hash-Tabelle mit den Attributen der Instance, darunter auch `['ip']` mit der öffentlichen IP-Adresse. Wenn Sie sich dies nur schwer vorstellen können, betrachten Sie das Beispiel im JSON-Format im folgenden Verfahren.

In diesem Beispiel wird gezeigt, wie Sie Daten aus der Stack-Konfigurations- und Bereitstellungs-JSON für die Layers eines Stacks abrufen.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `listip` und öffnen Sie es.

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben.

1. Fügen Sie zwei Verzeichnisse zu `listip` hinzu: `recipes` und `environments`.

1. Erstellen Sie eine bearbeitete JSON-Version der MyStack Konfiguration und der Bereitstellungsattribute, die die relevanten Attribute enthält. Sie sollte etwa wie folgt aussehen.

   ```
   {
     "opsworks": {
       "layers": {
         "php-app": {
           "name": "PHP App Server",
           "id": "efd36017-ec42-4423-b655-53e4d3710652",
           "instances": {
             "php-app1": {
               "ip": "192.0.2.0"
             }
           }
         },
         "db-master": {
           "name": "MySQL",
           "id": "2d8e0b9a-0d29-43b7-8476-a9b2591a7251",
           "instances": {
             "db-master1": {
               "ip": "192.0.2.5"
             }
           }
         },
         "lb": {
           "name": "HAProxy",
           "id": "d5c4dda9-2888-4b22-b1ea-6d44c7841193",
           "instances": {
             "lb1": {
               "ip": "192.0.2.10"
             }
           }
         }
       }
     }
   }
   ```

1. Erstellen Sie eine Umgebungsdatei `test.json`, fügen Sie die Beispiel-JSON in `default_attributes` ein und speichern Sie die Datei im Verzeichnis `environments` des Rezeptbuchs. Die Datei sollte etwa wie folgt aussehen (der Kürze halber ist ein Großteil der Beispiel-JSON durch Ellipsen verkürzt dargestellt).

   ```
   {
     "default_attributes" : {
       "opsworks": {
         "layers": {
           ...
         }
       }
     },
     "chef_type" : "environment",
     "json_class" : "Chef::Environment"
   }
   ```

1. Ersetzen Sie den Text in `.kitchen.yml` durch folgenden.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_zero
     environments_path: ./environment
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: listip 
       provisioner:
         client_rb:
           environment: test
       run_list:
         - recipe[listip::default]
       attributes:
   ```

Nachdem das Kochbuch eingerichtet ist, können Sie das folgende Rezept verwenden, um den Layer IDs zu protokollieren.

```
node['opsworks']['layers'].each do |layer, layerdata|
  log "#{layerdata['name']} : #{layerdata['id']}"
end
```

Das Rezept nummeriert die Layers in `['opsworks']['layers']` durch und speichert den Namen und die ID der einzelnen Layers.

**So führen Sie das Rezept zum Erfassen der Layer-ID aus**

1. Erstellen Sie eine Datei `default.rb` mit dem Beispielrezept und speichern Sie sie im Verzeichnis `recipes`.

1. Führen Sie `kitchen converge`.

Der relevante Teil der Ausgabe sollte etwa wie folgt aussehen.

```
Recipe: listip::default       
  * log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 4)       
[2014-07-17T22:56:19+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652       
       
       
  * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 4)       
[2014-07-17T22:56:19+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251       
       
       
  * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 4)       
[2014-07-17T22:56:19+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193
```

Um die IP-Adressen der Instances aufzulisten, benötigen Sie eine verschachtelte Schleife wie nachfolgend beschrieben.

```
node['opsworks']['layers'].each do |layer, layerdata|
  log "#{layerdata['name']} : #{layerdata['id']}"
  layerdata['instances'].each do |instance, instancedata|
    log "Public IP: #{instancedata['ip']}"
  end
end
```

Die innere Schleife durchläuft die Instances jedes Layers und speichert die IP-Adressen.

**So führen Sie das Rezept zum Speichern der Instance-IP-Adressen aus**

1. Ersetzen Sie den Code in `default.rb` durch den Code aus dem Beispielrezept.

1. Führen Sie `kitchen converge` aus, um das Rezept auszuführen.

Der relevante Teil der Ausgabe sollte etwa wie folgt aussehen.

```
  * log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 2)       
[2014-07-17T23:09:34+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652       
       
       
  * log[Public IP: 192.0.2.0] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.0] action write (listip::default line 4)       
[2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.0       
       
       
  * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 2)       
[2014-07-17T23:09:34+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251       
       
       
  * log[Public IP: 192.0.2.5] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.5] action write (listip::default line 4)       
[2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.5       
       
       
  * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 2)       
[2014-07-17T23:09:34+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193       
       
       
  * log[Public IP: 192.0.2.10] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.10] action write (listip::default line 4)       
[2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.10
```

Führen Sie anschließend `kitchen destroy` aus, da im nächsten Thema ein neues Rezeptbuch verwendet wird.

**Anmerkung**  
Sammlungen von Stack-Konfigurations- und Bereitstellungs-JSON werden meist durchnummeriert, um Daten für eine bestimmte bereitgestellte App wie beispielsweise das Bereitstellungsverzeichnis abzurufen. Ein Beispiel finden Sie unter [Bereitstellungsrezepte](create-custom-deploy.md).

# Abrufen von Attributwerten mit der Chef-Suche
<a name="cookbooks-101-opsworks-opsworks-stack-config-search"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
Diese Methode ist für Windows-Stacks und Chef 11.10-Linux-Stacks verfügbar.

Es kann kompliziert sein, Stack-Konfigurations- und Bereitstellungsattributwerte direkt aus dem Knotenobjekt abzurufen. Für Windows-Stacks ist dies generell nicht möglich. Alternativ können Sie mit der [Chef-Suche](http://docs.chef.io/chef_search.html) die benötigten Attribute abrufen. Wenn Sie mit dem Chef-Server vertraut sind, werden Sie feststellen, dass die Chef-Suche mit OpsWorks Stacks etwas anders funktioniert. Da OpsWorks Stacks Chef-Client im lokalen Modus verwendet, hängt die Chef-Suche von einer lokalen Version des Chef-Servers namens chef-zero ab, sodass die Suche auf den Daten basiert, die lokal im Knotenobjekt der Instanz gespeichert sind, und nicht auf einem Remote-Server.

[In der Praxis spielt es normalerweise keine Rolle, die Suche auf lokal gespeicherte Daten zu beschränken, da das Knotenobjekt auf einer OpsWorks Stacks-Instanz die Stack-Konfiguration und die Bereitstellungsattribute enthält.](workingcookbook-json.md) Sie enthalten die meisten, wenn nicht sogar alle Daten, die Rezepte normalerweise vom Chef-Server beziehen würden, und verwenden dieselben Namen, sodass Sie in der Regel den für den Chef-Server geschriebenen Suchcode auf OpsWorks Stacks-Instanzen ohne Änderung verwenden können. Weitere Informationen finden Sie unter [Verwenden der Chef-Suchfunktion](workingcookbook-chef11-10.md#workingcookbook-chef11-10-search).

Nachfolgend finden Sie die Basisstruktur einer Suchanfrage:

```
result = search(:search_index, "key:pattern")
```
+ Der Suchindex gibt an, welche Attribute abgefragt werden, und legt fest, welcher Objekttyp zurückgegeben wird.
+ Der Schlüssel gibt den Attributnamen an.
+ Über das Muster wird festgelegt, welche Werte des Attributs abgerufen werden sollen.

  Sie können bestimmte Attributwerte abrufen oder mithilfe von Platzhaltern einen Wertebereich abfragen.
+ Als Ergebnis erhalten Sie eine Liste mit Objekten, die der Suchanfrage entsprechen. Jedes Ergebnis ist hierbei eine Hash-Tabelle mit mehreren zusammengehörigen Attributen.

  Wenn Sie beispielsweise den Suchindex `node` verwenden, gibt die Suchanfrage eine Liste der Instance-Objekte für alle Instances zurück, die der Suchanfrage entsprechen. Jedes Objekt in einer Hash-Tabelle enthält eine Reihe von Attributen, die die Konfiguration einer Instance festlegen, beispielsweise Hostname und IP-Adresse.

In der folgenden Anfrage wird beispielsweise der Suchindex `node` verwendet. Hierbei handelt es sich um einen Standard-Chef-Index, der auf die Stack-Instances (in Chef-Terminologie "Knoten") angewendet wird. Er sucht nach Instances mit dem Hostname `myhost`.

```
result = search(:node, "hostname:myhost")
```

Als Suchergebnis erhalten Sie eine Liste von Instance-Objekten mit dem Hostnamen `myhost`. Wenn Sie beispielsweise das Betriebssystem der ersten Instance benötigen, ist dieses unter `result[0][:os]` gespeichert. Wenn die Suchanfrage mehrere Objekte zurückgibt, können Sie diese durchnummerieren, um die benötigten Informationen zu erhalten.

Wie Sie die Suche in einem Rezept genau einsetzen, hängt davon ab, ob Sie einen Linux- oder Windows-Stack verwenden. In den folgenden Themen finden Sie Beispiele für beide Stack-Typen.

**Topics**
+ [Verwenden der Suche auf einem Linux-Stack](cookbooks-101-opsworks-opsworks-stack-config-search-linux.md)
+ [Verwenden der Suche auf einem Windows-Stack](cookbooks-101-opsworks-opsworks-stack-config-search-windows.md)

# Verwenden der Suche auf einem Linux-Stack
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-linux"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Dieses Beispiel basiert auf einem Linux-Stack mit einem einzelnen PHP-Anwendungsserver. Die öffentliche IP-Adresse des Servers wird mithilfe der Chef-Suche abgerufen und dann in einer Datei im Verzeichnis `/tmp` gespeichert. Im Grunde werden dieselben Informationen aus dem Knotenobjekt abgerufen wie mit [Direktes Abrufen von Attributwerten](cookbooks-101-opsworks-opsworks-stack-config-node.md), der Code ist jedoch wesentlich simpler und unabhängig von der genauen Struktur der Stack-Konfigurations- und Bereitstellungsattribute.

Nachfolgend wird kurz beschrieben, wie Sie für dieses Beispiel den Stack erstellen. Weitere Informationen finden Sie unter [Erstellen eines neuen Stacks](workingstacks-creating.md).

**Anmerkung**  
Wenn du noch kein benutzerdefiniertes Rezept auf einer OpsWorks Stacks-Instanz ausgeführt hast, solltest du zuerst das Beispiel durchgehen. [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md)

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und klicken Sie auf **Add Stack (Stack hinzufügen)**.

1. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und klicken Sie auf **Add Stack (Stack hinzufügen)**.
   + **Name — searchJSON**
   + **Standard-SSH-Schlüssel** — Ein EC2 Amazon-Schlüsselpaar

   Wenn Sie ein EC2 Amazon-Schlüsselpaar erstellen müssen, finden Sie weitere Informationen unter [ EC2 Amazon-Schlüsselpaare](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie die Instance. Das Beispiel verwendet die Region USA West (Oregon).

1. Klicken Sie auf **Layer** [hinzufügen und fügen Sie dem Stack einen PHP App Server-Layer](workinglayers-custom.md) mit Standardeinstellungen hinzu.

1. Fügen Sie dem Layer [eine 24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und [starten Sie sie](workinginstances-starting.md).

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `searchjson` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `opstest`.

   ```
   name "searchjson"
   version "0.1.0"
   ```

1. Erstellen Sie ein Verzeichnis `recipes` in `searchjson`.

1. Erstellen Sie eine Datei `default.rb` mit dem folgenden Rezept und speichern Sie sie im Verzeichnis `recipes`.

   ```
   phpserver = search(:node, "layers:php-app").first
   Chef::Log.info("**********The public IP address is: '#{phpserver[:ip]}'**********")
   
   file "/tmp/ip_addresses" do
     content "#{phpserver[:ip]}"
     mode 0644
     action :create
   end
   ```

   Auf Linux-Stacks wird nur der Suchindex `node` unterstützt. Das Rezept ruft mithilfe dieses Index eine Liste der Instances im Layer `php-app` ab. Da der Layer ja nur eine Instance hat, weist das Rezept diese einfach `phpserver` zu. Wenn der Layer mehrere Instances hätte, könnten Sie diese durchnummerieren, um die benötigten Informationen abzurufen. Jedes Listenelement ist eine Hash-Tabelle mit einer Reihe von Instance-Attributen. Das Attribut `ip` enthält die öffentliche IP-Adresse der Instance. Sie können die Adresse also im nachfolgenden Rezeptcode als `phpserver[:ip]` darstellen.

   Nachdem Sie eine Nachricht zum Chef-Protokoll hinzugefügt haben, verwendet das Rezept eine [https://docs.chef.io/chef/resources.html#file](https://docs.chef.io/chef/resources.html#file)-Ressource, um eine Datei mit dem Namen `ip_addresses` zu erstellen. Das Attribut `content` stellt `phpserver[:ip]` als Zeichenfolge dar. Wenn Chef die Datei `ip_addresses` erstellt, wird diese Zeichenfolge in der Datei gespeichert.

1. Erstellen Sie ein `.zip` Archiv von`opsworks_cookbooks`, [laden Sie das Archiv in einen Amazon S3 S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html) hoch, [machen Sie das Archiv öffentlich](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) und notieren Sie die URL des Archivs. Weitere Informationen zu Rezeptbuch-Repositorys finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Jetzt können Sie das Rezeptbuch installieren und das Rezept ausführen.

**So führen Sie das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** — **HTTP-Archiv**
   + **Repository-URL** — Die URL des Kochbuch-Archivs, die Sie zuvor aufgezeichnet haben

   Verwenden Sie für die übrigen Einstellungen die Standardwerte und klicken Sie auf **Save (Speichern)**, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. Bearbeiten Sie die benutzerdefinierte Layer-Konfiguration und [weisen Sie `searchjson::default`](workingcookbook-assigningcustom.md) sie dem Setup-Ereignis der Ebene zu. OpsWorks Stacks führt das Rezept aus, nachdem die Instanz gestartet wurde oder wenn Sie das Setup-Ereignis explizit auslösen.

1. [Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus](workingstacks-commands.md), um die aktuelle Version Ihres benutzerdefinierten Rezeptbuch-Repository auf den Stack-Instances zu installieren. Wenn bereits eine ältere Version des Repositorys installiert ist, wird diese überschrieben.

1. Führen Sie das Rezept aus, indem Sie den Stack-Befehl **Setup** ausführen. Dadurch wird ein Einrichtungsereignis auf der Instance ausgelöst und `searchjson::default` wird ausgeführt. Lassen Sie die Seite **Running command setup page** offen.

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie es überprüfen.

**Sie überprüfen Sie searchjson**

1. Sehen Sie sich zunächst das [Chef-Protokoll](troubleshoot-debug-log.md) und das letzte Einrichtungsereignis darin an. Klicken Sie auf der Seite **Running command setup page** auf **show** in der Spalte **Log** der Instance „php-app1”, um das Protokoll anzuzeigen. Blättern Sie nach unten zu Ihrer Protokollnachricht in der Mitte. Diese sieht etwa wie folgt aus.

   ```
   ...
   [2014-09-05T17:08:41+00:00] WARN: Previous bash[logdir_existence_and_restart_apache2]: ...
   [2014-09-05T17:08:41+00:00] WARN: Current  bash[logdir_existence_and_restart_apache2]: ...
   [2014-09-05T17:08:41+00:00] INFO: **********The public IP address is: '192.0.2.0'**********
   [2014-09-05T17:08:41+00:00] INFO: Processing directory[/etc/sysctl.d] action create (opsworks_initial_setup::sysctl line 1)
   ...
   ```

1. [Melden Sie sich über SSH bei der Instance an](workinginstances-ssh.md) und rufen Sie den Inhalt des Verzeichnisses `/tmp` auf. Dieses sollte eine Datei `ip_addresses` mit der IP-Adresse enthalten.

# Verwenden der Suche auf einem Windows-Stack
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-windows"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

OpsWorks Stacks bietet zwei Optionen, um die Suche in Windows-Stacks zu verwenden.
+ Den Suchindex `node`, mit dem eine Reihe von Standard-Chef-Attributen abgerufen werden kann

  Wenn Sie bereits Rezepte mit verwendetem Suchcode haben`node`, funktionieren diese normalerweise ohne Änderung auf OpsWorks Stacks-Stacks.
+ Weitere Suchindexe, mit denen eine Reihe OpsWorks  Stacks-spezifischer Attribute sowie einige Standardattribute abgerufen werden können

  Diese Indexe werden in [Verwenden von OpsWorks Stacks-spezifischen Suchindizes auf Windows Stacks](cookbooks-101-opsworks-opsworks-stack-config-search-opsworks.md) näher erläutert.

Wir empfehlen, Standardinformationen wie Hostnamen und IP-Adressen mit `node` abzurufen. So sind Ihre Rezepte kompatibel mit der Standard-Chef-Vorgehensweise. Verwenden Sie die OpsWorks Stacks-Suchindexe, um Informationen abzurufen, die für Stacks spezifisch sind. OpsWorks 

**Topics**
+ [Verwenden des Knoten-Suchindexes auf Windows-Stacks](cookbooks-101-opsworks-opsworks-stack-config-search-node.md)
+ [Verwenden von OpsWorks Stacks-spezifischen Suchindizes auf Windows Stacks](cookbooks-101-opsworks-opsworks-stack-config-search-opsworks.md)

# Verwenden des Knoten-Suchindexes auf Windows-Stacks
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-node"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
In diesem Beispiel wird davon ausgegangen, dass Sie das Beispiel [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md) bereits durchgearbeitet haben. Falls Sie das noch nicht getan haben, holen Sie das nun nach. Insbesondere wird darin beschrieben, wie Sie für Ihre Instances RDP-Zugriff aktivieren.

Dieses Beispiel basiert auf einem Windows-Stack mit einem benutzerdefinierten Layer und einer Instance. Es verwendet die Chef-Suche mit dem Suchindex `node`, um die öffentliche IP-Adresse des Servers abzurufen, und speichert die Adresse in einer Datei im Verzeichnis `C:\tmp`. Nachfolgend wird kurz beschrieben, wie Sie für dieses Beispiel den Stack erstellen. Weitere Informationen finden Sie unter [Erstellen eines neuen Stacks](workingstacks-creating.md).

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie **Add Stack (Stack hinzufügen)** aus.

1. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und wählen Sie **Add Stack (Stack hinzufügen)** aus.
   + **Name —** NodeSearch
   + **Region** — USA West (Oregon)

     Dieses Beispiel funktioniert in jeder Region, wir empfehlen jedoch, US West (Oregon) für Tutorials zu verwenden.
   + **Standardbetriebssystem** — Microsoft Windows Server 2012 R2

1. Wählen Sie **Add a layer (Layer hinzufügen)** aus und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu:
   + **Name** — IPTest
   + **Kurzname** — iptest

1. [Fügen Sie dem IPTest Layer eine rund um die Uhr verfügbare t2.micro-Instanz](workinginstances-add.md) [mit Standardeinstellungen hinzu und starten Sie sie.](workinginstances-starting.md) Sie hat den Namen iptest1.

   OpsWorks Stacks weist diese Instanz automatisch `AWS-OpsWorks-RDP-Server` zu, sodass sich autorisierte Benutzer bei der Instanz anmelden können.

1. Wählen Sie **Permissions (Berechtigungen)**, dann **Edit (Bearbeiten)** und anschließend **SSH/RDP** und **sudo/admin** aus. Reguläre Benutzer benötigen zusätzlich zur Sicherheitsgruppe `AWS-OpsWorks-RDP-Server` diese Autorisierung, um sich bei der Instance anzumelden. 
**Anmerkung**  
Sie können sich auch als Administrator anmelden, allerdings mit einem anderen Verfahren. Weitere Informationen finden Sie unter [Anmelden mit RDP](workinginstances-rdp.md).

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis `nodesearch` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `opstest`.

   ```
   name "nodesearch"
   version "0.1.0"
   ```

1. Erstellen Sie ein Verzeichnis `recipes` in `nodesearch`.

1. Erstellen Sie eine Datei `default.rb` mit dem folgenden Rezept und speichern Sie sie im Verzeichnis `recipes`.

   ```
   directory 'C:\tmp' do
     rights :full_control, 'Everyone'
     recursive true
     action :create
   end
   
   windowsserver = search(:node, "hostname:iptest*").first
   Chef::Log.info("**********The public IP address is: '#{windowsserver[:ipaddress]}'**********")
   
   file 'C:\tmp\addresses.txt' do
     content "#{windowsserver[:ipaddress]}"
     rights :full_control, 'Everyone'
     action :create
   end
   ```

   Vom Rezept werden folgende Schritte ausgeführt:

   1. Erstellen Sie mithilfe einer Verzeichnisressource für die Datei ein Verzeichnis `C:\tmp`.

      Weitere Informationen zu dieser Ressource finden Sie unter [Beispiel 3: Erstellen von Verzeichnissen](cookbooks-101-basics-directories.md).

   1. Verwendet die Chefsuche mit dem Suchindex `node`, um eine Liste der Knoten (Instances) mit einem Hostnamen abzurufen, der mit `iptest` beginnt.

      Wenn Sie das Standarddesign verwenden, das Hostnamen erstellt, indem Ganzzahlen an den Kurznamen des Layers angehängt werden, gibt diese Abfrage jede Instanz im Layer zurück. IPTest In diesem Beispiel hat der Layer nur eine Instance, daher weist das Rezept diese einfach `windowsserver` zu. Wenn mehrere Instances vorhanden sind, können Sie die vollständige Liste abrufen und durchnummerieren.

   1. Fügt dem Chef-Protokoll für diesen Durchlauf eine Nachricht mit der IP-Adresse hinzu.

      Das Objekt `windowsserver` ist eine Hash-Tabelle, bei dem das Attribut `ipaddress` die öffentliche IP-Adresse der Instance enthält. Sie können diese Adresse im folgenden Rezept daher als `windowsserver[:ipaddress]` bezeichnen. Das Rezept fügt die entsprechende Zeichenfolge in die Nachricht ein und fügt diese dem Chef-Protokoll hinzu.

   1. Verwendet die Ressource `file`, um eine Datei `C:\tmp\addresses.txt` mit der IP-Adresse zu erstellen.

      Über das Attribut `content` wird der Inhalt der Datei, in diesem Fall die öffentliche IP-Adresse, festgelegt. 

1. Erstellen Sie ein `.zip`-Archiv von `nodesearch`, [laden Sie das Archiv in einen S3-Bucket hoch](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html), [veröffentlichen Sie das Archiv](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) und notieren Sie sich die URL des Archivs. 

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Jetzt können Sie das Rezeptbuch installieren und das Rezept ausführen.

**So installieren Sie das Rezeptbuch und führen das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** **— S3-Archiv**
   + **Repository-URL** — Die URL des Kochbuch-Archivs, die Sie zuvor aufgezeichnet haben

   Übernehmen Sie für die übrigen Einstellungen die Standardwerte und wählen Sie **Save** aus, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf den Stack-Instances einschließlich Online-Instances zu installieren. Wenn bereits eine ältere Version der Rezeptbücher installiert ist, werden diese überschrieben.

1. Nachdem die benutzerdefinierten Rezeptbücher aktualisiert wurden, führen Sie das Rezept mithilfe des Stack-Befehls [**Execute Recipes** aus](workingstacks-commands.md). Achten Sie darauf, dass bei **Recipes to execute** **nodesearch::default** eingestellt ist. Durch diesen Befehl wird Chef mit Ihrem Rezept ausgeführt. Lassen Sie die Seite "execute\$1recipes" offen.

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie es überprüfen.

**So überprüfen Sie nodesearch**

1. Rufen Sie das [Chef-Protokoll](troubleshoot-debug-log.md) auf und sehen Sie sich das letzte execute\$1recipes-Ereignis an. Wählen Sie auf der Seite **Running command execute\$1recipes page** die Option **show** in der Spalte **Log** der Instance „iptest1” aus, um das Protokoll anzuzeigen. Blättern Sie nach unten zu Ihrer Protokollnachricht am Ende. Diese sieht etwa wie folgt aus.

   ```
   ...
   [2015-05-13T18:55:47+00:00] INFO: Storing updated cookbooks/nodesearch/recipes/default.rb in the cache.
   [2015-05-13T18:55:47+00:00] INFO: Storing updated cookbooks/nodesearch/metadata.rb in the cache.
   [2015-05-13T18:55:47+00:00] INFO: **********The public IP address is: '192.0.0.1'**********
   [2015-05-13T18:55:47+00:00] INFO: Processing directory[C:\tmp] action create (nodesearch::default line 1)
   [2015-05-13T18:55:47+00:00] INFO: Processing file[C:\tmp\addresses.txt] action create (nodesearch::default line 10) 
   ...
   ```

1. [Melden Sie sich mit RDP bei der Instance an](workinginstances-rdp.md) und rufen Sie das Verzeichnis `C:\tmp\addresses.txt` auf.

# Verwenden von OpsWorks Stacks-spezifischen Suchindizes auf Windows Stacks
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-opsworks"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
In diesem Beispiel wird davon ausgegangen, dass Sie das Beispiel [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md) bereits durchgearbeitet haben. Falls Sie das noch nicht getan haben, holen Sie das nun nach. Insbesondere wird darin beschrieben, wie Sie für Ihre Instances RDP-Zugriff aktivieren.

OpsWorks Stacks bietet zusätzlich zu den folgenden Suchindizes: `node` 
+ `aws_opsworks_stack`— Die Stack-Konfiguration.
+ `aws_opsworks_layer`— Die Layer-Konfigurationen des Stacks.
+ `aws_opsworks_instance`— Die Instanzkonfigurationen des Stacks.
+ `aws_opsworks_app`— Die App-Konfigurationen des Stacks.
+ `aws_opsworks_user`— Die Benutzerkonfigurationen des Stacks.
+ `aws_opsworks_rds_db_instance`— Verbindungsinformationen für registrierte RDS-Instances.

Diese Indizes enthalten einige Standard-Chef-Attribute, sind jedoch hauptsächlich für das Abrufen von OpsWorks Stacks-spezifischen Attributen vorgesehen. Beispielsweise enthält `aws_opsworks_instance` ein Attribut `status`, das den Status der Instance angibt, z. B. `online`. 

**Anmerkung**  
Es wird empfohlen, nach Möglichkeit `node` zu verwenden, um Ihre Rezepte mit den Chef-Standards kompatibel zu halten. Ein Beispiel finden Sie unter [Verwenden des Knoten-Suchindexes auf Windows-Stacks](cookbooks-101-opsworks-opsworks-stack-config-search-node.md).

Dieses Beispiel zeigt, wie die OpsWorks Stacks-Indizes verwendet werden, um den Wert eines Stacks-spezifischen Attributs abzurufen. OpsWorks Das Beispiel basiert auf einem einfachen Windows-Stack mit einem benutzerdefinierten Layer und einer Instances. Es verwendet die Chef-Suche, um die OpsWorks Stacks-ID der Instanz abzurufen, und fügt die Ergebnisse in das Chef-Protokoll ein.

Nachfolgend wird kurz beschrieben, wie Sie für dieses Beispiel einen Stack erstellen. Weitere Informationen finden Sie unter [Erstellen eines neuen Stacks](workingstacks-creating.md).

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie **\$1 Stack** aus. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und wählen Sie **Add Stack (Stack hinzufügen)** aus.
   + **Name** — IDSearch
   + **Region** — USA West (Oregon)

     Dieses Beispiel funktioniert in jeder Region, wir empfehlen jedoch, US West (Oregon) für Tutorials zu verwenden.
   + **Standardbetriebssystem** — Microsoft Windows Server 2012 R2

1. Wählen Sie **Add a layer (Layer hinzufügen)** aus und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu:
   + **Name** — IDCheck
   + **Kurzname** — idcheck

1. [Fügen Sie dem IDCheck Layer eine rund um die Uhr verfügbare t2.micro-Instanz](workinginstances-add.md) [mit Standardeinstellungen hinzu und starten Sie sie.](workinginstances-starting.md) Sie hat den Namen iptest1.

   OpsWorks Stacks weist diese Instanz automatisch zu. `AWS-OpsWorks-RDP-Server` [Aktivieren von RDP-Zugriff](cookbooks-101-opsworks-opsworks-windows.md#cookbooks-101-opsworks-opsworks-windows-rdp)erklärt, wie dieser Sicherheitsgruppe eine Regel für eingehenden Datenverkehr hinzugefügt wird, die es autorisierten Benutzern ermöglicht, sich bei der Instanz anzumelden.

1. Wählen Sie **Permissions (Berechtigungen)**, dann **Edit (Bearbeiten)** und anschließend **SSH/RDP** und **sudo/admin** aus. Reguläre Benutzer benötigen zusätzlich zur Sicherheitsgruppe `AWS-OpsWorks-RDP-Server` diese Autorisierung, um sich bei der Instance anzumelden. 
**Anmerkung**  
Sie können sich auch als Administrator anmelden, allerdings mit einem anderen Verfahren. Weitere Informationen finden Sie unter [Anmelden mit RDP](workinginstances-rdp.md).

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis `idcheck` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `opstest`.

   ```
   name "idcheck"
   version "0.1.0"
   ```

1. Erstellen Sie ein Unterverzeichnis `recipes` unter `idcheck` und fügen Sie dem Verzeichnis eine Datei `default.rb` mit folgendem Rezept hinzu.

   ```
   windowsserver = search(:aws_opsworks_instance, "hostname:idcheck*").first
   Chef::Log.info("**********The public IP address is: '#{windowsserver[:instance_id]}'**********")
   ```

   Das Rezept verwendet die Chef-Suche mit einem `aws_opsworks_instance`-Suchindex, um die [Instance-Attribute](data-bag-json-instance.md) aller Instances im Stack mit einem Hostnamen abzurufen, der mit `idcheck` beginnt. Wenn Sie das Standarddesign verwenden, das Hostnamen erstellt, indem Ganzzahlen an den Kurznamen des Layers angehängt werden, gibt diese Abfrage jede Instanz im Layer zurück. IDCheck In diesem Beispiel hat der Layer nur eine Instance, daher weist das Rezept diese einfach `windowsserver` zu. Wenn mehrere Instances vorhanden sind, können Sie die vollständige Liste abrufen und durchnummerieren.

   Das Rezept macht sich die Tatsache zunutze, dass der Stack nur eine Instance mit diesem Hostnamen enthält und bereits das erste Ergebnis das richtige ist. Wenn ein Stack mehrere Instances enthält, erhalten Sie bei der Suche nach anderen Attributen möglicherweise mehrere Ergebnisse. Eine Liste der Instance-Attribute finden Sie unter [Data Bag für Instances (aws\$1opsworks\$1instance)](data-bag-json-instance.md).

   Bei den Instanzattributen handelt es sich im Grunde um eine Hashtabelle, und die OpsWorks Stacks-ID der Instanz ist dem `instance_id` Attribut zugewiesen, sodass Sie sich auf die ID als beziehen können. `windowsserver[:instance_id]` Das Rezept fügt die entsprechende Zeichenfolge in die Nachricht ein und fügt diese dem Chef-Protokoll hinzu.

1. Erstellen Sie ein `.zip` Archiv des `ipaddress` Kochbuches, [laden Sie das Archiv in einen Amazon S3 S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html) hoch und notieren Sie sich die URL des Archivs. Weitere Informationen zu Rezeptbuch-Repositorys finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Jetzt können Sie das Rezeptbuch installieren und das Rezept ausführen.

**So installieren Sie das Rezeptbuch und führen das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** — **S3-Archiv**
   + **Repository-URL** — Die URL des Kochbuch-Archivs, die Sie zuvor aufgezeichnet haben

   Übernehmen Sie für die übrigen Einstellungen die Standardwerte und wählen Sie **Save** aus, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf den Stack-Instances einschließlich Online-Instances zu installieren. Wenn bereits eine ältere Version der Rezeptbücher installiert ist, werden diese überschrieben.

1. Nachdem die benutzerdefinierten Rezeptbücher aktualisiert wurden, führen Sie das Rezept mithilfe des Stack-Befehls [**Execute Recipes** aus](workingstacks-commands.md). Achten Sie darauf, dass bei **Recipes to execute** **idcheck::default** eingestellt ist. Durch diesen Befehl wird Chef mit Ihrem Rezept ausgeführt. Lassen Sie die Seite "execute\$1recipes" offen.

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie dies im [Chef-Protokoll](troubleshoot-debug-log.md) für das letzte execute\$1recipes-Ereignis überprüfen. Wählen Sie auf der Seite **Running command execute\$1recipes page** die Option **show** in der Spalte **Log** der Instance „iptest1” aus, um das Protokoll anzuzeigen. Blättern Sie nach unten zu Ihrer Protokollnachricht am Ende. Diese sieht etwa wie folgt aus.

```
...
[2015-05-13T20:03:47+00:00] INFO: Storing updated cookbooks/nodesearch/recipes/default.rb in the cache.
[2015-05-13T20:03:47+00:00] INFO: Storing updated cookbooks/nodesearch/metadata.rb in the cache.
[2015-05-13T20:03:47+00:00] INFO: **********The instance ID is: 'i-8703b570'**********
[2015-05-13T20:03:47+00:00] INFO: Chef Run complete in 0.312518 seconds 
...
```

# Verwenden von externen Rezeptbüchern auf einer Linux-Instance: Berkshelf
<a name="cookbooks-101-opsworks-berkshelf"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
Berkshelf ist nur für Chef 11.10-Linux-Stacks verfügbar.

Bevor Sie mit der Implementierung eines Rezeptbuchs beginnen, sollten Sie sich die Seite [Chef Community Cookbooks](https://github.com/opscode-cookbooks) ansehen. Hier finden Sie Rezeptbücher, die von Mitgliedern der Chef-Community für die unterschiedlichsten Zwecke erstellt wurden. Viele dieser Kochbücher können ohne Änderungen mit OpsWorks Stacks verwendet werden, sodass Sie sie möglicherweise für einige Ihrer Aufgaben nutzen können, anstatt den gesamten Code selbst zu implementieren.

Um externe Rezeptbücher auf Instances verwenden zu können, müssen Sie es zunächst installieren und seine Abhängigkeiten verwalten können. Am einfachsten verwenden Sie dafür den Abhängigkeitsmanager Berkshelf. Berkshelf funktioniert auf EC2 Amazon-Instances, einschließlich OpsWorks Stacks-Instances, ist aber auch für die Zusammenarbeit mit Test Kitchen und Vagrant konzipiert. Die Verwendung auf Vagrant ist jedoch etwas anders als bei OpsWorks Stacks, sodass dieses Thema Beispiele für beide Plattformen enthält. Weitere Informationen zur Verwendung von Berkshelf finden Sie unter [Berkshelf](http://berkshelf.com/).

**Topics**
+ [Verwenden von Berkshelf mit Test Kitchen und Vagrant](#cookbooks-101-opsworks-berkshelf-vagrant)
+ [Berkshelf mit Stacks verwenden OpsWorks](#opsworks-berkshelf-opsworks)

## Verwenden von Berkshelf mit Test Kitchen und Vagrant
<a name="cookbooks-101-opsworks-berkshelf-vagrant"></a>

 In diesem Beispiel wird erläutert, wie Sie mit Berkshelf das Community-Rezeptbuch "getting-started" installieren und das darin enthaltene Rezept ausführen, um eine kurze Textdatei im Home-Verzeichnis der Instance zu installieren.

**So installieren Sie Berkshelf und initialisieren ein Rezeptbuch**

1. Installieren Sie das Berkshelf-Gem wie folgt auf Ihrem Computer.

   ```
   gem install berkshelf
   ```

   Abhängig von Ihrer Workstation benötigen Sie hierfür womöglich `sudo` oder einen Ruby-Umgebungsmanager wie [RVM](https://rvm.io/). Führen Sie `berks --version` aus, um zu überprüfen, ob Berkshelf korrekt installiert wurde.

1. Das Rezeptbuch für dieses Thema heißt "external\$1cookbook". Sie können mit Berkshelf ein initialisiertes Rezeptbuch erstellen, statt wie in den vorherigen Themen manuell vorzugehen. Wechseln Sie hierfür ins Verzeichnis `opsworks_cookbooks` und führen Sie den folgenden Befehl aus.

   ```
   berks cookbook external_cookbook
   ```

   Der Befehl erstellt das Verzeichnis `external_cookbook` sowie einige Standardunterverzeichnisse von Chef und Test Kitchen, darunter `recipes` und `test`. Außerdem erstellt er Standardversionen einiger Standarddateien, darunter folgende:
   + `metadata.rb`
   + Konfigurationsdateien für Vagrant, Test Kitchen und Berkshelf
   + Ein leeres Rezept `default.rb` im Verzeichnis `recipes`
**Anmerkung**  
Sie müssen `kitchen init` nicht ausführen, da der Befehl `berks cookbook` diese Aufgaben bereits ausführt.

1. Führen Sie `kitchen converge`. Das neu erstellte Rezeptbuch hat bisher noch keine relevante Funktion, kommt der Sache aber schon nahe.

**Anmerkung**  
Sie können mithilfe von `berks init` auch ein vorhandenes Rezeptbuch initialisieren, um Berkshelf zu verwenden.

Um mithilfe von Berkshelf die externen Abhängigkeiten eines Rezeptbuchs zu verwalten, muss das Stammverzeichnis des Rezeptbuchs eine Datei `Berksfile` enthalten. Dies ist eine Konfigurationsdatei, in der festgelegt ist, wie Berkshelf Abhängigkeiten verwaltet. Wenn Sie mithilfe von `berks cookbook` das Rezeptbuch `external_cookbook` erstellen, wird eine Datei `Berksfile` mit folgendem Inhalt angelegt.

```
source "https://supermarket.chef.io"
metadata
```

Diese Datei hat folgende Deklarationen:
+ `source`— Die URL einer Kochbuchquelle.

  Eine Berksfile-Datei kann beliebig viele `source`-Deklarationen enthalten, von denen jede eine Standardquelle für abhängige Rezeptbücher angibt. Wenn Sie nicht explizit eine Rezeptbuchquelle angeben, durchsucht Berkshelf die Standard-Repositorys nach einem Rezeptbuch mit demselben Namen. Die Standard-Berksfile-Datei enthält ein einzelnes Attribut `source`, das auf das Community-Rezeptbuch-Repository verweist. Dieses Repository enthält das Rezeptbuch "getting-started", Sie können diese Zeile also unverändert lassen.
+ `metadata`— Weist Berkshelf an, Kochbuch-Abhängigkeiten aufzunehmen, die in der Kochbuchdatei deklariert sind. `metadata.rb`

  Mithilfe des Attributs `cookbook` können Sie auch selbst ein abhängiges Rezeptbuch in der Berksfile-Datei angeben. Weitere Informationen dazu erhalten Sie im weiteren Verlauf dieses Themas.

Es gibt zwei Möglichkeiten, die Abhängigkeiten eines Rezeptbuchs zu deklarieren:
+ Fügen Sie eine `cookbook`-Deklaration in die Berksfile-Datei ein.

  Dies ist der Ansatz, der von Stacks verwendet wird. OpsWorks Fügen Sie beispielsweise `cookbook "getting-started"` in die Berksfile-Datei ein, um das für dieses Beispiel benötigte Rezeptbuch "getting-started" festzulegen. Berkshelf durchsucht daraufhin die Standard-Repositorys nach einem Rezeptbuch mit diesem Namen. Sie können mithilfe von `cookbook` auch eine genaue Rezeptbuchquelle und sogar eine bestimmte Version festlegen. Weitere Informationen finden Sie unter [Berkshelf](http://berkshelf.com/).
+ Fügen Sie eine `metadata`-Deklaration in die Berksfile-Datei ein und deklarieren Sie die Abhängigkeit in `metadata.rb`.

  Über diese Deklaration weisen Sie Berkshelf an, die Abhängigkeiten des Rezeptbuchs aus der Datei `metadata.rb` ebenfalls zu installieren. Um beispielsweise eine der Abhängigkeiten des Rezeptbuchs "getting-started" zu deklarieren, fügen Sie eine `depends 'getting-started'`-Deklaration in die Datei `metadata.rb` des Rezeptbuchs ein.

In diesem Beispiel wird aus Gründen der Konsistenz mit OpsWorks Stacks der erste Ansatz verwendet.

**So installieren Sie das Rezeptbuch "getting-started"**

1. Bearbeiten Sie die Standard-Berksfile-Datei und ersetzen Sie die `metadata`-Deklaration durch eine `cookbook`-Deklaration für `getting-started`. Der Inhalt sollte wie folgt aussehen.

   ```
   source "https://supermarket.chef.io"
   
   cookbook 'getting-started'
   ```

1. Führen Sie `berks install` aus, um das Rezeptbuch "getting-started" aus dem Community-Rezeptbuch-Repository in Ihrem lokalen Berkshelf-Verzeichnis, normalerweise `~/.berkshelf`, zu installieren. Dieses Verzeichnis wird oftmals einfach als *das Berkshelf* bezeichnet. Im Verzeichnis `cookbooks` von Berkshelf sollten Sie nun das Verzeichnis für das Rezeptbuch "" mit dem Namen `getting-started-0.4.0`getting-started- ( (oder ähnlich) finden.

1. Ersetzen Sie `external_cookbook::default` in der Ausführungsliste `.kitchen.yml` durch `getting-started::default`. In diesem Beispiel werden keine Rezepte aus "external\$1cookbook" ausgeführt. Es wird nur benötigt, um das Rezeptbuch "getting-started" zu verwenden. Die Datei `.kitchen.yml` sollte jetzt wie folgt aussehen.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: default
       run_list:
         - recipe[getting-started::default]
       attributes:
   ```

1. Führen Sie `kitchen converge` aus und melden Sie sich mit `kitchen login` bei der Instance an. Das Anmeldeverzeichnis sollte eine Datei `chef-getting-started.txt` mit etwa folgendem Inhalt enthalten:

   ```
   Welcome to Chef!
   
   This is Chef version 11.12.8.
   Running on ubuntu.
   Version 12.04.
   ```

   Test Kitchen installiert Rezeptbücher im Verzeichnis `/tmp/kitchen/cookbooks` der Instance. Wenn Sie den Inhalt dieses Verzeichnisses aufrufen, sehen Sie zwei Rezeptbücher: "external\$1cookbook" und "getting-started".

1. Führen Sie `kitchen destroy` aus, um die Instance herunterzufahren. Das nächste Beispiel verwendet eine OpsWorks Stacks-Instanz.

## Berkshelf mit Stacks verwenden OpsWorks
<a name="opsworks-berkshelf-opsworks"></a>

OpsWorks Stacks unterstützt optional Stacks von Berkshelf für Chef 11.10. Um Berkshelf für Ihren Stack zu verwenden, gehen Sie wie folgt vor.
+ Aktivieren Sie Berkshelf für den Stack.

  OpsWorks Stacks kümmert sich dann um die Details der Installation von Berkshelf auf den Instanzen des Stacks.
+ Fügen Sie dem Stammverzeichnis Ihres Rezeptbuch-Repositorys eine Berksfile-Datei hinzu.

  Die Berksfile-Datei muss für alle abhängigen Rezeptbücher `source`- und `cookbook`-Deklarationen enthalten.

Wenn OpsWorks Stacks Ihr benutzerdefiniertes Kochbuch-Repository auf einer Instanz installiert, verwendet es Berkshelf, um die abhängigen Kochbücher zu installieren, die im Berksfile des Repositorys deklariert sind. Weitere Informationen finden Sie unter [Verwenden von Berkshelf](workingcookbook-chef11-10.md#workingcookbook-chef11-10-berkshelf).

Dieses Beispiel zeigt, wie Sie Berkshelf verwenden, um das Community-Kochbuch „Erste Schritte“ auf einer Stacks-Instanz zu installieren. OpsWorks Außerdem installiert Berkshelf eine Version des benutzerdefinierten Rezeptbuchs "createfile", um eine Datei in einem bestimmten Verzeichnis zu installieren. Weitere Informationen zur Funktionsweise von "createfile" finden Sie unter [Installieren einer Datei mithilfe eines Rezeptbuchs](cookbooks-101-basics-files.md#cookbooks-101-basics-files-cookbook_file).

**Anmerkung**  
Wenn Sie zum ersten Mal ein benutzerdefiniertes Kochbuch auf einem OpsWorks Stacks-Stack installieren, sollten Sie zuerst das Beispiel durchgehen. [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md)

Erstellen Sie zunächst einen Stack, wie nachfolgend kurz zusammengefasst. Weitere Informationen finden Sie unter [Erstellen eines neuen Stacks](workingstacks-creating.md).

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und klicken Sie auf **Add Stack (Stack hinzufügen)**.

1. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und klicken Sie auf **Add Stack (Stack hinzufügen)**.
   + **Name —** BerksTest
   + **Standard-SSH-Schlüssel** — Ein EC2 Amazon-Schlüsselpaar

   Wenn Sie ein EC2 Amazon-Schlüsselpaar erstellen müssen, finden Sie weitere Informationen unter [ EC2 Amazon-Schlüsselpaare](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie die Instance. Das Beispiel verwendet die Standardregion USA West (Oregon).

1. Klicken Sie auf **Add a layer (Layer hinzufügen)** und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu.
   + **Name** — BerksTest
   + **Kurzname** — berkstest

   Sie können für dieses Beispiel einen beliebigen Layer-Typ verwenden. Da jedoch für das Beispiel keine Pakete aus den anderen Layers benötigt werden, ist ein benutzerdefinierter Layer die einfachste Lösung.

1. [Fügen Sie dem BerksTest Layer eine 24/7-Instanz](workinginstances-add.md) mit Standardeinstellungen hinzu, aber starten Sie sie noch nicht.

Bei OpsWorks Stacks müssen sich Kochbücher in einem Remote-Repository mit einer Standardverzeichnisstruktur befinden. Anschließend geben Sie die Download-Informationen an OpsWorks Stacks weiter, das das Repository beim Start automatisch auf jede Instanz des Stacks herunterlädt. Der Einfachheit halber ist das Repository für dieses Beispiel ein öffentliches Amazon S3 S3-Archiv, aber OpsWorks Stacks unterstützt auch HTTP-Archive, Git-Repositorys und Subversion-Repositorys. Weitere Informationen finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

**So erstellen Sie das Rezeptbuch-Repository**

1. Erstellen Sie in Ihrem Verzeichnis `opsworks_cookbooks` ein Verzeichnis namens `berkstest_cookbooks`. Sie können dieses Verzeichnis auch an einem beliebigen anderen Ort speichern, da Sie es in ein Repository hochladen werden.

1. Erstellen Sie eine Datei "Berksfile" mit folgendem Inhalt in `berkstest_cookbooks`. 

   ```
   source "https://supermarket.chef.io"
   
   cookbook 'getting-started'
   ```

   Diese Datei enthält die Abhängigkeiten des Rezeptbuchs "getting-started" und weist Berkshelf an, diese auf der Community-Rezeptbuch-Website herunterzuladen.

1. Fügen Sie ein Verzeichnis `createfile` zu `berkstest_cookbooks` hinzu, das Folgendes enthält.
   + Eine Datei `metadata.rb` mit folgendem Inhalt:

     ```
     name "createfile"
     version "0.1.0"
     ```
   + Ein Verzeichnis `files/default` mit einer Datei `example_data.json` mit folgendem Inhalt.

     ```
     {
       "my_name" : "myname",
       "your_name" : "yourname",
       "a_number" : 42,
       "a_boolean" : true
     }
     ```

     Sie können den Dateinamen und Inhalt frei wählen. Das Rezept kopiert einfach die Datei an den angegebenen Speicherort.
   + Ein Verzeichnis `recipes` mit einer Datei `default.rb` mit folgendem Rezeptcode:

     ```
     directory "/srv/www/shared" do
       mode 0755
       owner 'root'
       group 'root'
       recursive true
       action :create
     end
     
     cookbook_file "/srv/www/shared/example_data.json" do
       source "example_data.json"
       mode 0644
       action :create_if_missing
     end
     ```

     Dieses Rezept erstellt `/srv/www/shared` und kopiert `example_data.json` in dieses Verzeichnis aus dem Verzeichnis `files` des Rezeptbuchs.

1. Erstellen Sie ein `.zip` Archiv von`berkstest_cookbooks`, [laden Sie das Archiv in einen Amazon S3 S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html) hoch, [machen Sie das Archiv öffentlich](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) und notieren Sie die URL des Archivs.

Jetzt können Sie die Rezeptbücher installieren und das Rezept ausführen.

**So installieren Sie Rezeptbücher und führen die Rezepte aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** — **HTTP-Archiv**
   + **Repository-URL** — Die URL des Kochbuch-Archivs, die Sie zuvor aufgezeichnet haben
   + **Berkshelf verwalten** **— Ja**

   Die ersten beiden Einstellungen versorgen OpsWorks Stacks mit den Informationen, die es benötigt, um das Cookbook-Repository auf Ihre Instanzen herunterzuladen. Die letzte Einstellung aktiviert die Unterstützung für Berkshelf, um das Rezeptbuch "getting-started" auf die Instance herunterzuladen. Übernehmen Sie für die übrigen Einstellungen die Standardwerte und klicken Sie auf **Save**, um die Stack-Konfiguration zu aktualisieren und zu speichern. 

1. Bearbeiten Sie den BerksTest Layer, um [die folgenden Rezepte zum Setup-Lifecycle-Ereignis des Layers hinzuzufügen](workingcookbook-assigningcustom.md).
   + `getting-started::default`
   + `createfile::default`

1. [Starten](workinginstances-starting.md) Sie die Instance. Das Setup-Ereignis tritt ein, nachdem die Instanz den Startvorgang abgeschlossen hat. OpsWorks Stacks installiert dann das Cookbook-Repository, verwendet Berkshelf, um das Kochbuch für die ersten Schritte herunterzuladen, und führt die Einrichtung und Bereitstellung von Rezepten für den Layer aus, einschließlich und. `getting-started::default` `createfile::default`

1. Nachdem die Instance online ist, [melden Sie sich mit SSH dort an](workinginstances-ssh.md). Sie sollten Folgendes sehen:
   + `/srv/www/shared` muss `example_data.json` enthalten.
   + `/root` muss `chef-getting-started.txt` enthalten.

     OpsWorks Stacks führt Rezepte als Root-Benutzer aus, sodass Getting-Started die Datei im Verzeichnis und nicht in Ihrem Home-Verzeichnis installiert. `/root`

# Verwenden des SDK for Ruby: Dateien von Amazon S3 herunterladen
<a name="cookbooks-101-opsworks-s3"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Service hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

Es gibt Aufgaben wie die Interaktion mit AWS-Services, die mit Chef-Ressourcen nicht ausgeführt werden können. Es kann beispielsweise in manchen Fällen besser sein, Dateien auf Remote-Servern zu speichern und sie mithilfe von Rezepten auf eine Instance herunterzuladen. Verwenden Sie die Ressource [remote\$1file](https://docs.chef.io/chef/resources.html#remote-file), um Dateien von Remote-Servern herunterzuladen. Wenn Sie Ihre Dateien jedoch in einem [Amazon S3 S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) speichern möchten, `remote_file` können Sie diese Dateien nur herunterladen, wenn die [ACL](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) den Vorgang zulässt.

Rezepte können mithilfe von [AWS SDK für Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/) auf die meisten AWS-Services zugreifen. In diesem Thema wird gezeigt, wie Sie das SDK for Ruby verwenden, um eine Datei aus einem S3-Bucket herunterzuladen.

**Anmerkung**  
Weitere Informationen zur Verwendung von [AWS SDK für Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/) für Verschlüsselung und Entschlüsselung finden Sie unter [AWS::S3::S3Object](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html). Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

**Topics**
+ [Verwenden des SDK for Ruby auf einer Vagrant-Instance](cookbooks-101-opsworks-s3-vagrant.md)
+ [Verwenden des SDK for Ruby auf einer OpsWorks Stacks-Linux-Instance](cookbooks-101-opsworks-s3-opsworks.md)
+ [Verwenden des SDK for Ruby auf einer OpsWorks Stacks-Windows-Instanz](cookbooks-101-opsworks-s3-windows.md)

# Verwenden des SDK for Ruby auf einer Vagrant-Instance
<a name="cookbooks-101-opsworks-s3-vagrant"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

In diesem Thema wird beschrieben, wie ein auf einer Vagrant-Instance ausgeführtes Rezept verwendet werden kann [AWS SDK für Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/), um eine Datei von Amazon S3 herunterzuladen. Bevor Sie beginnen, benötigen Sie zunächst eine Reihe von AWS Anmeldeinformationen — einen Zugriffsschlüssel und einen geheimen Zugriffsschlüssel —, die dem Rezept den Zugriff auf Amazon S3 ermöglichen.

**Wichtig**  
Es wird ausdrücklich empfohlen, für diesen Zweck keine Root-Anmeldeinformationen zu verwenden. Erstellen Sie stattdessen einen Benutzer mit einer entsprechenden Richtlinie und geben Sie diese Anmeldeinformationen für das Rezept an.   
Achte darauf, Anmeldeinformationen — auch nicht IAM-Benutzeranmeldedaten — nicht an einem öffentlich zugänglichen Ort zu speichern, indem du beispielsweise eine Datei mit den Anmeldeinformationen in ein öffentliches Repository oder ein Bitbucket-Repository hochlädst. GitHub Dadurch könnten Ihre Anmeldeinformationen offengelegt und die Sicherheit Ihres Kontos beeinträchtigt werden.  
 Rezepte, die auf einer EC2 EC2 Amazon-Instance ausgeführt werden, können einen noch besseren Ansatz verwenden, eine IAM-Rolle, wie unter beschrieben[Verwenden des SDK for Ruby auf einer OpsWorks Stacks-Linux-Instance](cookbooks-101-opsworks-s3-opsworks.md).  
Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Wenn Sie noch keinen geeigneten -Benutzer erstellt haben, erstellen Sie ihn wie nachfolgend beschrieben. Weitere Informationen finden Sie unter [Was ist IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/Introduction.html).

**Warnung**  
IAM-Benutzer verfügen über langfristige Anmeldeinformationen, was ein Sicherheitsrisiko darstellt. Um dieses Risiko zu minimieren, empfehlen wir, diesen Benutzern nur die Berechtigungen zu gewähren, die sie für die Ausführung der Aufgabe benötigen, und diese Benutzer zu entfernen, wenn sie nicht mehr benötigt werden.

**So erstellen Sie einen IAM-Benutzer**

1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die IAM-Konsole unter. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. Wählen Sie im Navigationsbereich **Benutzer** und gegebenenfalls Benutzer **hinzufügen aus, um einen neuen Administratorbenutzer** zu erstellen.

1. Wählen Sie auf der Seite **Berechtigungen festlegen** die Option **Richtlinien direkt anhängen** aus.

1. Geben Sie **S3** in das Suchfeld **Permissions Policies** ein, um die Amazon S3 S3-Richtlinien anzuzeigen.

   Wählen Sie **AmazonS3. ReadOnlyAccess** Wenn Sie möchten, können Sie eine Richtlinie angeben, die umfassendere Berechtigungen gewährt, z. B. **AmazonS3 FullAccess**. In der Regel werden jedoch nur die erforderlichen Berechtigungen erteilt. In diesem Fall soll das Rezept nur eine Datei herunterladen und benötigt daher nur Lesezugriff.

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

1. Wählen Sie **Benutzer erstellen** aus.

1. Erstellen Sie als Nächstes die Zugriffsschlüssel für Ihren Benutzer. Weitere Information über IAM-Zugriffsschlüssel finden Sie unter [Verwalten von Zugriffsschlüsseln für IAM-Benutzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) im *IAM-Benutzerhandbuch*.

Nun müssen Sie eine herunterzuladende Datei bereitstellen. In diesem Beispiel wird davon ausgegangen, dass Sie eine Datei `myfile.txt` in einem neu erstellten S3-Bucket `cookbook_bucket` speichern. 

**So stellen Sie eine Datei zum Herunterladen bereit**

1. Erstellen Sie eine Datei `myfile.txt` mit folgendem Text und speichern Sie sie auf Ihrem Computer.

   ```
   This is the file that you just downloaded from Amazon S3.
   ```

1. Erstellen Sie auf der [Amazon S3 S3-Konsole](https://console.aws.amazon.com/s3/) einen Bucket mit dem Namen `cookbook_bucket` in der Region **Standard** und laden Sie ihn in `myfile.txt` den Bucket hoch.

Richten Sie das Rezeptbuch wie folgt ein.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `s3bucket` und öffnen Sie es.

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben.

1. Ersetzen Sie den Text in `.kitchen.yml` durch folgenden.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
     environments_path: ./environments
   
   platforms:
     - name: ubuntu-14.04
   
   suites:
     - name: s3bucket
       provisioner:
         solo_rb:
           environment: test
       run_list:
         - recipe[s3bucket::default]
       attributes:
   ```

1. Fügen Sie zwei Verzeichnisse zu `s3bucket` hinzu: `recipes` und `environments`.

1. Erstellen Sie eine Umgebungsdatei `test.json` mit dem Namen des folgenden `default_attributes` Abschnitts `access_key` und ersetzen Sie dabei die `secret_key` Werte und durch die entsprechenden Schlüssel für Ihren Benutzer. Speichern Sie die Datei im Verzeichnis `environments` des Rezeptbuchs.

   ```
   {
     "default_attributes" : {
       "cookbooks_101" : {
         "access_key": "AKIAIOSFODNN7EXAMPLE",
         "secret_key" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       }
     },
     "chef_type" : "environment",
     "json_class" : "Chef::Environment"
   }
   ```

Es gibt mehrere Möglichkeiten, einem Rezept, das auf einer Instance ausgeführt wird, Anmeldeinformationen bereitzustellen. Achten Sie bei der Wahl der richtigen Methode darauf, dass die Schlüssel nicht versehentlich offengelegt werden und somit die Sicherheit Ihres Kontos gefährden. Es wird daher davon ausgeladen, konkrete Schlüsselwerte im Code zu verwenden. In diesem Beispiel werden die Schlüsselwerte stattdessen im Knotenobjekt gespeichert. So kann das Rezept mithilfe der Kontensyntax darauf verweisen, statt die tatsächlichen Werte offenzulegen. Greifen Sie nicht mit Root-Berechtigungen auf das Knotenobjekt zu, um das Risiko, die Schlüssel offenzulegen, möglichst gering zu halten. Weitere Informationen finden Sie unter [Bewährte Methoden für die Verwaltung von AWS-Zugriffsschlüsseln](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html).

**Anmerkung**  
Im Beispiel werden verschachtelte Attribute mit dem ersten Element `cookbooks_101` verwendet. So sind Namensüberschneidungen unwahrscheinlicher, wenn weitere `access_key`- oder `secret_key`-Attribute im Knotenobjekt vorhanden sind.

Das folgende Rezept lädt `myfile.text` aus dem Bucket `cookbook_bucket` herunter.

```
gem_package "aws-sdk ~> 3" do
  action :install
end

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

    s3 = Aws::S3::Client.new(
          :access_key_id => "#{node['cookbooks_101']['access_key']}",
          :secret_access_key => "#{node['cookbooks_101']['secret_key']}")

    myfile = s3.bucket['cookbook_bucket'].objects['myfile.txt']
    Dir.chdir("/tmp")
    File.open("myfile.txt", "w") do |f|
      f.write(myfile.read)
      f.close
    end
  end
  action :run
end
```

Der erste Teil des Rezepts installiert das SDK for Ruby, bei dem es sich um ein Gem-Paket handelt. Die Ressource [gem\$1package](https://docs.chef.io/chef/resources.html#gem-package) installiert Gems, die von Rezepten oder anderen Anwendungen verwendet werden.

**Anmerkung**  
Auf Ihrer Instance laufen in der Regel zwei unterschiedliche Versionen von Ruby. Eine davon ist eine Dedicated Instance, die vom Chef-Client verwendet wird. Die andere wird von Anwendungen und Rezepten auf der Instance verwendet. Dies ist ein wichtiger Faktor bei der Installation von Gem-Paketen, da es hierfür zwei Ressourcen gibt, [gem\$1package](https://docs.chef.io/chef/resources.html#gem-package) und [chef\$1gem](https://docs.chef.io/chef/resources.html#chef-gem). Wenn Anwendungen oder Rezepte das das Gem-Paket verwenden, müssen Sie es mit `gem_package` installieren. `chef_gem` ist nur für Gem-Pakete vorgesehen, die vom Chef-Client verwendet werden.

Das restliche Rezept besteht aus einer [ruby\$1block](https://docs.chef.io/chef/resources.html#ruby-block)-Ressource, die Ruby-Code zum Herunterladen der Datei enthält. Möglicherweise gehen Sie davon aus, dass Sie den Code direkt in das Rezept schreiben können, da es sich bei dem Rezept ja um eine Ruby-Anwendung handelt. Chef kompiliert den gesamten Code jedoch vor dem Ausführen von Ressourcen. Wenn Sie den Beispielcode direkt im Rezept speichern, versucht Ruby, die `require 'aws-sdk'`-Anweisung aufzulösen, bevor die Ressource `gem_package` ausgeführt wird. Da das SDK for Ruby noch nicht installiert wurde, schlägt die Kompilierung fehl.

Der Code in einer `ruby_block`-Ressource wird hingegen erst dann kompiliert, wenn diese Ressource ausgeführt wird. In diesem Beispiel wird die `ruby_block` Ressource ausgeführt, nachdem die `gem_package` Ressource die Installation des SDK for Ruby abgeschlossen hat, sodass der Code erfolgreich ausgeführt werden kann.

Der Code im `ruby_block` funktioniert folgendermaßen. 

1. Er erstellt ein neues [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3.html)-Objekt, das die Service-Schnittstelle bereitstellt.

   Der Zugriffsschlüssel und der geheime Schlüssel werden über die im Knotenobjekt gespeicherten Werte referenziert.

1. Er ruft die Verknüpfung `bucket.objects` des `S3`-Objekts auf. Diese gibt ein [https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html)-Objekt mit dem Namen `myfile` zurück, das die Datei `myfile.txt` darstellt.

1. Mithilfe von `Dir.chdir` wird das Arbeitsverzeichnis auf `/tmp` festgelegt.

1. Er öffnet die Datei `myfile.txt`, schreibt den Inhalt von `myfile` in diese Datei und schließt die Datei wieder.

**So führen Sie das Rezept aus**

1. Erstellen Sie eine Datei `default.rb` mit dem Beispielrezept und speichern Sie sie im Verzeichnis `recipes`.

1. Führen Sie `kitchen converge`.

1. Melden Sie sich mit `kitchen login` bei der Instance an und führen Sie `ls /tmp` aus. Die Datei `myfile.txt` sollte zusammen mit einigen Test Kitchen-Dateien und -Verzeichnissen angezeigt werden.

   ```
   vagrant@s3bucket-ubuntu-1204:~$ ls /tmp
   install.sh  kitchen  myfile.txt  stderr
   ```

   Sie können den Inhalt der Datei auch überprüfen, indem Sie `cat /tmp/myfile.txt` ausführen.

Wenn Sie fertig sind, führen Sie `kitchen destroy` aus, um die Instance zu beenden.

# Verwenden des SDK for Ruby auf einer OpsWorks Stacks-Linux-Instance
<a name="cookbooks-101-opsworks-s3-opsworks"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

In diesem Thema wird beschrieben, wie Sie das SDK for Ruby auf einer OpsWorks Stacks-Linux-Instance verwenden, um eine Datei aus einem Amazon S3 S3-Bucket herunterzuladen. OpsWorks Stacks installiert das SDK for Ruby automatisch auf jeder Linux-Instanz. Wenn Sie jedoch das Client-Objekt eines Services erstellen, müssen Sie geeignete AWS-Anmeldeinformationen `AWS::S3.new` oder entsprechende Anmeldeinformationen für andere Services bereitstellen.

Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

 [Verwenden des SDK for Ruby auf einer Vagrant-Instance](cookbooks-101-opsworks-s3-vagrant.md) zeigt, wie Sie Anmeldeinformationen im Knotenobjekt speichern und im Rezeptcode auf die Attribute verweisen, um das Risiko zu minimieren, dass Anmeldeinformationen offengelegt werden. Wenn Sie Rezepte auf einer EC2 Amazon-Instance ausführen, haben Sie eine noch bessere Option, eine [IAM-Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).

Eine IAM-Rolle funktioniert ähnlich wie ein IAM-Benutzer. Sie verfügen über eine angehängte Richtlinie, die die Berechtigungen für verschiedene AWS-Services enthält. Sie weisen jedoch einer EC2 Amazon-Instance und nicht einer Einzelperson eine Rolle zu. Anwendungen, die auf einer Instance ausgeführt werden, erhalten die Berechtigungen über die angehängte Richtlinie. Bei der Verwendung von Rollen sind die Anmeldeinformationen weder direkt noch indirekt im Code enthalten. In diesem Thema wird beschrieben, wie Sie eine IAM-Rolle verwenden können, um das Rezept [Verwenden des SDK for Ruby auf einer Vagrant-Instance](cookbooks-101-opsworks-s3-vagrant.md) auf einer EC2 Amazon-Instance auszuführen.

Sie können dieses Rezept wie in [Beispiel 9: Verwenden von EC2 Amazon-Instances](cookbooks-101-basics-ec2.md) beschrieben mit dem kitchen-ec2-Treiber in Test Kitchen ausführen. Die Installation des SDK for Ruby auf EC2 Amazon-Instances ist jedoch etwas kompliziert und nichts, womit Sie sich für OpsWorks Stacks befassen müssen. Auf allen OpsWorks Stacks Linux-Instanzen ist das SDK for Ruby standardmäßig installiert. Der Einfachheit halber verwendet das Beispiel daher eine OpsWorks Stacks-Instanz. 

Der erste Schritt besteht darin, die IAM-Rolle einzurichten. In diesem Beispiel wird der einfachste Ansatz verwendet, nämlich die EC2 Amazon-Rolle zu verwenden, die OpsWorks Stacks erstellt, wenn Sie Ihren ersten Stack erstellen. Sie heißt `aws-opsworks-ec2-role`. OpsWorks Stacks fügt dieser Rolle jedoch keine Richtlinie hinzu und gewährt daher standardmäßig keine Berechtigungen.

Sie müssen die `AmazonS3ReadOnlyAccess` Richtlinie an die `aws-opsworks-ec2-role` Rolle anhängen, um die entsprechenden Berechtigungen zu gewähren. Weitere Informationen zum Anhängen einer Richtlinie an eine Rolle finden Sie unter [Hinzufügen von IAM-Identitätsberechtigungen (Konsole)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) im *IAM-Benutzerhandbuch*.

Sie legen die Rolle beim Erstellen oder Aktualisieren eines Stacks fest. Richten Sie einen Stack mit einem benutzerdefinierten Layer wie in [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md) beschrieben ein, allerdings mit einem zusätzlichen Schritt. **Vergewissern **Sie sich auf der Seite „Stack hinzufügen**“, dass das **Standard-IAM-Instanzprofil auf 2 Rollen** festgelegt ist. aws-opsworks-ec** OpsWorks Stacks weist diese Rolle dann allen Instanzen des Stacks zu.

Beim Einrichten des Rezeptbuchs gehen Sie nahezu genauso vor wie unter [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md) beschrieben. Nachfolgend finden Sie eine kurze Zusammenfassung. Eine ausführliche Erklärung finden Sie im genannten Beispiel.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis `s3bucket_ops` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `s3bucket_ops`.

   ```
   name "s3bucket_ops"
   version "0.1.0"
   ```

1. Erstellen Sie ein Verzeichnis `recipes` in `s3bucket_ops`.

1. Erstellen Sie eine Datei `default.rb` mit dem folgenden Rezept und speichern Sie sie im Verzeichnis `recipes`.

   ```
   Chef::Log.info("******Downloading a file from Amazon S3.******")
   
   ruby_block "download-object" do
     block do
       require 'aws-sdk'
   
       s3 = AWS::S3.new
   
       myfile = s3.buckets['cookbook_bucket'].objects['myfile.txt']
       Dir.chdir("/tmp")
       File.open("myfile.txt", "w") do |f|
         f.syswrite(myfile.read)
         f.close
       end
     end
     action :run
   end
   ```

1. Erstellen Sie ein `.zip` Archiv von `s3bucket_ops` und laden Sie das Archiv in einen Amazon S3 S3-Bucket hoch. Der Einfachheit halber [veröffentlichen Sie das Archiv](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) und notieren Sie sich die entsprechende URL. Sie können Ihre Kochbücher auch in einem privaten Amazon S3 S3-Archiv oder in verschiedenen anderen Repository-Typen speichern. Weitere Informationen finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

Dieses Rezept ist dem im vorherigen Beispiel verwendeten ähnlich, allerdings mit folgenden Ausnahmen.
+ Da OpsWorks Stacks das SDK for Ruby bereits installiert hat, wurde die `chef_gem` Ressource gelöscht.
+ Das Rezept übergibt keine Anmeldeinformationen an `AWS::S3.new`.

  Die Anmeldeinformationen werden der Anwendung anhand der Rolle der Instance automatisch zugewiesen.
+ Das Rezept verwendet `Chef::Log.info`, um dem Chef-Protokoll eine Meldung hinzuzufügen.

Erstellen Sie wie folgt einen Stack für dieses Beispiel. Sie können auch einen vorhandenen Windows-Stack verwenden. Aktualisieren Sie dafür einfach wie nachfolgend beschrieben die Rezeptbücher.

**So erstellen Sie einen -Stack**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und klicken Sie auf **Add Stack (Stack hinzufügen)**.

1. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und klicken Sie auf **Add Stack (Stack hinzufügen)**.
   + **Name — RubySDK**
   + **Standard-SSH-Schlüssel** — Ein EC2 Amazon-Schlüsselpaar

   Wenn Sie ein EC2 Amazon-Schlüsselpaar erstellen müssen, finden Sie weitere Informationen unter [ EC2 Amazon-Schlüsselpaare](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie die Instance. Das Beispiel verwendet die Standardregion USA West (Oregon).

1. Klicken Sie auf **Add a layer (Layer hinzufügen)** und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu.
   + **Name** — S3Download
   + **Kurzname** — s3download

   Für Linux-Stacks können Sie einen beliebigen Layer-Typ verwenden. In diesem Beispiel werden jedoch keine der durch die anderen Layer-Typen installierten Pakete benötigt, daher ist es am einfachsten, einen benutzerdefinierten Layer zu verwenden.

1. Fügen Sie dem Layer [eine 24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und [starten Sie sie](workinginstances-starting.md).

Jetzt können Sie das Rezept installieren und ausführen.

**So führen Sie das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** **— HTTP-Archiv**
   + **Repository-URL** — Die Archiv-URL des Kochbuches, die Sie zuvor aufgenommen haben.

   Verwenden Sie für die übrigen Einstellungen die Standardwerte und klicken Sie auf **Save (Speichern)**, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf den Stack-Instances zu installieren. Wenn bereits eine ältere Version der Rezeptbücher installiert ist, werden diese überschrieben.

1. Führen Sie das Rezept aus, indem Sie den Stack-Befehl **Execute Recipes** ausführen. Achten Sie darauf, dass bei **Recipes to execute** **s3bucket\$1ops::default** eingestellt ist. Durch diesen Befehl wird Chef mit der Option `s3bucket_ops::default` ausgeführt.
**Anmerkung**  
Normalerweise lassen Sie OpsWorks Stacks [Ihre Rezepte automatisch ausführen](workingcookbook-assigningcustom.md), indem Sie sie dem entsprechenden Lebenszyklusereignis zuweisen. Sie können diese Rezepte auch durch manuelles Auslösen des Ereignisses ausführen. Verwenden Sie für Einrichtungs- und Konfigurationsereignisse einen Stack-Befehl und für Bereitstellungsereignisse und für Ereignisse zum Aufheben der Bereitstellung einen [Bereitstellungsbefehl](workingapps-deploying.md).

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie es überprüfen.

**So überprüfen Sie s3bucket\$1ops**

1. Werfen Sie zunächst einen Blick in das Chef-Protokoll. Der Stack sollte über eine Instance "opstest1" verfügen. Klicken Sie auf der Seite **Instances** auf **show** in der Spalte **Log** der Instance, um das Chef-Protokoll anzuzeigen. Blättern Sie nach unten zu Ihrem Protokolleintrag.

   ```
   ...
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache.
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache.
   [2014-07-31T17:01:46+00:00] INFO: ******Downloading a file from Amazon S3.******
   [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3)
   ...
   ```

1. [Melden Sie sich über SSH bei der Instance an](workinginstances-ssh.md) und rufen Sie den Inhalt des Verzeichnisses `/tmp` auf.

# Verwenden des SDK for Ruby auf einer OpsWorks Stacks-Windows-Instanz
<a name="cookbooks-101-opsworks-s3-windows"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
In diesem Beispiel wird davon ausgegangen, dass Sie das Beispiel [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md) bereits durchgearbeitet haben. Falls Sie das noch nicht getan haben, holen Sie das nun nach. Insbesondere wird darin beschrieben, wie Sie für Ihre Instances RDP-Zugriff aktivieren.  
Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

In diesem Thema wird beschrieben, wie Sie die Windows-Instanz [AWS SDK für Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/)auf einer OpsWorks Stacks-Instanz verwenden, um eine Datei aus einem S3-Bucket herunterzuladen.

Wenn eine Ruby-Anwendung Zugriff auf eine AWS-Ressource benötigt, müssen Sie der Anwendung AWS-Anmeldeinformationen mit den entsprechenden Berechtigungen bereitstellen. Für Rezepte ist die Verwendung einer AWS Identity and Access Management ([IAM-) Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) die beste Option für die Bereitstellung von AWS-Anmeldeinformationen. Eine IAM-Rolle funktioniert ähnlich wie ein IAM-Benutzer. Sie hat eine beigefügte Richtlinie, die Berechtigungen zur Nutzung der verschiedenen Dienste gewährt. AWS Sie weisen jedoch einer Amazon Elastic Compute Cloud (Amazon EC2) -Instance statt einer Einzelperson eine Rolle zu. Anwendungen, die auf einer Instance ausgeführt werden, erhalten die Berechtigungen über die angehängte Richtlinie. Bei der Verwendung von Rollen sind die Anmeldeinformationen weder direkt noch indirekt im Code enthalten. 

Der erste Schritt besteht darin, die IAM-Rolle einzurichten. In diesem Beispiel wird der einfachste Ansatz verwendet, nämlich die EC2 Amazon-Rolle zu verwenden, die OpsWorks Stacks erstellt, wenn Sie Ihren ersten Stack erstellen. Sie heißt `aws-opsworks-ec2-role`. OpsWorks Stacks fügt dieser Rolle jedoch keine Richtlinie hinzu und gewährt daher standardmäßig keine Berechtigungen. 

Sie müssen die `AmazonS3ReadOnlyAccess` Richtlinie an die `aws-opsworks-ec2-role` Rolle anhängen, um die entsprechenden Berechtigungen zu gewähren. Weitere Informationen zum Anhängen einer Richtlinie an eine Rolle finden Sie unter [Hinzufügen von IAM-Identitätsberechtigungen (Konsole)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) im *IAM-Benutzerhandbuch*.

Sie legen die Rolle beim Erstellen oder Aktualisieren eines Stacks fest. Richten Sie einen Stack mit einem benutzerdefinierten Layer wie in [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md) beschrieben ein, allerdings mit einem zusätzlichen Schritt. **Vergewissern **Sie sich auf der Seite „Stack hinzufügen**“, dass das **Standard-IAM-Instanzprofil auf 2 Rollen** festgelegt ist. aws-opsworks-ec** OpsWorks Stacks weist diese Rolle dann allen Instanzen des Stacks zu.

Beim Einrichten des Rezeptbuchs gehen Sie nahezu genauso vor wie unter [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md) beschrieben. Nachfolgend finden Sie eine kurze Zusammenfassung. Eine ausführliche Erklärung finden Sie im genannten Beispiel.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis `s3bucket_ops` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `s3bucket_ops`.

   ```
   name "s3download"
   version "0.1.0"
   ```

1. Erstellen Sie ein Verzeichnis `recipes` in `s3download`.

1. Erstellen Sie eine Datei `default.rb` mit dem folgenden Rezept und speichern Sie sie im Verzeichnis `recipes`. *windows-cookbooks*Ersetzen Sie es durch den Namen des S3-Buckets, in dem Sie die herunterzuladende Datei speichern möchten.

   ```
   Chef::Log.info("******Downloading an object from S3******")
   
   chef_gem "aws-sdk-s3" do
     compile_time false
     action :install
   end
   
   ruby_block "download-object" do
     block do
       require 'aws-sdk-s3'
       
       Aws.use_bundled_cert!
   
       s3_client = Aws::S3::Client.new(region:'us-west-2')
   
       s3_client.get_object(bucket: 'windows-cookbooks',
                        key: 'myfile.txt',
                        response_target: '/chef/myfile.txt')
     end
     action :run
   end
   ```

1. Erstellen Sie ein `.zip`-Archiv von `s3download` und laden Sie die Datei in einen S3-Bucket hoch. Machen Sie die Datei öffentlich und notieren Sie sich die URL.

1. Erstellen Sie eine Textdatei `myfile.txt` und laden Sie diese auf einen S3-Bucket hoch. Dies ist die Datei, die Ihr Rezept herunterladen soll, Sie können also einen beliebigen Bucket dafür verwenden.

Das Rezept führt die folgenden Aufgaben aus.

1: Installieren Sie das SDK for Ruby v2.  
Das Beispiel verwendet das SDK for Ruby, um das Objekt herunterzuladen. OpsWorks Stacks installiert dieses SDK jedoch nicht auf Windows-Instanzen, sodass der erste Teil des Rezepts eine [https://docs.chef.io/chef/resources.html#chef-gem](https://docs.chef.io/chef/resources.html#chef-gem)Ressource verwendet, um diese Aufgabe zu erledigen. Diese Ressource wird verwendet, um Gems für Chef einschließlich Rezepten zu installieren.

2: Herunterladen der Datei.  
Der dritte Teil des Rezepts verwendet eine [https://docs.chef.io/chef/resources.html#ruby-block](https://docs.chef.io/chef/resources.html#ruby-block)Ressource, um SDK for Ruby v2-Code auszuführen, um ihn `myfile.txt` aus einem S3-Bucket herunterzuladen`windows-cookbooks`, der in das `/chef` Verzeichnis der Instanz benannt ist. Ändern Sie `windows-cookbooks` in den Namen des Buckets, der `myfile.txt` enthält. 

**Anmerkung**  
Ein Rezept ist eine Ruby-Anwendung. Sie können daher Ruby-Code in den Text des Rezepts kopieren und müssen ihn nicht in einer `ruby_block`-Ressource speichern. Chef führt den Ruby-Code im Text des Rezepts jedoch vor anderen Ressourcen aus. Wenn Sie in diesem Beispiel den Download-Code in den Hauptteil des Rezepts einfügen, schlägt er fehl, da er vom SDK for Ruby abhängt und die `chef_gem` Ressource, die das SDK installiert, noch nicht ausgeführt wurde. Der Code in der `ruby_block` Ressource wird ausgeführt, wenn die Ressource ausgeführt wird, und das passiert, nachdem die `chef_gem` Ressource das SDK for Ruby installiert hat.

Erstellen Sie wie folgt einen Stack für dieses Beispiel. Sie können auch einen vorhandenen Windows-Stack verwenden. Aktualisieren Sie dafür einfach wie nachfolgend beschrieben die Rezeptbücher.

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie **Add Stack (Stack hinzufügen)** aus. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und wählen Sie **Add Stack (Stack hinzufügen)** aus.
   + **Name** — S3Download
   + **Region** — USA West (Oregon)

     Dieses Beispiel funktioniert in jeder Region, wir empfehlen jedoch, US West (Oregon) für Tutorials zu verwenden.
   + **Standardbetriebssystem** — Microsoft Windows Server 2012 R2

1. Wählen Sie **Add a layer (Layer hinzufügen)** aus und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu:
   + **Name** — S3Download
   + **Kurzname** — s3download

1. Fügen Sie dem Layer „S3Download” [eine 24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und [starten Sie sie](workinginstances-starting.md).

Jetzt können Sie das Rezept installieren und ausführen.

**So führen Sie das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** — **S3-Archiv**.
   + **Repository-URL** — Die Archiv-URL des Kochbuches, die Sie zuvor aufgezeichnet haben.

   Übernehmen Sie für die übrigen Einstellungen die Standardwerte und wählen Sie **Save** aus, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus](workingstacks-commands.md), um die aktuelle Version Ihres benutzerdefinierten Rezeptbuchs auf den Online-Instances des Stacks zu installieren. Wenn bereits eine ältere Version der Rezeptbücher installiert ist, werden diese überschrieben.

1. Führen Sie das Rezept aus, indem Sie den Stack-Befehl **Execute Recipes** ausführen. Achten Sie darauf, dass bei **Recipes to execute** **s3download::default** eingestellt ist. Durch diesen Befehl wird Chef mit der Option `s3download::default` ausgeführt.
**Anmerkung**  
Normalerweise lassen Sie OpsWorks Stacks [Ihre Rezepte automatisch ausführen](workingcookbook-assigningcustom.md), indem Sie sie dem entsprechenden Lebenszyklusereignis zuweisen. Sie können diese Rezepte auch durch manuelles Auslösen des Ereignisses ausführen. Verwenden Sie für Einrichtungs- und Konfigurationsereignisse einen Stack-Befehl und für Bereitstellungsereignisse und für Ereignisse zum Aufheben der Bereitstellung einen [Bereitstellungsbefehl](workingapps-deploying.md).

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie es überprüfen.

**So überprüfen Sie s3download**

1. Werfen Sie zunächst einen Blick in das Chef-Protokoll. Der Stack sollte über eine Instance "s3download1" verfügen. Wählen Sie auf der Seite **Instances** die Option **show** in der Spalte **Log** der Instance aus, um das Chef-Protokoll anzuzeigen. Blättern Sie nach unten zu Ihrem Protokolleintrag.

   ```
   ...
   [2015-05-01T21:11:04+00:00] INFO: Loading cookbooks [s3download@0.0.0]
   [2015-05-01T21:11:04+00:00] INFO: Storing updated cookbooks/s3download/recipes/default.rb in the cache.
   [2015-05-01T21:11:04+00:00] INFO: ******Downloading an object from S3******
   [2015-05-01T21:11:04+00:00] INFO: Processing chef_gem[aws-sdk] action install (s3download::default line 3)
   [2015-05-01T21:11:05+00:00] INFO: Processing ruby_block[download-object] action run (s3download::default line 8) 
   ...
   ```

1. [Melden Sie sich mit RDP bei der Instance an](workinginstances-rdp.md) und rufen Sie das Verzeichnis `c:\chef` auf.

# Installieren von Windows-Software
<a name="cookbooks-101-opsworks-install-software"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
In diesen Beispielen wird davon ausgegangen, dass Sie das Beispiel [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md) bereits durchgearbeitet haben. Falls Sie das noch nicht getan haben, holen Sie das nun nach. Insbesondere wird darin beschrieben, wie Sie für Ihre Instances RDP-Zugriff aktivieren.

 Auf Windows-Instances ist Windows Server 2012 R2 Standard installiert, daher müssen Sie in der Regel noch einige Softwarepakete installieren. Wie Sie dabei genau vorgehen, hängt von der Art der Software ab.
+  Windows-Funktionen sind optionale Systemkomponenten, einschließlich des.NET-Frameworks und Internetinformationsdienste (IIS), die Sie auf Ihre Instanz herunterladen können.
+ Drittanbietersoftware verfügt in der Regel über eine Installationsdatei, beispielsweise eine MSI-Datei, die Sie auf die Instance herunterladen und ausführen.

  Auch Microsoft-Software verfügt teilweise über ein Installationsprogramm.

In diesem Abschnitt wird beschrieben, wie Sie Rezeptbücher implementieren, um Windows-Funktionen und -Pakete zu installieren. Außerdem wird das Chef-Windows-Rezeptbuch vorgestellt. Dieses enthält Ressourcen und Hilfsfunktionen, die die Rezeptimplementierung auf Windows-Instances vereinfachen.

**Topics**
+ [Installieren einer Windows-Funktion: IIS](cookbooks-101-opsworks-install-software-feature.md)
+ [Installieren eines Pakets auf einer Windows-Instance](cookbooks-101-opsworks-install-software-package.md)

# Installieren einer Windows-Funktion: IIS
<a name="cookbooks-101-opsworks-install-software-feature"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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 den Windows-Funktionen handelt es sich um eine Reihe optionaler Systemkomponenten, einschließlich des.NET-Frameworks und Internetinformationsdienste (IIS). In diesem Thema wird beschrieben, wie Sie ein Kochbuch implementieren, um ein häufig verwendetes Feature, Internetinformationsdienste (IIS), zu installieren.

**Anmerkung**  
[Installieren eines Pakets](cookbooks-101-opsworks-install-software-package.md) zeigt, wie Sie Software mithilfe eines Installationsprogramms, beispielsweise einer MSI-Datei, installieren, die Sie auf die Instance herunterladen und dort ausführen. [IIS-Rezeptbücher](https://github.com/opscode-cookbooks/iis) 

In [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md) wird erläutert, wie Sie mithilfe einer `powershell_script`-Ressource Windows-Funktionen installieren. Dieses Beispiel zeigt einen alternativen Ansatz: Verwenden Sie die Ressource des Chef [Windows-Kochbuchs](https://github.com/opscode-cookbooks/windows). `windows_feature` Dieses Rezeptbuch enthält eine Reihe von Ressourcen, die mithilfe von [Abbildbereitstellung und Verwaltung (DISM)](https://technet.microsoft.com/en-us/library/dd744256%28v=ws.10%29.aspx) unterschiedliche Aufgaben, wie die Installation von Funktionen, auf Windows-Systemen ausführen.

**Anmerkung**  
Chef verfügt auch über ein IIS-Rezeptbuch, das Sie zur Verwaltung von IIS verwenden können. Weitere Informationen finden Sie unter [IIS-Rezeptbuch](https://github.com/opscode-cookbooks/iis).

**So richten Sie das Rezeptbuch ein**

1. Gehen Sie zum [ GitHub Windows-Kochbuch-Repository und laden Sie das `windows` Kochbuch](https://github.com/opscode-cookbooks/windows) herunter.

   In diesem Beispiel wird davon ausgegangen, dass Sie das `windows`-Repository als ZIP-Datei herunterladen. Sie können aber auch das Repository klonen.

1. Gehen Sie zum Kochbuch-Repository [chef\$1handler und laden Sie das Kochbuch herunter GitHub ](https://github.com/opscode-cookbooks/chef_handler). `chef-handler`

   `windows` ist eine Abhängigkeit des Rezeptbuchs `chef_handler` und wird nicht direkt verwendet. In diesem Beispiel wird davon ausgegangen, dass Sie das `chef_handler`-Repository als ZIP-Datei herunterladen. Sie können aber auch das Repository klonen.

1. Entpacken Sie die Rezeptbücher `windows` und `chef_handler` in die Verzeichnisse `windows` und `chef_handler` Ihres Rezeptbuchverzeichnisses.

1. Erstellen Sie ein Unterverzeichnis `install-iis` im Rezeptbuchverzeichnis und öffnen Sie es.

1. Fügen Sie eine Datei `metadata.rb` zu `install-iis` mit dem folgenden Inhalt hinzu:

   ```
   name "install-iis"
   version "0.1.0"
   
   depends "windows"
   ```

   Mit der Anweisung `depends` können Sie die Ressourcen im Rezeptbuch `windows` in Ihren Rezepten verwenden.

1. Erstellen Sie ein Unterverzeichnis `recipes` in `install-iis` und legen Sie ein Datei `default.rb` mit folgendem Rezeptcode in diesem Verzeichnis an.

   ```
   %w{ IIS-WebServerRole IIS-WebServer }.each do |feature|
     windows_feature feature do
       action :install
     end
   end
   
   service 'w3svc' do
     action [:start, :enable]
   end
   ```

   Das Rezept installiert mithilfe der Ressource `windows` des Rezeptbuchs `windows_feature` folgende Komponenten:

   1. Die [IIS-Webserver-Rolle](https://technet.microsoft.com/en-us/library/cc770634.aspx)

   1. Den [IIS-Webserver](https://technet.microsoft.com/en-us/library/cc753433%28v=ws.10%29.aspx)

   Dann startet und aktiviert das Rezept mithilfe einer [https://docs.chef.io/chef/resources.html#service](https://docs.chef.io/chef/resources.html#service)-Ressource den IIS-Service (W3SVC).
**Anmerkung**  
Um eine vollständige Liste aller verfügbaren Windows-Funktionen anzuzeigen, [melden Sie sich mit RDP bei der Instance an](workinginstances-rdp.md), öffnen Sie ein Befehlszeilenfenster und führen Sie den folgenden Befehl aus. Die vollständige Liste ist sehr umfangreich.  

   ```
   dism /online /Get-Features
   ```

1. Erstellen Sie ein `.zip`-Archiv, das die Rezeptbücher `install-iis`, `chef_handler` und `windows` enthält und laden Sie das Archiv in einen S3-Bucket hoch. Machen Sie das Archiv öffentlich und notieren Sie sich die URL. In diesem Beispiel wird davon ausgegangen, dass das Archiv den Namen `install-iis.zip` trägt. Weitere Informationen finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Erstellen Sie wie folgt einen Stack für dieses Beispiel. Sie können auch einen vorhandenen Windows-Stack verwenden. Aktualisieren Sie dafür einfach wie nachfolgend beschrieben die Rezeptbücher.

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie **Add Stack (Stack hinzufügen)** aus. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und wählen Sie **Add Stack (Stack hinzufügen)** aus.
   + **Name — InstallIis**
   + **Region** — USA West (Oregon)

     Dieses Beispiel funktioniert in jeder Region, wir empfehlen jedoch, US West (Oregon) für Tutorials zu verwenden.
   + **Standardbetriebssystem** — Microsoft Windows Server 2012 R2

1. Wählen Sie **Add a layer (Layer hinzufügen)** aus und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu:
   + **Name** — IIS
   + **Kurzname** — iis

1. Fügen Sie dem IIS-Layer [eine 24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und [starten Sie sie](workinginstances-starting.md).

Jetzt können Sie das Rezeptbuch installieren und das Rezept ausführen.

**So installieren Sie das Rezeptbuch und führen das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** — **S3-Archiv**
   + **Repository-URL** — Die URL des Kochbucharchivs, die Sie zuvor aufgezeichnet haben.

   Übernehmen Sie für die übrigen Einstellungen die Standardwerte und wählen Sie **Save** aus, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl **Update Custom Cookbooks** aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf den Online-Instances des Stacks zu installieren. Wenn bereits eine ältere Version der Rezeptbücher installiert ist, werden diese überschrieben.

1. Führen Sie das Rezept aus, indem Sie den Stack-Befehl **Execute Recipes** ausführen. Achten Sie darauf, dass bei **Recipes to execute** **install-iis::default** eingestellt ist. Dieser Befehl weist Chef an, die angegebenen Rezepte auszuführen.
**Anmerkung**  
In diesem Beispiel wird der Einfachheit halber **Execute Recipes** verwendet, aber normalerweise lassen Sie OpsWorks Stacks [Ihre Rezepte automatisch ausführen](workingcookbook-assigningcustom.md), indem Sie sie dem entsprechenden Lebenszyklusereignis zuweisen. Sie können diese Rezepte auch durch manuelles Auslösen des Ereignisses ausführen. Verwenden Sie für Einrichtungs- und Konfigurationsereignisse einen Stack-Befehl und für Bereitstellungsereignisse und für Ereignisse zum Aufheben der Bereitstellung einen [Bereitstellungsbefehl](workingapps-deploying.md).

1. Um die Installation zu überprüfen, [melden Sie sich mit RDP bei der Instance an](workinginstances-rdp.md) und öffnen Sie den Windows Explorer. Das Dateisystem sollte jetzt über ein Verzeichnis `C:\inetpub` verfügen. IIS sollte in der Systemsteuerung unter Verwaltung in der Liste der Services relativ weit unten aufgeführt sein. Hier trägt es jedoch den Namen World Wide Web Publishing Service und nicht IIS.

# Installieren eines Pakets auf einer Windows-Instance
<a name="cookbooks-101-opsworks-install-software-package"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
In diesem Beispiel wird davon ausgegangen, dass Sie das Beispiel [Ausführen eines Rezepts auf einer Windows-Instance](cookbooks-101-opsworks-opsworks-windows.md) bereits durchgearbeitet haben. Falls Sie das noch nicht getan haben, holen Sie das nun nach. Insbesondere wird darin beschrieben, wie Sie für Ihre Instances RDP-Zugriff aktivieren.

Wenn die Software über ein Installationsprogramm wie eine MSI-Datei verfügt, müssen Sie diese Datei auf die Instance herunterladen und dort ausführen. In diesem Beispiel wird gezeigt, wie Sie ein Rezeptbuch implementieren, um ein MSI-Paket, die Python-Laufzeitumgebung, zu installieren und die zugehörigen Umgebungsvariablen zu konfigurieren. Weitere Informationen zum Installieren von Windows-Funktionen wie IIS finden Sie unter [Installieren einer Windows-Funktion: IIS](cookbooks-101-opsworks-install-software-feature.md).

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis `installpython` und öffnen Sie es.

1. Fügen Sie eine Datei `metadata.rb` zu `installpython` mit dem folgenden Inhalt hinzu:

   ```
   name "installpython"
   version "0.1.0"
   ```

1. Fügen Sie die Verzeichnisse `recipes` und `files` zu `installpython` hinzu und fügen Sie ein Verzeichnis `default` zu "files" hinzu.

1. Laden Sie ein Python-Paket für Windows von der [Python-Website](https://www.python.org/downloads/windows/) in das Verzeichnis `files\default` des Rezeptbuchs herunter. In diesem Beispiel wird 3.5.0a3 für Windows x86- mithilfe der MSI-Datei `python-3.4.3.amd64.msi`python-64. installiert.

1. Erstellen Sie im Verzeichnis `default.rb` eine Datei `recipes` mit folgendem Rezeptcode.

   ```
   directory 'C:\tmp' do
     rights :full_control, 'Everyone'
     recursive true
     action :create
   end
   
   cookbook_file 'C:\tmp\python-3.4.3.amd64.msi' do
     source "python-3.4.3.amd64.msi"
     rights :full_control, 'Everyone'
     action :create
   end
   
   windows_package 'python' do
     source 'C:\tmp\python-3.4.3.amd64.msi'
     action :install
   end
   
   env "PATH" do
     value 'c:\python34'
     delim ";"
     action :modify
   end
   ```

   Vom Rezept werden folgende Schritte ausgeführt:

   1. Es verwendet eine [Verzeichnis](https://docs.chef.io/chef/resources.html#directory)-Ressource, um ein Verzeichnis `C:\tmp` zu erstellen.

      Weitere Informationen zu dieser Ressource finden Sie unter [Beispiel 3: Erstellen von Verzeichnissen](cookbooks-101-basics-directories.md).

   1. Es verwendet eine [cookbook\$1file](https://docs.chef.io/chef/resources.html#cookbook-file)-Ressource, um das Installationsprogramm aus dem Verzeichnis `files\default` des Rezeptbuchs in das Verzeichnis `C:\tmp` zu kopieren.

      Weitere Informationen zu dieser Ressource finden Sie unter [Installieren einer Datei mithilfe eines Rezeptbuchs](cookbooks-101-basics-files.md#cookbooks-101-basics-files-cookbook_file).

   1. Es verwendet eine [windows\$1package](https://docs.chef.io/chef/resources.html#windows-package)-Ressource, um das MSI-Installationsprogramm auszuführen und Python unter `c:\python34` zu installieren.

      Das Installationsprogramm erstellt die erforderlichen Verzeichnisse und installiert die Dateien. Es nimmt jedoch keine Änderungen an der Umgebungsvariable `PATH` des Systems vor.

   1. Es verwendet eine [env](https://docs.chef.io/chef/resources.html#env)-Ressource, um `c:\python34` zum Systempfad hinzuzufügen.

      Mit der Ressource "env" werden Umgebungsvariablen festgelegt. In diesem Fall können Sie mit dem Rezept einfach Python-Skripte auf der Befehlszeile ausführen, indem Sie `c:\python34` im Systempfad einfügen.
      + Der Ressourcenname gibt den Namen der Umgebungsvariablen an, in diesem Beispiel `PATH`.
      + Über das Attribut `value` wird der Wert der Variablen, in diesem Beispiel `c:\\python34` festgelegt (Sie müssen vor das Zeichen `\` "\$1" setzen).
      + Mit der Aktion `:modify` wird der angegebene Wert dem aktuellen Wert der Variablen vorangestellt.
      + Das Attribut `delim` setzt ein Trennzeichen, um den neuen Wert von dem vorhandenen Wert zu trennen, in diesem Beispiel `;`.

1. Erstellen Sie ein `.zip`-Archiv von `installpython`, laden Sie das Archiv in einen S3-Bucket hoch und veröffentlichen Sie es. Notieren Sie sich die URL des Archivs. Weitere Informationen finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Erstellen Sie wie folgt einen Stack für dieses Beispiel. Sie können auch einen vorhandenen Windows-Stack verwenden. Aktualisieren Sie dafür einfach wie nachfolgend beschrieben die Rezeptbücher.

**Erstellen eines Stacks**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie **Add Stack (Stack hinzufügen)** aus. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und wählen Sie **Add Stack (Stack hinzufügen)** aus.
   + **Name —** InstallPython
   + **Region** — USA West (Oregon)

     Dieses Beispiel funktioniert in jeder Region, wir empfehlen jedoch, US West (Oregon) für Tutorials zu verwenden.
   + **Standardbetriebssystem** — Microsoft Windows Server 2012 R2

1. Wählen Sie **Add a layer (Layer hinzufügen)** aus und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu:
   + **Bezeichnung** — Python
   + **Kurzname** — Python

1. Fügen Sie dem Python-Layer [eine 24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und [starten Sie sie](workinginstances-starting.md).

Nachdem die Instance online ist, können Sie das Rezeptbuch installieren und das Rezept ausführen.

**So installieren Sie das Rezeptbuch und führen das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** — **S3-Archiv**.
   + **Repository-URL** — Die Archiv-URL des Kochbuches, die Sie zuvor aufgezeichnet haben.

   Übernehmen Sie für die übrigen Einstellungen die Standardwerte und wählen Sie **Save** aus, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl **Update Custom Cookbooks** aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf den Online-Instances des Stacks zu installieren. Wenn bereits eine ältere Version des Rezeptbuchs installiert ist, wird dieses überschrieben.

1. Führen Sie das Rezept aus, indem Sie den Stack-Befehl **Execute Recipes** ausführen. Achten Sie darauf, dass bei **Recipes to execute** **installpython::default** eingestellt ist. Durch diesen Befehl wird Chef mit der Option `installpython::default` ausgeführt.
**Anmerkung**  
In diesem Beispiel wird der Einfachheit halber **Execute Recipes** verwendet, aber normalerweise lassen Sie OpsWorks Stacks [Ihre Rezepte automatisch ausführen](workingcookbook-assigningcustom.md), indem Sie sie dem entsprechenden Lebenszyklusereignis zuweisen. Sie können diese Rezepte auch durch manuelles Auslösen des Ereignisses ausführen. Verwenden Sie für Einrichtungs- und Konfigurationsereignisse einen Stack-Befehl und für Bereitstellungsereignisse und für Ereignisse zum Aufheben der Bereitstellung einen [Bereitstellungsbefehl](workingapps-deploying.md).

1. Um die Installation zu überprüfen, [melden Sie sich mit RDP bei der Instance an](workinginstances-rdp.md) und öffnen Sie den Windows Explorer. 
   + Das Dateisystem sollte jetzt über ein Verzeichnis `C:\Python34` verfügen.
   + Wenn Sie auf der Befehlszeile `path` ausführen, sollte das Ergebnis etwa wie folgt aussehen: `PATH=c:\python34;C:\Windows\system32;...`
   + Wenn Sie auf der Befehlszeile `python --version` ausführen, sollte `Python 3.4.3` zurückgegeben werden.

# Überschreiben von integrierten Attributen
<a name="cookbooks-101-opsworks-attributes"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
Dieses Thema bezieht sich nur auf Linux-Stacks. Auf Windows-Stacks können Sie integrierte Attribute nicht überschreiben.

OpsWorks Stacks installiert auf jeder Instanz eine Reihe integrierter Kochbücher. Viele dieser Rezeptbücher unterstützen die integrierten Layers und über ihre Attributdateien werden zahlreiche Standardsystem- und -anwendungseinstellungen wie die Apache-Serverkonfiguration festgelegt. Wenn Sie diese Einstellungen in Attributdateien speichern, können Sie viele Konfigurationseinstellungen anpassen, indem Sie die entsprechenden integrierten Attribute auf eine der folgenden Weisen überschreiben:
+ Definieren Sie das Attribut in benutzerdefinierter JSON.

  Diese Methode ist einfach und flexibel. Allerdings müssen Sie das benutzerdefinierte JSON-Objekt manuell eingeben, daher gibt es keine robuste Lösung, die Attributdefinitionen zu verwalten.
+ Implementieren Sie ein benutzerdefiniertes Rezeptbuch und definieren Sie das Attribut in einer Attributdatei `customize.rb`.

  Diese Methode ist zwar weniger flexibel als eine benutzerdefinierte JSON, aber weniger fehleranfällig, da Sie benutzerdefinierte Rezeptbücher an der Quelle kontrollieren können.

In diesem Thema wird anhand des Apache-Servers beispielhaft beschrieben, wie Sie mit der Attributdatei eines benutzerdefinierten Rezeptbuchs integrierte Attribute überschreiben können. Weitere Informationen zum Überschreiben von Attributen mit benutzerdefinierter JSON finden Sie unter [Nutzen eines benutzerdefinierten JSON-Objekts](workingcookbook-json-override.md). Eine allgemeine Beschreibung, wie Attribute überschrieben werden, finden Sie unter [Überschreiben der Attribute](workingcookbook-attributes.md).

**Anmerkung**  
Konfigurationseinstellungen lassen sich am besten durch Überschreiben von Attributen anpassen. Jedoch sind Einstellungen nicht immer in Attributen gespeichert. In diesem Fall können Sie die Konfigurationsdatei oft anpassen, indem Sie die Vorlage überschreiben, die von integrierten Rezepten zum Erstellen der Konfigurationsdatei verwendet wird. Ein Beispiel finden Sie unter [Überschreiben von integrierten Vorlagen](cookbooks-101-opsworks-templates.md).

Die integrierten Attribute sind in der Regel Werte in den Vorlagendateien, anhand derer Einrichtungsrezepte Konfigurationsdateien erstellen. Zum Beispiel verwendet eines der `apache2`-Einrichtungsrezepte, [https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/recipes/default.rb](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/recipes/default.rb), die Vorlage [https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb), um die Hauptkonfigurationsdatei des Apache-Servers, `httpd.conf` (Amazon Linux) oder `apache2.conf` (Ubuntu) zu erstellen. Nachfolgend finden Sie einen Auszug aus der Vorlagendatei:

```
...
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests <%= node[:apache][:keepaliverequests] %>
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout <%= node[:apache][:keepalivetimeout] %>
##
## Server-Pool Size Regulation (MPM specific)
##

...
```

Die Einstellung `KeepAliveTimeout` in diesem Beispiel ist der Wert des Attributs `[:apache][:keepalivetimeout]`. Der Standardwert dieses Attributs wird in der Attributdatei `apache2`[`apache.rb` des Rezeptbuchs ](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/attributes/apache.rb) festgelegt, wie der nachfolgende Auszug zeigt:

```
...
# General settings
default[:apache][:listen_ports] = [ '80','443' ]
default[:apache][:contact] = 'ops@example.com'
default[:apache][:log_level] = 'info'
default[:apache][:timeout] = 120
default[:apache][:keepalive] = 'Off'
default[:apache][:keepaliverequests] = 100
default[:apache][:keepalivetimeout] = 3
...
```

**Anmerkung**  
Weitere Informationen zu häufig verwendeten integrierten Attributen finden Sie unter [Integrierte Rezeptbuchattribute](attributes-recipes.md).

Damit integrierte Attribute überschrieben werden können, enthalten alle integrierten Rezeptbücher die Attributdatei `customize.rb`, die über eine `include_attribute`-Anweisung in allen Modulen integriert ist. Die Datei `customize.rb` eines integrierten Rezeptbuchs enthält keine Attributdefinitionen und wirkt sich nicht auf integrierte Attribute aus. Wenn Sie integrierte Attribute überschreiben möchten, erstellen Sie ein benutzerdefiniertes Rezeptbuch mit demselben Namen wie das integrierte Rezeptbuch und speichern Ihre angepassten Attributdefinitionen in einer Attributdatei mit dem Namen `customize.rb`. Diese Datei hat Vorrang vor der integrierten Version und wird auf allen zugehörigen Modulen gespeichert. Wenn Sie in Ihrer Datei `customize.rb` integrierte Attribute definieren, überschreiben diese die entsprechenden integrierten Attribute.

In diesem Beispiel wird gezeigt, wie Sie das intergierte Attribut `[:apache][:keepalivetimeout]` vom ursprünglichen Wert 3 auf 5 setzen. Dieselbe Methode lässt sich auch auf andere integrierte Attribute anwenden. Achten Sie jedoch darauf, welche Attribute Sie überschreiben. Wenn Sie beispielsweise Attribute im Namespace `opsworks` überschreiben, kann dies zu Problemen mit einigen integrierten Rezepten führen. 

**Wichtig**  
Versuchen Sie nicht, integrierte Attribute zu überschreiben, indem Sie eine Kopie der integrierten Attributdatei bearbeiten. Sie *könnten* zwar eine Kopie von `apache.rb` im Verzeichnis `apache2/attributes` Ihres benutzerdefinierten Rezeptbuchs speichern und einige Einstellungen anpassen. Diese Datei hat jedoch Vorrang vor der integrierten Version, sodass die integrierten Rezepte nun Ihre Version von `apache.rb` verwenden. Wenn OpsWorks Stacks die integrierte `apache.rb` Datei später ändert, erhalten Rezepte die neuen Werte nicht, es sei denn, Sie aktualisieren Ihre Version manuell. Durch die Verwendung `customize.rb` überschreiben Sie nur die angegebenen Attribute. Die integrierten Rezepte rufen weiterhin automatisch up-to-date Werte für jedes Attribut ab, das Sie nicht überschrieben haben.

Erstellen Sie zunächst ein benutzerdefiniertes Rezeptbuch.

**So erstellen Sie das Rezeptbuch**

1. Erstellen Sie in Ihrem Verzeichnis `opsworks_cookbooks` ein Rezeptbuchverzeichnis namens `apache2` und öffnen Sie es.

   Damit das benutzerdefinierte Rezeptbuch integrierte Attribute überschreiben kann, muss es denselben Namen wie das integrierte Rezeptbuch haben, in diesem Beispiel also `apache2`.

1. Erstellen Sie im Verzeichnis `apache2` ein Verzeichnis `attributes`.

1. Erstellen Sie eine Datei `customize.rb` im Verzeichnis `attributes` und definieren Sie darin die Attribute des integrierten Rezeptbuchs, die Sie überschreiben möchten. In diesem Beispiel sollte die Datei folgenden Text enthalten: 

   ```
   normal[:apache][:keepalivetimeout] = 5
   ```
**Wichtig**  
Damit ein benutzerdefiniertes Attribut ein integriertes Attribut überschreiben kann, muss es mindestens den Typ `normal` sowie denselben Knotennamen wie das entsprechende integrierte Attribut aufweisen. Über den Typ `normal` wird sichergestellt, dass das benutzerdefinierte Attribut Vorrang vor integrierten Attributen hat, die den Typ `default` haben. Weitere Informationen finden Sie unter [Priorität von Attributen](workingcookbook-attributes-precedence.md).

1. Erstellen Sie ein `opsworks_cookbooks` benanntes `.zip` Archiv `opsworks_cookbooks.zip` und laden Sie das Archiv in einen Amazon Simple Storage Service (Amazon S3) -Bucket hoch. Machen Sie die Datei der Einfachheit halber [öffentlich](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html). Notieren Sie sich die URL. Sie können Ihre Kochbücher auch in einem privaten Amazon S3 S3-Archiv oder in anderen Repository-Typen speichern. Weitere Informationen finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Erstellen Sie einen Stack und installieren Sie das Rezeptbuch, um das benutzerdefinierte Attribut zu verwenden.

**So verwenden Sie benutzerdefinierte Attribute**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie dann **Add Stack (Stack hinzufügen)** aus.

1. Legen Sie die folgenden Standardeinstellungen fest.
   + **Name** — ApacheConfig
   + **Region** — USA West (Oregon)

     Du kannst deinen Stack in jeder Region platzieren, aber wir empfehlen US West (Oregon) für Tutorials.
   + **Standard-SSH-Schlüssel** — Ein EC2 key pair

     Wenn Sie ein EC2 key pair erstellen müssen, finden Sie weitere Informationen unter [ EC2 Amazon-Schlüsselpaare](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie der Stack.

   Wählen Sie **Advanced >> (Erweiterte Einstellungen >>)** aus, bestätigen Sie die Option **Use custom Chef cookbooks (Benutzerdefinierte Rezeptbücher verwenden)** mit **Yes** und legen Sie anschließend die folgenden Einstellungen fest:
   + **Repository-Typ** — **HTTP-Archiv**
   + **Repository-URL** — Die URL des Kochbucharchivs, die Sie zuvor aufgezeichnet haben

   Übernehmen Sie für die anderen Einstellungen die Standardwerte und wählen Sie **Add Stack** aus, um den Stack zu erstellen.
**Anmerkung**  
In diesem Beispiel wird das Standardbetriebssystem Amazon Linux verwendet. Sie können aber auch Ubuntu verwenden. Der einzige Unterschied besteht darin, dass auf Ubuntu-Systemen das integrierte Einrichtungsrezept eine Konfigurationsdatei mit denselben Einstellungen namens `apache2.conf` erstellt und sie im Verzeichnis `/etc/apache2` speichert. 

1. Wählen **Sie Ebene hinzufügen** und [fügen Sie dem Stack dann eine Java App Serverebene](layers-java.md) mit Standardeinstellungen hinzu.

1. Fügen Sie dem Layer eine [24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und starten Sie sie.

   Für dieses Beispiel ist eine t2.Micro-Instance ausreichend.

1. Nachdem die Instance online ist, [melden Sie sich mit SSH dort an](workinginstances-ssh.md). Die Datei `httpd.conf` ist im Verzeichnis `/etc/httpd/conf`. In der Datei sehen Sie Ihre benutzerdefinierte Einstellung für `KeepAliveTimeout`. Die übrigen Einstellungen haben die Standardwerte aus der integrierten Datei `apache.rb`. Der relevante Teil der Datei `httpd.conf` sollte etwa wie folgt aussehen:

   ```
   ...
   #
   # KeepAliveTimeout: Number of seconds to wait for the next request from the
   # same client on the same connection.
   #
   KeepAliveTimeout 5
   ...
   ```

# Überschreiben von integrierten Vorlagen
<a name="cookbooks-101-opsworks-templates"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden 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).

**Anmerkung**  
Dieses Thema bezieht sich nur auf Linux-Stacks. Auf Windows-Stacks können Sie integrierte Vorlagen nicht überschreiben.

Die in OpsWorks Stacks integrierten Rezepte verwenden Vorlagen, um Dateien auf Instanzen zu erstellen, hauptsächlich Konfigurationsdateien für Server wie Apache. Zum Beispiel verwenden die `apache2`-Rezepte die Vorlage [https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb), um die Hauptkonfigurationsdatei des Apache-Servers zu erstellen, `httpd.conf` (Amazon Linux) oder `apache2.conf` (Ubuntu). 

Die meisten Konfigurationseinstellungen in diesen Vorlagen werden durch Attribute abgebildet, daher lassen sich Konfigurationsdateien am besten durch Überschreiben der entsprechenden integrierten Attribute anpassen. Ein Beispiel finden Sie unter [Überschreiben von integrierten Attributen](cookbooks-101-opsworks-attributes.md). Wenn Sie jedoch Einstellungen anpassen möchten, für die es keine entsprechenden integrierten Attribute gibt oder die in der Vorlage gar nicht vorhanden sind, müssen Sie die Vorlage selbst überschreiben. In diesem Thema wird beschrieben, wie Sie eine integrierte Vorlage überschreiben, um eigene Apache-Konfigurationseinstellungen festzulegen.

Sie können benutzerdefinierte Fehlermeldungen für Apache hinzufügen, indem Sie `ErrorDocument`-Einstellungen in der Datei `httpd.conf` einfügen. `apache2.conf.erb` enthält nur einige auskommentierte Beispiele, wie Sie im Folgenden sehen können:

```
...
#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
...
```

Da diese Einstellungen in Kommentaren fest programmiert sind, können Sie durch Überschreiben der Attribute keine benutzerdefinierten Werte festlegen. Sie müssen die Vorlage selbst überschreiben. Anders als bei Attributen gibt es jedoch keine Möglichkeit, eine Vorlagendatei nur teilweise zu überschreiben. Erstellen Sie ein benutzerdefiniertes Rezeptbuch mit demselben Namen wie die integrierte Version, kopieren Sie die Vorlagendatei in dasselbe Unterverzeichnis und passen Sie die Datei an Ihre Bedürfnisse an. In diesem Thema erfahren Sie, wie Sie die Vorlage `apache2.conf.erb` überschreiben, um für den Fehler 500 eine benutzerdefinierte Fehlermeldung anzuzeigen. Allgemeine Erläuterungen zum Überschreiben von Vorlagen finden Sie unter [Verwenden von benutzerdefinierten Vorlagen](workingcookbook-template-override.md).

**Wichtig**  
Wenn Sie eine integrierte Vorlage überschreiben, verwenden integrierte Rezepte statt der integrierten Version Ihre angepasste Version der Vorlage. Wenn OpsWorks Stacks die integrierte Vorlage aktualisiert, ist die benutzerdefinierte Vorlage nicht mehr synchron und funktioniert möglicherweise nicht mehr richtig. OpsWorks Stacks nimmt solche Änderungen nicht oft vor, und wenn sich eine Vorlage ändert, listet OpsWorks Stacks die Änderungen auf und gibt Ihnen die Möglichkeit, auf eine neue Version zu aktualisieren. Wir empfehlen Ihnen, auf Änderungen am [OpsWorks  Stacks-Repository](https://github.com/aws/opsworks-cookbooks) zu achten und Ihre benutzerdefinierte Vorlage gegebenenfalls manuell zu aktualisieren. Das Repository enthält eigene Verzeichnisse für jede unterstützte Chef-Version. Achten Sie daher darauf, das richtige Verzeichnis zu verwenden.

Erstellen Sie zunächst ein benutzerdefiniertes Rezeptbuch.

**So erstellen Sie das Rezeptbuch**

1. Erstellen Sie in dem Verzeichnis `opsworks_cookbooks` ein Rezeptbuchverzeichnis namens `apache2` und öffnen Sie es anschließend. Damit das benutzerdefinierte Rezeptbuch integrierte Vorlagen überschreiben kann, muss es denselben Namen wie das integrierte Rezeptbuch haben, in diesem Beispiel also `apache2`.
**Anmerkung**  
Falls Sie die Anleitung [Überschreiben von integrierten Attributen](cookbooks-101-opsworks-attributes.md) bereits durchgearbeitet haben, können Sie das Rezeptbuch `apache2` aus diesem Beispiel übernehmen und Schritt 2 überspringen.

1. Erstellen Sie eine Datei `metadata.rb` mit folgendem Inhalt und speichern Sie sie im Verzeichnis `apache2`.

   ```
   name "apache2"
   version "0.1.0"
   ```

1. Erstellen Sie im Verzeichnis `apache2` ein Verzeichnis `templates/default`.
**Anmerkung**  
Das `templates/default` Verzeichnis funktioniert für Amazon Linux-Instances, die die `apache2.conf.erb` Standardvorlage verwenden. Ubuntu 14.04-Instances verwenden eine für das Betriebssystem spezifische Vorlage `apache2.conf.erb`, die sich im Verzeichnis `templates/ubuntu-14.04` befindet. Wenn Sie Ihre Änderungen auch auf Ubuntu 14.04-Instances verwenden möchten, müssen Sie auch diese Vorlage überschreiben.

1. Kopieren Sie die [integrierte Vorlage `apache2.conf.erb`](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb) in Ihr Verzeichnis `templates/default`. Öffnen Sie die Vorlagendatei, entfernen Sie die Kommentarzeichen der Zeile `ErrorDocument 500` und geben Sie die folgende benutzerdefinierte Fehlermeldung ein: 

   ```
   ...
   ErrorDocument 500 "A custom error message."
   #ErrorDocument 404 /missing.html
   ...
   ```

1. Erstellen Sie ein `.zip` Archiv `opsworks_cookbooks` mit Namen `opsworks_cookbooks.zip` und laden Sie die Datei dann in einen Amazon Simple Storage Service (Amazon S3) -Bucket hoch. [Machen Sie das Archiv der Einfachheit halber öffentlich](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html). Notieren Sie sich die URL des Archivs. Sie können Ihre Kochbücher auch in einem privaten Amazon S3 S3-Archiv oder in anderen Repository-Typen speichern. Weitere Informationen finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

   Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

**Anmerkung**  
Der Einfachheit halber wird in diesem Beispiel eine fest programmierte Meldung in die Vorlage eingefügt. Um diese zu ändern, müssen Sie die Vorlage ändern und [das Rezeptbuch erneut installieren](workingcookbook-installingcustom-enable-update.md). Wenn Sie flexibler sein möchten, können Sie [ein benutzerdefiniertes Standardattribut](cookbooks-101-opsworks-attributes.md) für die Fehlermeldung in der Attributdatei des benutzerdefinierten Rezeptbuchs `customize.rb` definieren und den Wert dieses Attributs `ErrorDocument 500` zuweisen. Wenn Sie das Attribut beispielsweise `[:apache][:custom][:error500]` nennen, sieht die entsprechende Zeile in der Datei `apache2.conf.erb` etwa folgendermaßen aus:  

```
...
ErrorDocument 500 <%= node[:apache][:custom][:error500] %>
#ErrorDocument 404 /missing.html
...
```
Nun können Sie die benutzerdefinierte Fehlermeldung jederzeit ändern, indem Sie `[:apache][:custom][:error500]` überschreiben. Wenn Sie [das Attribut mit benutzerdefinierter JSON überschreiben](workingcookbook-json-override.md), müssen Sie das Rezeptbuch überhaupt nicht bearbeiten.

Erstellen Sie einen Stack und installieren Sie das Rezeptbuch, um die benutzerdefinierte Vorlage zu verwenden.

**So verwenden Sie benutzerdefinierte Vorlagen**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und wählen Sie dann **Add Stack (Stack hinzufügen)** aus.

1. Legen Sie die folgenden Standardeinstellungen fest:
   + **Name** — ApacheTemplate
   + **Region** — USA West (Oregon)
   + **Standard-SSH-Schlüssel** — Ein Amazon Elastic Compute Cloud (Amazon EC2) -Schlüsselpaar

     Wenn Sie ein EC2 Amazon-Schlüsselpaar erstellen müssen, finden Sie weitere Informationen unter [ EC2 Amazon-Schlüsselpaare](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie die Instance.

   Wählen Sie **Advanced >> (Erweiterte Einstellungen >>)** und dann **Use custom Chef cookbooks (Benutzerdefinierte Rezeptbücher verwenden)** aus, um die folgenden Einstellungen anzugeben:
   + **Repository-Typ** — **HTTP-Archiv**
   + **Repository-URL** — Die URL des Kochbucharchivs, die Sie zuvor aufgezeichnet haben

   Übernehmen Sie für die anderen Einstellungen die Standardwerte und wählen Sie **Add Stack** aus, um den Stack zu erstellen.

1. Wählen **Sie Ebene hinzufügen** und [fügen Sie dem Stack dann eine Java App Server-Ebene](layers-java.md) mit Standardeinstellungen hinzu.

1. Fügen Sie dem Layer eine [24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und starten Sie sie.

   Für dieses Beispiel ist eine t2.Micro-Instance ausreichend.

1. Nachdem die Instance online ist, [melden Sie sich mit SSH dort an](workinginstances-ssh.md). Die Datei `httpd.conf` ist im Verzeichnis `/etc/httpd/conf`. Die Datei sollte nun Ihre benutzerdefinierte Einstellung für `ErrorDocument` enthalten, die etwa folgendermaßen aussieht: 

   ```
   ...
   # Some examples:
   ErrorDocument 500 "A custom error message."
   #ErrorDocument 404 /missing.html
   #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
   #ErrorDocument 402 http://www.example.com/subscription_info.html
   ...
   ```