Chef の検索での属性値の取得 - AWS OpsWorks

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

Chef の検索での属性値の取得

重要

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

注記

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

スタック設定およびデプロイ属性値をノードオブジェクトから直接取得する操作は複雑になる場合があり、Windows スタックでは使用できません。別のアプローチは、Chef の検索を使用して目的の属性のクエリを実行することです。Chef サーバーに慣れている場合は、AWS OpsWorks スタックでの Chef の検索の動作が多少異なることがわかります。AWS OpsWorks スタックでは、chef-client がローカルモードで使用されるため、Chef の検索は、chef-zero と呼ばれる Chef サーバーのローカルバージョンに依存します。したがってその検索の対象は、リモートサーバーではなくインスタンスのノードオブジェクトにローカルに保存されているデータです。

検索をローカルに保存されたデータに制限することは通常は問題になりません。AWS OpsWorks スタックインスタンスのノードオブジェクトには、スタック設定およびデプロイ属性が含まれているためです。これらには、レシピで通常は Chef サーバーから取得されるほぼすべてのデータが含まれていて、同じ名前が使用されています。そのため通常は、Chef サーバー用に記述された検索コードを変更することなく AWS OpsWorks スタックインスタンスで使用できます。詳細については、「Chef の検索の使用」を参照してください。

以下に示しているのは、検索クエリの基本構造です。

result = search(:search_index, "key:pattern")
  • 検索インデックスでは、クエリが適用される属性と、返されるオブジェクトのタイプを指定します。

  • キーでは、属性名を指定します。

  • パターンでは、取得する属性の値を指定します。

    特定の属性値のクエリを実行したり、ワイルドカードを使用して属性値の範囲のクエリを実行したりできます。

  • 結果として、クエリに一致するオブジェクトのリストが返されます。各オブジェクトは、複数の関連属性が保存されているハッシュテーブルです。

    例えば、node の検索インデックスを使用した場合、クエリによってインスタンスオブジェクトのリストが返され、各オブジェクトはクエリに一致した各インスタンスに対応しています。各オブジェクトは、インスタンスの設定 (ホスト名や IP アドレスなど) を定義する属性のセットが保存されているハッシュテーブルです。

たとえば、以下のクエリでは node 検索インデックスを使用しています。これは、スタックのインスタンス (Chef の用語ではノード) に適用される標準の Chef インデックスです。そのクエリでは myhost のホスト名とインスタンスが検索されます。

result = search(:node, "hostname:myhost")

検索によって、ホスト名が myhost であるインスタンスオブジェクトのリストが返されます。たとえば、最初のインスタンスのオペレーティングシステムが必要な場合、クエリは result[0][:os] で表すことになります。クエリで複数のオブジェクトが返される場合は、それらのオブジェクトのリストを取得して、必要な情報を得ることができます。

レシピで検索を使用する方法の詳細は、使用しているのが Linux スタックか Windows スタックかによって異なります。以下のトピックでは、両方のスタックタイプの例を示しています。