Verwenden von externen Rezeptbüchern auf einer Linux-Instance: Berkshelf - 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.

Verwenden von externen Rezeptbüchern auf einer Linux-Instance: Berkshelf

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.

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 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 AWS 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 Amazon EC2 EC2-Instances, einschließlich AWS 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 AWS OpsWorks Stacks, sodass dieses Thema Beispiele für beide Plattformen enthält. Weitere Informationen zur Verwendung von Berkshelf finden Sie unter Berkshelf.

Verwenden von Berkshelf mit Test Kitchen und Vagrant

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. Führen Sie berks --version aus, um zu überprüfen, ob Berkshelf korrekt installiert wurde.

  2. Das Rezeptbuch für dieses Thema heißt "external_cookbook". 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.

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

  • 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 AWS 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'
  2. 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.0getting-started- ( (oder ähnlich) finden.

  3. Ersetzen Sie external_cookbook::default in der Ausführungsliste .kitchen.yml durch getting-started::default. In diesem Beispiel werden keine Rezepte aus "external_cookbook" 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:
  4. 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_cookbook" und "getting-started".

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

Berkshelf mit Stacks verwenden AWS OpsWorks

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

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

Dieses Beispiel zeigt, wie Sie Berkshelf verwenden, um das Community-Kochbuch „Erste Schritte“ auf einer Stacks-Instanz zu installieren. AWS 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.

Anmerkung

Wenn Sie zum ersten Mal ein benutzerdefiniertes Kochbuch auf einem AWS OpsWorks Stacks-Stack installieren, sollten Sie zuerst das Beispiel durchgehen. Ausführen eines Rezepts auf einer Linux-Instance

Erstellen Sie zunächst einen Stack, wie nachfolgend kurz zusammengefasst. Weitere Informationen finden Sie unter Erstellen eines neuen Stacks.

Erstellen eines Stacks
  1. Öffnen Sie die AWS OpsWorks  Stacks-Konsole und klicken Sie auf Add Stack (Stack hinzufügen).

  2. 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 Amazon EC2 EC2-Schlüsselpaar

    Wenn Sie ein Amazon EC2 EC2-Schlüsselpaar erstellen müssen, finden Sie weitere Informationen unter Amazon EC2 EC2-Schlüsselpaare. Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie die Instance. Das Beispiel verwendet die Standardregion USA West (Oregon).

  3. Klicken Sie auf Add a layer (Layer hinzufügen) und fügen Sie dem Stack einen benutzerdefinierten Layer 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.

  4. Fügen Sie dem BerksTest Layer eine 24/7-Instanz mit Standardeinstellungen hinzu, aber starten Sie sie noch nicht.

Bei AWS OpsWorks Stacks müssen sich Kochbücher in einem Remote-Repository mit einer Standardverzeichnisstruktur befinden. Anschließend geben Sie die Download-Informationen an AWS 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 AWS OpsWorks Stacks unterstützt auch HTTP-Archive, Git-Repositorys und Subversion-Repositorys. Weitere Informationen finden Sie unter Rezeptbuch-Repositorys.

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? oder Wie lösche ich einen S3 Bucket?.

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.

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

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

  4. Erstellen Sie ein .zip Archiv vonberkstest_cookbooks, laden Sie das Archiv in einen Amazon S3 S3-Bucket hoch, machen Sie das Archiv öffentlich 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, und legen Sie folgende Einstellungen fest:

    • Repository-TypHTTP-Archiv

    • Repository-URL — Die URL des Kochbuch-Archivs, die Sie zuvor aufgezeichnet haben

    • Berkshelf verwalten — Ja

    Die ersten beiden Einstellungen versorgen AWS 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.

  2. Bearbeiten Sie den BerksTest Layer, um die folgenden Rezepte zum Setup-Lifecycle-Ereignis des Layers hinzuzufügen.

    • getting-started::default

    • createfile::default

  3. Starten Sie die Instance. Das Setup-Ereignis tritt ein, nachdem der Startvorgang der Instanz abgeschlossen ist. AWS 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

  4. Nachdem die Instance online ist, melden Sie sich mit SSH dort an. Sie sollten Folgendes sehen:

    • /srv/www/shared muss example_data.json enthalten.

    • /root muss chef-getting-started.txt enthalten.

      AWS OpsWorks Stacks führt Rezepte als Root-Benutzer aus, sodass Getting-Started die Datei im Verzeichnis und nicht in Ihrem Home-Verzeichnis installiert. /root