属性値の直接取得 - AWS OpsWorks

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

属性値の直接取得

重要

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

注記

このアプローチは 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:

クックブックを設定したら、次のレシピを使用してレイヤー をログに記録できますIDs。

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