属性値の直接取得 - AWS OpsWorks

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

属性値の直接取得

重要

AWS OpsWorks Stacks はもはや新規顧客を受け付けていません。既存のお客様は、2024 年 5 月 26 OpsWorks 日まではコンソール、API、CLI、 CloudFormation リソースを通常どおり使用できますが、その時点で廃止されます。この移行に備えて、 AWS Systems Manager できるだけ早くスタックをに移行することをおすすめします。詳細については、「AWS OpsWorks Stacks サポート終了に関する FAQ」および「AWS OpsWorks StacksAWS Systems Manager アプリケーションマネージャへのアプリケーションの移行」を参照してください。

注記

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

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

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

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

クックブックをセットアップするには
  1. opsworks_cookbooks 内に listip という名前のディレクトリを作成し、そこに移動します。

  2. 例 1: パッケージのインストール」で説明されているとおりに Test Kitchen を初期化および設定します。

  3. listip: recipesenvironments にディレクトリを 2 つ追加します。

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

    { "default_attributes" : { "opsworks": { "layers": { ... } } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }
  6. .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 ディレクトリに保存します。

  2. 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 内のコードを例のレシピに置き換えます。

  2. 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 レシピを参照してください。