

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Schritt 3: Erstellen und Bereitstellen eines benutzerdefinierten Rezeptbuchs
<a name="other-services-redis-cookbook"></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).

Der Stack ist so noch nicht funktionsfähig. Sie müssen Ihre Anwendung für den Zugriff auf den Redis-Server aktivieren. Die flexibelste Lösung ist die Ablage einer YAML-Datei mit den Zugriffsinformationen im Unterorder `config` der Anwendung. Die Anwendung kann anschließend die Informationen aus der Datei abrufen. Mit diesem Ansatz können Sie die Verbindungsinformationen ändern, ohne die Anwendung neu schreiben oder erneut bereitstellen zu müssen. Geben Sie für dieses Beispiel der Datei den Namen `redis.yml`. Die Datei muss den Host- und Port-Angaben des ElastiCache -Clusters enthalten, wie nachstehend dargestellt:

```
host: cache-cluster-hostname
port: cache-cluster-port
```

Sie könnten diese Datei manuell auf Ihre Server kopieren, aber ein besserer Ansatz besteht darin, ein *Chef-Rezept* zum Generieren der Datei zu implementieren und OpsWorks Stacks das Rezept auf jedem Server ausführen zu lassen. Chef-Rezepte sind spezielle Ruby-Anwendungen, mit denen OpsWorks Stacks Aufgaben auf Instanzen wie das Installieren von Paketen oder das Erstellen von Konfigurationsdateien ausführt. Die Rezepte sind in einem *Rezeptbuch* gebündelt, das mehrere Rezepte und zugehörige Dateien enthalten kann, wie z. B. Vorlagen für Konfigurationsdateien. Das Kochbuch befindet sich in einem Repository wie GitHub und muss eine Standardverzeichnisstruktur haben. Wenn Sie noch nicht über ein benutzerdefiniertes Rezeptbuch-Repository verfügen, finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md) Informationen, wie Sie es erstellen können.

Fügen Sie für dieses Beispiel ein Rezeptbuch mit dem Namen `redis-config` zu Ihrem Rezeptbuch-Repository mit folgendem Inhalt hinzu:

```
my_cookbook_repository
  redis-config
    recipes
      generate.rb
    templates
      default
        redis.yml.erb
```

Das Verzeichnis `recipes` enthält ein Rezept mit dem Namen `generate.rb`, mit der die Konfigurationsdatei der Anwendung aus `redis.yml.erb` folgendermaßen erzeugt wird:

```
node[:deploy].each do |app_name, deploy_config|
  # determine root folder of new app deployment
  app_root = "#{deploy_config[:deploy_to]}/current"

  # use template 'redis.yml.erb' to generate 'config/redis.yml'
  template "#{app_root}/config/redis.yml" do
    source "redis.yml.erb"
    cookbook "redis-config"

    # set mode, group and owner of generated file
    mode "0660"
    group deploy_config[:group]
    owner deploy_config[:user]

    # define variable “@redis” to be used in the ERB template
    variables(
      :redis => deploy_config[:redis] || {}
    )

    # only generate a file if there is Redis configuration
    not_if do
      deploy_config[:redis].blank?
    end
  end
end
```

Das Rezept hängt von Daten aus dem [JSON-Objekt OpsWorks Stacks-Stack-Konfiguration und Bereitstellung](workingcookbook-json.md) ab, das auf jeder Instanz installiert ist und detaillierte Informationen über den Stack und alle bereitgestellten Apps enthält. Der `deploy`-Knoten des Objekts hat folgende Struktur:

```
{
   ...
  "deploy": {
    "app1": {
      "application" : "short_name",
      ...
    }
    "app2": {
      ...
    }
    ...
  }
}
```

Der Bereitstellungsknoten enthält für jede bereitgestellte Anwendungen jeweils einen Satz eingebetteter JSON-Objekte, der mit der Kurzbezeichnung der Anwendung benannt ist. Jedes Objekt enthält eine Gruppe von Attributen, die die Konfiguration der Anwendung definieren, wie beispielsweise das Dokument-Stammverzeichnis und den Anwendungstyp. Eine Liste der Bereitstellungsattribute finden Sie unter [Bereitstellungsattribute](attributes-json-deploy.md). Die Werte der Stack-Konfiguration und JSON-Bereitstellung können in den Rezepten mithilfe der Chef-Attributsyntax dargestellt werden. Beispielsweise stellt `[:deploy][:app1][:application]` die Kurzbezeichnung der Anwendung App1 dar. 

Für jede Anwendung in `[:deploy]` führt das Rezept den zugehörigen Programmblock aus, wobei `deploy_config` das Anwendungsattribut darstellt. Das Rezept setzt `app_root` auf das Stammverzeichnis der Anwendung, `[:deploy][:app_name][:deploy_to]/current`. Anschließend wird mithilfe einer Chef-[Vorlagenressource](https://docs.chef.io/chef/resources.html#template) eine Konfigurationsdatei `redis.yml.erb` erstellt und im Verzeichnis `app_root/config` gespeichert.

 Konfigurationsdateien werden in der Regel mit Vorlagen erstellt, in denen die meisten Einstellungen von Chef-*Attributen* definiert sind. Mit Attributen können Sie unter Verwendung eines benutzerdefinierten JSON-Objekts Einstellungen ändern, wie nachfolgend beschrieben, anstatt die Vorlagedatei neu zu schreiben. Die Vorlage `redis.yml.erb` enthält Folgendes:

```
host: <%= @redis[:host] %>
port: <%= @redis[:port] || 6379 %>
```

Die Elemente <%... %> sind Platzhalter für einen Attributwert.
+ `<%= @redis[:host] %>` stellt den Wert `redis[:host]` dar, der dem Hostnamen des Cache-Clusters entspricht.
+ `<%= @redis[:port] || 6379 %>` gibt den Wert von `redis[:port]` an, oder wenn dieses Attribut nicht definiert ist, lautet der Standard-Port 6379.

Die Ressource `template` funktioniert folgendermaßen:
+ `source` und `cookbook` geben jeweils Namen für die Vorlage und das Rezeptbuch an.
+ `mode`, `group`und `owner` geben der Konfigurationsdatei dieselben Zugriffsrechte wie die Anwendung.
+ Im Abschnitt `variables` wird die in der Vorlage verwendete Variable `@redis` auf den Attributwert `[:redis]` der Anwendung festgelegt.

  Die `[:redis]`-Attributwerte werden unter Verwendung eines benutzerdefinierten JSON-Objekts festgelegt, wie nachfolgend beschrieben. Es handelt sich nicht um Standard-Anwendungsattribute.
+ Der Befehl `not_if` stellt sicher, dass das Rezept keine Konfigurationsdatei erstellt, wenn bereits eine vorhanden ist.

Nachdem Sie das Rezeptbuch erstellt haben, müssen Sie es für den Rezeptbuch-Cache jeder Instance bereitstellen. Mit diese Operation wird nicht das Rezept ausgeführt, sondern lediglich das Rezeptbuch in den Stack-Instances installiert. Normalerweise führen Sie ein Rezept aus, indem Sie es einem Lebenszyklusereignis eines Layers zuweisen, wie nachfolgend beschrieben.

**Bereitstellen Ihres benutzerdefinierten Rezeptbuchs**

1. **Klicken Sie auf der OpsWorks **Stacks-Stack-Seite** auf **Stack-Einstellungen** und dann auf Bearbeiten.**

1. Legen Sie im Abschnitt **Configuration Management (Konfigurationsverwaltung)** die Option **Use custom Chef cookbooks (Verwenden von benutzerdefinierten Chef-Rezeptbüchern)** auf **Yes (Ja)** fest, geben Sie die Repository-Information des Rezeptbuchs an und klicken Sie auf **Save (Speichern)**, um die Stack-Konfiguration zu aktualisieren.  
![\[Configuration form for custom Chef cookbooks with repository details and options.\]](http://docs.aws.amazon.com/de_de/opsworks/latest/userguide/images/redis_walkthrough_cookbook.png)

1. Klicken Sie auf der Seite **Stack** auf **Run Command**, wählen Sie den Stack-Befehl **Update Custom Cookbooks (Aktualisieren benutzerdefinierter Rezeptbücher)** aus und klicken Sie auf **Update Custom Cookbooks (Aktualisieren benutzerdefinierter Rezeptbücher)**, um das neue Rezeptbuch im Rezeptbuch-Cache der Instance zu installieren.   
![\[Run Command interface showing Update Custom Cookbooks option and instance selection for Rails App Server.\]](http://docs.aws.amazon.com/de_de/opsworks/latest/userguide/images/redis_walkthrough_command.png)

Wenn Sie Ihr Rezeptbuch ändern, führen Sie einfach **Update Custom Cookbooks (Aktualisieren benutzerdefinierter Rezeptbücher)** erneut aus, um die aktualisierte Version zu installieren. Weitere Informationen zu diesem Verfahren finden Sie unter [Installieren von benutzerdefinierten Rezeptbüchern](workingcookbook-installingcustom-enable.md).