

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

# 属性を上書きして OpsWorks スタック設定をカスタマイズする
<a name="workingcookbook-attributes"></a>

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

**注記**  
Windows スタックと Chef 12 Linux スタックの場合、 OpsWorks スタックは組み込みレシピとカスタムレシピに別々の Chef 実行を使用します。つまり、このセクションで説明している手法を使用して、Windows スタックおよび Chef 12 Linux スタック用の組み込み属性を上書きすることはできません。

レシピとテンプレートは、レイヤーの設定やアプリケーションサーバーの設定など、インスタンスやスタックに固有の情報に対応するさまざまな Chef 属性に依存します。これらの属性には複数のソースがあります。
+ **[Custom JSON]** (カスタム JSON) - オプションで、スタックを作成、更新、またはクローン化するとき、またはアプリケーションをデプロイするときに、オプションでカスタム JSON 属性を指定できます。
+ **スタック設定属性** –OpsWorks スタックは、コンソール設定で指定した情報など、スタック設定情報を保持するためにこれらの属性を定義します。
+ **Deployment attributes** (デプロイ属性) - AWS OpsWorks では、Deploy イベントのデプロイ関連の属性を定義します。
+ **Cookbook attributes** (クックブックの属性) - 組み込みのクックブックやカスタムクックブックには、通常、1 つ以上の [attribute files](workingcookbook-installingcustom-components-attributes.md) (属性ファイル) が含まれており、属性ファイルにはアプリケーションサーバー設定などのクックブック固有の値を表す属性が含まれます。
+ **Chef** (シェフ) - Chef の [Ohai tool](http://docs.chef.io/resource_ohai.html) (Ohai ツール) は、CPU タイプやインストールされているメモリなど、さまざまなシステム設定を表す属性を定義します。

スタック設定属性、デプロイ属性、組み込みクックブック属性のリストについては、「[スタック設定およびデプロイ属性: Linux](attributes-json-linux.md)」および「[組み込みクックブックの属性](attributes-recipes.md)」を参照してください。Ohai の属性の詳細については、「[Ohai](https://docs.chef.io/ohai.html)」を参照してください。

Deploy や Configure などの [lifecycle event](workingcookbook-events.md) (ライフサイクルイベント) が発生したり、`execute_recipes` または `update_packages` などの [stack command](workingstacks-commands.md) (スタックコマンド) を実行すると、 OpsWorks スタックは次のように動作します。
+ 対応するコマンドを、影響を受ける各インスタンスのエージェントに送信します。

  エージェントは適切なレシピを実行します。たとえば、Deploy イベントの場合、エージェントは組み込みの Deploy レシピを実行した後、カスタム Deploy レシピを実行します。
+ カスタム JSON 属性とデプロイ属性をスタック設定属性にマージし、それらの属性をインスタンスにインストールします。

カスタム JSON、スタック設定、デプロイ、クックブック、Ohai の各属性が*ノードオブジェクト*にマージされ、属性値としてレシピに渡されます。インスタンスは、スタック設定属性に関しては、すべてのカスタム JSON を含めて基本的にステートレスです。デプロイまたはスタックコマンドを実行すると、関連付けられたレシピでは、そのコマンドでダウンロードされたスタック設定属性が使用されます。

**Topics**
+ [属性の優先順位](workingcookbook-attributes-precedence.md)
+ [カスタム JSON を使用した属性の上書き](workingcookbook-json-override.md)
+ [カスタムクックブック属性を使用した OpsWorks スタック属性の上書き](workingcookbook-cookbook-attributes.md)

# 属性の優先順位
<a name="workingcookbook-attributes-precedence"></a>

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

属性を一意に定義した場合、Chef によってその属性はノードオブジェクトに組み込まれるだけです。ただし、任意の属性ソースが任意の属性を定義できるため、同じ属性に複数の定義が存在し、値が異なる可能性があります。たとえば、組み込みの `apache2` クックブックは `node[:apache][:keepalive]` を定義しますが、カスタム JSON またはカスタムクックブックでこの属性を定義することもできます。属性に複数の定義がある場合、後で説明する順序に従って定義が評価され、最も優先順位の高い定義がノードオブジェクトに組み込まれます。

属性は次のように定義されます。

```
node.type[:attribute][:sub_attribute][:...]=value
```

属性に複数の定義がある場合、 タイプはどの定義が優先されるかを決定し、その定義はノードオブジェクトに組み込まれます。 OpsWorks スタックは次の属性タイプを使用します。
+ **default** (デフォルト) - これは最も一般的なタイプであり、基本的に「この属性がまだ定義されていない場合はこの値を使用する」ことを意味します。属性のすべての定義が `default` タイプである場合、評価順序の最初の定義が優先され、それ以降の値は無視されます。スタックは OpsWorks 、すべてのスタック設定とデプロイ属性定義を `default` type に設定することに注意してください。
+ **normal** (通常) - このタイプの属性は、評価順序で以前に定義されているすべての `default` または `normal` 属性を上書きします。たとえば、組み込みクックブックの最初の属性が `default` タイプであり、2 番目が `normal` タイプのユーザー定義属性である場合、2 番目の定義が優先されます。
+ **set** (セット) - これは、古いクックブックに表示される可能性のある非推奨のタイプです。このタイプは、優先順位が同じである `normal` に置き換えられました。

Chef は、他のすべての属性定義よりも優先される `automatic` タイプなど、いくつかの追加属性タイプをサポートしています。Chef の Ohai ツールによって生成された属性定義は、すべて `automatic` タイプであるため、事実上読み取り専用です。これは通常問題ではありません。上書きする理由がなく、 OpsWorks スタックの属性とは異なるためです。ただし、カスタムクックブック属性の名前を指定するときには、Ohai 属性とは異なる名前になるように注意する必要があります。詳細については、「[属性について](http://docs.chef.io/attributes.html)」を参照してください。

**注記**  
Ohai ツールは、コマンドラインから実行できる実行可能ファイルです。インスタンスの Ohai 属性のリストを取得するには、ターミナルウィンドウでインスタンスにログインし、`ohai` を実行します。それによって非常に長い出力が生成することに注意してください。

ノードオブジェクトにさまざまな属性定義を組み込む手順を以下に示します。

1. カスタムスタック設定属性をスタック設定属性とデプロイ属性にマージします。

   カスタム JSON の属性は、スタックまたは特定のデプロイに対して設定できます。これらの属性は最初に評価されるため、事実上 `normal` タイプです。1 つ以上のスタック設定 の属性がカスタム JSON でも定義されている場合、カスタム JSON の値が優先されます。それ以外の場合、 OpsWorks スタックによってカスタム JSON 属性はスタック設定に組み込まれるだけです。

1. デプロイカスタム JSON 属性をスタック設定属性とデプロイ属性にマージします。

   カスタムのデプロイ JSON 属性も実際は `normal` タイプであるため、組み込みおよびカスタムのスタック設定 JSON や組み込みのデプロイ JSON より優先されます。

1. インスタンスのノードオブジェクトにスタック設定およびデプロイ属性をマージします。

1. インスタンスの組み込みクックブック属性をノードオブジェクトにマージします。

   組み込みクックブック属性はすべて `default` タイプです。1 つまたは複数の組み込みクックブック属性がスタック構成およびデプロイ属性でも定義されている場合 (通常はカスタム JSON で定義されているため)、スタック設定の定義は組み込みクックブックの定義よりも優先されます。他の組み込みクックブック属性はすべて、単にノードオブジェクトに組み込まれます。

1. インスタンスのカスタムクックブック属性をノードオブジェクトにマージします。

   カスタムクックブック属性は、通常 `normal` タイプまたは `default` タイプです。一意の属性はノードオブジェクトに組み込まれます。カスタムクックブック属性がステップ 1～3 でも定義されている場合 (通常はカスタム JSON で定義されているため)、優先順位はカスタムクックブック属性のタイプによって異なります。
   + ステップ 1～3 で定義された属性は、カスタムクックブック `default` 属性よりも優先されます。
   + カスタムクックブック `normal` 属性は、ステップ 1～3 の定義よりも優先されます。

**重要**  
スタック設定属性または組み込みクックブック属性を上書きするために、カスタムクックブックの `default` 属性を使用しないでください。カスタムクックブックの属性は最後に評価されるため、`default` 属性の優先順位は最も低く、何も上書きすることができません。

# カスタム JSON を使用した属性の上書き
<a name="workingcookbook-json-override"></a>

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

**注記**  
スタックは、Windows OpsWorks スタックと Linux スタックでは Chef の実行処理が異なるため、このセクションで説明する手法を Windows スタックで使用することはできません。

 OpsWorks スタック属性を上書きする最も簡単な方法は、カスタム JSON で定義することです。カスタム JSON は、スタック設定およびデプロイ属性だけでなく、組み込みおよびカスタムクックブック`default`属性よりも優先されます。詳細については、「[属性の優先順位](workingcookbook-attributes-precedence.md)」を参照してください。

**重要**  
スタック設定およびデプロイ属性を上書きする場合は注意が必要です。例えば、`opsworks` 名前空間の属性を上書きすると、組み込みのレシピに問題が生じる可能性があります。詳細については、「[スタック設定およびデプロイメント属性](workingcookbook-json.md)」を参照してください。

カスタム JSON を使用して、通常、カスタムレシピにデータを渡すために、一意の属性を定義することもできます。属性は単にノードオブジェクトに組み込まれ、レシピは標準の Chef ノード構文を使用してオブジェクトを参照できます。

## カスタム JSON を指定する方法
<a name="workingcookbook-json-override-specify"></a>

カスタム JSON を使用して属性値を上書きするには、最初に属性の完全修飾属性名を決定する必要があります。次に、上書きの対象となる、目的の値に設定された属性を含む JSON オブジェクトを作成します。わかりやすくするために、「[スタック設定およびデプロイ属性: Linux](attributes-json-linux.md)」および「[組み込みクックブックの属性](attributes-recipes.md)」に、一般的に使用されるスタック設定、デプロイ、および組み込みのクックブックの属性、およびそれらの完全修飾名がまとめられています。

オブジェクトの親子関係は、適切な完全修飾 Chef ノードに対応している必要があります。たとえば、Apache の次の属性を変更するとします。
+ ノードが `node[:apache][:keepalivetimeout]` であり、デフォルト値が `3` である [`keepalivetimeout`](attributes-recipes-apache.md#attributes-recipes-apache-keep-timeout) 属性。
+ ノードが `node[:apache][:logrotate][:schedule]` であり、デフォルト値が `"daily"` である `logrotate` [`schedule`](attributes-recipes-apache.md#attributes-recipes-apache-log-schedule) 属性。

この属性を上書きして、値をそれぞれ `5` と `"weekly"` に設定するために、次のカスタム JSON を使用できます。

```
{
  "apache" : {
    "keepalivetimeout" : 5,
    "logrotate" : {
       "schedule" : "weekly"
    }
  }
}
```

## カスタム JSON を指定する場合
<a name="workingcookbook-json-override-when"></a>

次のタスクのカスタム JSON 構造を指定できます。
+ [新しいスタックを作成する](workingstacks-creating.md)
+ [スタックを更新する](workingstacks-edit.md)
+ [スタックコマンドを実行する](workingstacks-edit.md)
+ [スタックをクローン化する](workingstacks-cloning.md)
+ [アプリケーションをデプロイする](workingapps-deploying.md)

 OpsWorks スタックは、タスクごとにカスタム JSON 属性をスタック設定およびデプロイ属性とマージし、インスタンスに送信してノードオブジェクトにマージします。ただし、以下の点に注意してください。
+ スタックの作成、クローン化、または更新時にカスタム JSON を指定する場合、それらの属性はスタック設定およびデプロイ属性にマージされ、以降のすべてのライフサイクルイベントとスタックコマンドで使用されます。
+ デプロイ用にカスタム JSON を指定する場合、それらの属性は対応するイベント専用のスタック設定およびデプロイ属性にマージされます。

  以降のデプロイにそれらのカスタム属性を使用する場合は、再びカスタム JSON を明示的に指定する必要があります。

レシピによって使用される場合、属性はインスタンスにのみ影響することを覚えておく必要があります。属性値を上書きしても、それ以降のレシピでその属性が参照されない場合、その変更は有効ではありません。関連付けられたレシピが実行される前にカスタム JSON が送信されること、または適切なレシピが再実行されることを確認する必要があります。

## カスタム JSON のベストプラクティス
<a name="workingcookbook-json-override-best"></a>

カスタム JSON を使用して任意の OpsWorks スタック属性を上書きできますが、手動での情報の入力は多少面倒であり、ソース管理の対象ではありません。カスタム JSON は以下の目的に最適です。
+ 少数の属性のみを上書きする必要があり、その他の目的でカスタムクックブックを使用する必要がない場合。

  カスタム JSON を使用すると、数個の属性を上書きするためにのみクックブックリポジトリをセットアップして維持するためのオーバーヘッドを回避できます。
+ パスワードや認証キーなどの機密情報を含む値。

  クックブック属性はリポジトリに保存されるため、どの機密情報にも何らかの漏洩のリスクがあります。代わりに、ダミーの値を指定した属性を定義し、カスタム JSON を使用して実際の値を設定できます。
+ 異なることが予想される値。

  たとえば、本稼働用スタックを別の開発およびステージングスタックでサポートする方法が推奨されています。これらのスタックが、支払いを受け付けるアプリケーションをサポートしているとします。カスタム JSON を使用して支払いのエンドポイントを指定する場合、ステージングスタックのテスト URL を指定できます。更新されたスタックを本稼動用スタックに移行する準備ができたら、同じクックブックを使用し、カスタム JSON を使用して支払いのエンドポイントを本稼動用 URL に設定できます。
+ 特定のスタックまたはデプロイコマンドに固有の値。

# カスタムクックブック属性を使用した OpsWorks スタック属性の上書き
<a name="workingcookbook-cookbook-attributes"></a>

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

**注記**  
Windows スタックの場合、 OpsWorks スタックは組み込みレシピとカスタムレシピに別々の Chef 実行を使用します。つまり、このセクションで説明している手法を使用して、Windows スタック用の組み込み属性を上書きすることはできません。

カスタム JSON OpsWorks は、スタックスタック設定と組み込みクックブック属性を上書きする便利な方法ですが、いくつかの制限があります。特に、使用するたびに、カスタム JSON を手動で入力する必要があるため、定義を管理するための確実な方法がありません。よりよい方法として、カスタムクックブック属性ファイルを使用して組み込みの属性を上書きする方法があります。これによって、定義をソース管理の下に置くことができます。

カスタム属性ファイルを使用して OpsWorks スタック定義を上書きする手順は簡単です。

**OpsWorks スタック属性定義を上書きするには**

1. 「[クックブックとレシピ](workingcookbook.md)」の説明に従ってクックブックリポジトリをセットアップします。

1. 上書きする属性を含む組み込みクックブックと同じ名前でクックブックを作成します。たとえば、Apache の属性を上書きするには、カスタムクックブックの名前を apache2 にする必要があります。

1. クックブックに `attributes` フォルダを追加し、そのフォルダに `customize.rb` という名前のファイルを追加します。

1. 上書きする組み込みクックブックの属性ごとに、優先する値に設定された属性定義をファイルに追加します。属性は `normal` タイプ以上で、対応する OpsWorks Stacks 属性とまったく同じノード名である必要があります。ノード名を含む OpsWorks スタック属性の詳細なリストについては、[スタック設定およびデプロイ属性: Linux](attributes-json-linux.md)「」および「」を参照してください[組み込みクックブックの属性](attributes-recipes.md)。属性および属性ファイルの詳細については、「[属性ファイルについて](http://docs.chef.io/attributes.html)」を参照してください。
**重要**  
スタック属性を上書きするには、属性が OpsWorks `normal`型である必要があります。`default`型が優先されません。例えば、`customize.rb` ファイルに `default[:apache][:keepalivetimeout] = 5` という属性定義がある場合、組み込みの `apache.rb` 属性ファイル内の対応する属性が最初に評価され、優先されます。詳細については、「[属性の上書き](workingcookbook-attributes.md)」を参照してください。

1. 上書きする属性を持つ組み込みクックブックごとに、ステップ 2～4 を繰り返します。

1. スタックのカスタムクックブックを有効にし、 OpsWorks スタックがクックブックをスタックのインスタンスにダウンロードするために必要な情報を提供します。詳細については、「[カスタムクックブックのインストール](workingcookbook-installingcustom-enable.md)」を参照してください。

**注記**  
この手順の詳細なウォークスルーについては、「[組み込み属性の上書き](cookbooks-101-opsworks-attributes.md)」を参照してください。

後続のライフサイクルイベント、デプロイコマンド、スタックコマンドで使用されるノードオブジェクトに、 OpsWorks スタック値ではなく属性定義が含まれるようになりました。

たとえば、「`keepalivetimeout`」で説明した、組み込みの の `logrotate schedule` および [カスタム JSON を指定する方法](workingcookbook-json-override.md#workingcookbook-json-override-specify) の設定を上書きするには、`apache2`apache クックブックをリポジトリに追加し、次のような内容の `customize.rb` ファイルをクックブックの `attributes` フォルダに追加します。

```
normal[:apache][:keepalivetimeout] = 5
normal[:apache][:logrotate][:schedule] = 'weekly'
```

**重要**  
関連する組み込み属性ファイルのコピーを変更して、 OpsWorks スタック属性を上書きしないでください。例えば、`apache.rb` を `apache2/attributes` フォルダにコピーし、その設定の一部を変更すると、基本的に組み込みファイル内のすべての属性が上書きされます。レシピでは、コピーの属性定義が使用され、組み込みファイルは無視されます。 OpsWorks スタックによって後で組み込みの属性ファイルが変更された場合、手動でコピーを更新しない限り、レシピでは変更内容にアクセスできません。  
このような状況を回避するために、組み込みのすべてのクックブックには空の `customize.rb` 属性ファイルが含まれています。このファイルは、`include_attribute` ディレクティブを介してすべてのモジュールで必要です。`customize.rb` のコピーで属性を上書きすることによって、その特定の属性にのみ変更を反映できます。レシピは組み込みの属性ファイルから他の属性値を取得し、上書きしなかった属性の現在の値を自動的に取得します。  
このアプローチでは、クックブックリポジトリ内の属性の数を少数に抑えることができます。これにより、メンテナンスのオーバーヘッドが削減され、将来のアップグレードの管理が容易になります。