

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 属性値の直接取得
<a name="cookbooks-101-opsworks-opsworks-stack-config-node"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

**注記**  
このアプローチは Linux スタックにのみ使用できます。

「[Vagrant でのスタック設定およびデプロイ属性の模倣](opsworks-opsworks-mock.md)」では、特定の属性を直接参照するためのノード構文を使用して、スタック設定およびデプロイ属性を取得する方法について説明しています。これが最良のアプローチである場合もあります。しかし、多くの属性は、内容や名前がスタックごとに違ったり、特定のスタックでも時間と共に変化したりするコレクションまたはリストで定義されています。例えば、`deploy` 属性には、アプリケーションの属性のリストが含まれており、アプリケーションの短縮名が付けられています。アプリケーションの属性名を含むこのリストは通常、スタックによっても、デプロイによっても異なります。

リストまたはコレクション内の属性を列挙して必要なデータを取得する方法が便利なことが多く、この方法でなければならないこともあります。たとえば、スタックのインスタンスのパブリック IP アドレスを知りたいとします。その情報は `['opsworks']['layers']` 属性にありますが、この属性はスタックのレイヤーごとにレイヤーの短い名前を持つ 1 個の要素を含んでいるハッシュテーブルに設定されています。各レイヤー要素が、レイヤーの属性を含むハッシュテーブルに設定されます。属性の 1 つが `['instances']` です。次に、その要素が、レイヤーのインスタンスごとにインスタンスの短い名前を持っている属性を含んでいる別のハッシュテーブルに設定されます。各インスタンス属性は、パブリック IP アドレスを表す `['ip']` などのインスタンス属性を含む、さらに別のハッシュテーブルに設定されます。これの視覚化に問題がある場合は、以下の手順にある JSON 形式の例を参照してください。

この例では、スタックのレイヤーのスタック設定およびデプロイメント JSON からデータを取得する方法を示します。

**クックブックをセットアップするには**

1. `opsworks_cookbooks` 内に `listip` という名前のディレクトリを作成し、そこに移動します。

1. 「[例 1: パッケージのインストール](cookbooks-101-basics-packages.md)」で説明されているとおりに Test Kitchen を初期化および設定します。

1. `listip`: `recipes` と `environments` にディレクトリを 2 つ追加します。

1. 関連する属性を含む MyStack 設定およびデプロイ属性を編集して JSON バージョンを作成します。次のようになります。

   ```
   {
     "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. `test.json` という名前の環境ファイルを作成し、例の JSON を `default_attributes` に貼り付けて、ファイルをクックブックの `environments` フォルダに保存します。ファイルは以下のようになります (簡潔にするために、例の JSON のほとんどを省略符号で表しています)。

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

1. `.kitchen.yml` のテキストを以下に置き換えます。

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

クックブックをセットアップすると、レイヤー ID を記録する次のレシピを使用できます。

```
node['opsworks']['layers'].each do |layer, layerdata|
  log "#{layerdata['name']} : #{layerdata['id']}"
end
```

レシピは `['opsworks']['layers']` 内のレイヤーを列挙し、各レイヤーの名前と ID を記録します。

**レシピを記録しながらレイヤーID を実行するには**

1. 例のレシピで `default.rb` という名前のファイルを作成し、`recipes` ディレクトリに保存します。

1. `kitchen converge` を実行します。

出力の関連する部分は次のようになります。

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

インスタンスの IP アドレスを一覧表示するには、次のような入れ子のループが必要です。

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

内側のループで各レイヤーのインスタンスを反復処理して、IP アドレスを記録します。

**レシピを記録しながらインスタンス IP を実行するには**

1. `default.rb` 内のコードを例のレシピに置き換えます。

1. `kitchen converge` を実行してレシピを実行します。

出力の関連する部分は次のようになります。

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

完了したら、`kitchen destroy` を実行します。次のトピックでは、新しいクックブックを使用します。

**注記**  
スタック設定およびデプロイメント JSON のコレクションを列挙する最も一般的な理由の 1 つは、デプロイメントディレクトリなど、デプロイされた特定のアプリのデータを取得することです。例については、[Deploy レシピ](create-custom-deploy.md)を参照してください。