

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
<a name="cookbooks-101-opsworks-opsworks-stack-config-node"></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).

**Anmerkung**  
Diese Methode funktioniert nur auf Linux-Stacks.

[Nachahmen der Stack-Konfiguration und Bereitstellungsattribute auf Vagrant](opsworks-opsworks-mock.md) 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. Wenn Sie sich dies nur schwer vorstellen können, betrachten Sie das Beispiel im JSON-Format im folgenden Verfahren.

In diesem Beispiel wird gezeigt, wie Sie Daten aus der Stack-Konfigurations- und Bereitstellungs-JSON für die Layers eines Stacks abrufen.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis in `opsworks_cookbooks` namens `listip` und öffnen Sie es.

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben.

1. Fügen Sie zwei Verzeichnisse zu `listip` hinzu: `recipes` und `environments`.

1. 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"
             }
           }
         }
       }
     }
   }
   ```

1. Erstellen Sie eine Umgebungsdatei `test.json`, fügen Sie die Beispiel-JSON in `default_attributes` ein und speichern Sie die Datei im Verzeichnis `environments` des Rezeptbuchs. Die Datei sollte etwa wie folgt aussehen (der Kürze halber ist ein Großteil der Beispiel-JSON durch Ellipsen verkürzt dargestellt).

   ```
   {
     "default_attributes" : {
       "opsworks": {
         "layers": {
           ...
         }
       }
     },
     "chef_type" : "environment",
     "json_class" : "Chef::Environment"
   }
   ```

1. 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 den Layer IDs zu protokollieren.

```
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**

1. Erstellen Sie eine Datei `default.rb` mit dem Beispielrezept und speichern Sie sie im Verzeichnis `recipes`.

1. 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**

1. Ersetzen Sie den Code in `default.rb` durch den Code aus dem Beispielrezept.

1. 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**  
Sammlungen von Stack-Konfigurations- und Bereitstellungs-JSON werden meist durchnummeriert, um Daten für eine bestimmte bereitgestellte App wie beispielsweise das Bereitstellungsverzeichnis abzurufen. Ein Beispiel finden Sie unter [Bereitstellungsrezepte](create-custom-deploy.md).