Nachahmen der Stack-Konfiguration und Bereitstellungsattribute auf Vagrant - 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.

Nachahmen der Stack-Konfiguration und Bereitstellungsattribute auf Vagrant

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

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

AWS OpsWorks Stacks fügt dem Knotenobjekt für jede Instanz in Ihrem Stack für jedes Lebenszyklusereignis Stackkonfigurations- und Bereitstellungsattribute 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 AWS OpsWorks Stacks-Instances verwenden eines oder mehrere dieser Attribute.

Eine Instanz, die in einer Vagrant-Box ausgeführt wird, wird nicht von AWS 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 AWS 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 simulieren.

So richten Sie das Rezeptbuch ein
  1. Erstellen Sie ein Unterverzeichnis von opsworks_cookbooks namens printjson und öffnen Sie es.

  2. Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben.

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

  • 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 AWS 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, 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 beschriebenErste Schritte mit Chef 11 Linux-Stacks, einschließlich der Bereitstellung von SimplePhpApp. Wenn Sie möchten, können Sie die zweite PHP App Server-Instanz weglassenSchritt 4: Skalieren MyStack, die in aufgerufen wird. Die Beispiele verwenden diese Attribute nicht.

  2. Falls Sie das noch nicht getan haben, starten Sie die Instance php-app1 und melden Sie sich über SSH an.

  3. Führen Sie im Terminal-Fenster den folgenden agent cli-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.

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

  5. 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 aufenvironment.

    • json_class— Setze dieses Element aufChef::Environment.

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

      Um die AWS OpsWorks Stacks-Umgebung besser zu replizieren, könnten Sie den lokalen Modus des Chef-Clients 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.

  3. 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 AWS OpsWorks Stacks-Instanz ausgeführt würde.

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