Schritt 3: Erstellen und Bereitstellen eines benutzerdefinierten Rezeptbuchs - AWS OpsWorks

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

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 oder über den AWS Premium-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. In diesem Beispiel sollte die Datei wie folgt benannt werden redis.yml und den Hostnamen und Port des ElastiCache Clusters enthalten:

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 AWS OpsWorks Stacks das Rezept auf jedem Server ausführen zu lassen. Chef-Rezepte sind spezielle Ruby-Anwendungen, mit denen AWS 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, z. B. GitHub, und muss eine Standardverzeichnisstruktur haben. Wenn Sie noch nicht über ein benutzerdefiniertes Rezeptbuch-Repository verfügen, finden Sie unter Rezeptbuch-Repositorys 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 AWS OpsWorks Stacks-Stack-Konfiguration und Bereitstellung 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. 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 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, groupund 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 AWS OpsWorks Stacks-Stack-Seite auf Stack-Einstellungen und dann auf Bearbeiten.

  2. 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.

  3. 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.

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.