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.
Direktes Abrufen von Attributwerten
Wichtig
Das Tool AWS OpsWorks Stacks Der Dienst hat am 26. Mai 2024 das Ende seiner Nutzungsdauer 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 AWS Support Team ein AWS Re:post oder
Anmerkung
Diese Methode funktioniert nur auf Linux-Stacks.
Nachahmen der Stack-Konfiguration und Bereitstellungsattribute auf Vagrant 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. Falls Sie Schwierigkeiten haben, dies zu visualisieren, finden Sie im folgenden Verfahren ein Beispiel im JSON Format.
Dieses Beispiel zeigt, wie Daten aus der Stack-Konfiguration und -Bereitstellung JSON für die Ebenen eines Stacks abgerufen werden.
So richten Sie das Rezeptbuch ein
-
Erstellen Sie ein Verzeichnis in
opsworks_cookbooks
namenslistip
und öffnen Sie es. -
Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben.
-
Fügen Sie zwei Verzeichnisse zu
listip
hinzu:recipes
undenvironments
. -
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" } } } } } }
-
Erstellen Sie eine Umgebungsdatei mit dem Namen
test.json
, fügen Sie das Beispiel JSON ein und speichern Sie die Datei imenvironments
Ordner des Kochbuches.default_attributes
Die Datei sollte etwa wie folgt aussehen (der Kürze halber JSON wird der Großteil des Beispiels durch Auslassungspunkte dargestellt).{ "default_attributes" : { "opsworks": { "layers": {
...
} } }, "chef_type" : "environment", "json_class" : "Chef::Environment" } -
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 die Ebene zu protokollieren. IDs
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
-
Erstellen Sie eine Datei
default.rb
mit dem Beispielrezept und speichern Sie sie im Verzeichnisrecipes
. -
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
-
Ersetzen Sie den Code in
default.rb
durch den Code aus dem Beispielrezept. -
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
Einer der häufigsten Gründe für die Aufzählung einer Stack-Konfiguration und einer JSON Deployment-Sammlung ist das Abrufen von Daten für eine bestimmte bereitgestellte App, z. B. das zugehörige Deployment-Verzeichnis. Ein Beispiel finden Sie unter Bereitstellungsrezepte.