

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

# 組み込み属性の上書き
<a name="cookbooks-101-opsworks-attributes"></a>

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

**注記**  
このトピックは Linux スタックにのみ当てはまります。Windows スタックの組み込み属性は上書きできません。

OpsWorks スタックは、各インスタンスに一連の組み込みクックブックをインストールします。組み込みのクックブックの多くは組み込みのレイヤーをサポートしており、属性ファイルは Apache サーバー設定のような、さまざまなデフォルト システムとアプリケーション設定を定義します。属性ファイルにこれらの設定を指定することで、以下の方法のいずれかで、対応する組み込み属性を上書きすることにより多くの設定をカスタマイズできます。
+ カスタム JSON の属性を定義します。

  このアプローチには、シンプルかつ柔軟であるという利点があります。ただし、カスタム JSON を手動で入力する必要があるため、属性定義を管理する堅牢な方法はありません。
+ カスタムクックブックを実装して、`customize.rb` 属性ファイルの属性を定義します。

  このアプローチは、カスタム JSON を使用する方法よりも柔軟性には劣りますが、ソース管理の下にカスタムクックブックを配置することができるため、より堅牢な方法となります。

このトピックでは、Apache サーバーを例として、カスタムクックブック属性ファイルを使用して組み込み属性を上書きする方法について説明します。カスタム JSON を使用して属性を上書きする方法の詳細については、「[カスタム JSON の使用](workingcookbook-json-override.md)」を参照してください。属性を上書きする方法の全般的な説明については、「[属性の上書き](workingcookbook-attributes.md)」を参照してください。

**注記**  
属性を上書きすることは設定をカスタマイズする優れた方法ですが、設定は常に属性で表されるものではありません。その場合は、設定ファイルを作成するために組み込みのレシピが使用するテンプレートを上書きすることで、設定ファイルをカスタマイズしてことができます。例については、[組み込みテンプレートの上書き](cookbooks-101-opsworks-templates.md)を参照してください。

組み込みの属性は、通常設定ファイルを作成するためにセットアップレシピが使用するテンプレートファイルの値を示します。例えば、`apache2` セットアップレシピの一つである [https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/recipes/default.rb](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/recipes/default.rb) では、[https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb) テンプレートを使用して Apache サーバーの主要な設定ファイルである `httpd.conf` (Amazon Linux) または `apache2.conf` (Ubuntu) を作成します。以下は、テンプレートファイルからの抜粋です。

```
...
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests <%= node[:apache][:keepaliverequests] %>
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout <%= node[:apache][:keepalivetimeout] %>
##
## Server-Pool Size Regulation (MPM specific)
##

...
```

この例の `KeepAliveTimeout` 設定は、`[:apache][:keepalivetimeout]` 属性の値です。この属性のデフォルト値は、以下の抜粋に示す、`apache2` クックブックの [https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/attributes/apache.rb](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/attributes/apache.rb) 属性ファイルで定義されます。

```
...
# General settings
default[:apache][:listen_ports] = [ '80','443' ]
default[:apache][:contact] = 'ops@example.com'
default[:apache][:log_level] = 'info'
default[:apache][:timeout] = 120
default[:apache][:keepalive] = 'Off'
default[:apache][:keepaliverequests] = 100
default[:apache][:keepalivetimeout] = 3
...
```

**注記**  
よく使われる組み込みの属性の詳細については、「[組み込みクックブックの属性](attributes-recipes.md)」を参照してください。

組み込み属性の上書きをサポートするために、すべての組み込みクックブックには `customize.rb` 属性ファイルが含まれています。このファイルは、`include_attribute` ディレクティブを介してすべてのモジュールに組み込まれます。組み込みクックブックの `customize.rb` ファイルには属性定義は含まれておらず、組み込み属性には影響を与えません。組み込み属性を上書きするには、同じ名前のカスタムクックブックを組み込みクックブックとして作成して、`customize.rb` という名前が付けられている属性ファイルにカスタム属性定義として配置します。そのファイルは組み込みバージョンに優先され、関連する各モジュールに含まれます。`customize.rb` に組み込み属性を定義すると、対応する組み込み属性が上書きされます。

この例では、組み込み `[:apache][:keepalivetimeout]` 属性を設定して、その値に 3 の代わりに 5 を設定する方法を示します。すべての組み込み属性に対して同様の方法を使用できます。ただし、上書きする属性には注意が必要です。例えば、`opsworks` 名前空間の属性を上書きすると、組み込みのレシピで問題が発生する場合があります。

**重要**  
組み込み属性ファイル自体のコピーを変更することで、組み込み属性を上書きしないでください。例えば、`apache.rb` のコピーをカスタムクックブックの `apache2/attributes` フォルダに配置して、その設定の一部を変更することが*できます*。ただし、このファイルは組み込みバージョンを上書きしてしまうため、組み込みレシピは新たなバージョンの `apache.rb` を使用するようになります。 OpsWorks スタックが後で組み込み`apache.rb`ファイルを変更した場合、手動でバージョンを更新しない限り、レシピは新しい値を取得しません。`customize.rb` を使用することで、指定した属性のみを上書きできます。組み込みレシピは、引き続き上書きしていない属性の最新の値を自動的に取得します。

開始するには、カスタムクックブックを作成します。

**クックブックを作成するには**

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

   組み込み属性を上書きするには、カスタムクックブックは組み込みのクックブックと同じ名前である必要があります。この例では `apache2` です。

1. `apache2` ディレクトリに `attributes` ディレクトリを作成します。

1. `customize.rb` ファイルを `attributes` ディレクトリに追加し、それを使用して上書きする組み込みクックブックの属性を定義します。この例では、ファイルには以下のものが含まれます。

   ```
   normal[:apache][:keepalivetimeout] = 5
   ```
**重要**  
組み込みの属性を上書きするには、カスタム属性のタイプが `normal` 以上であり、対応する組み込み属性名と正確に同じである必要があります。`normal` タイプでは、すべての `default` タイプの組み込み属性にカスタム属性が優先されます。詳細については、「[属性の優先順位](workingcookbook-attributes-precedence.md)」を参照してください。

1. `opsworks_cookbooks.zip` という名前の `opsworks_cookbooks` の `.zip` アーカイブを作成し、Amazon Simple Storage Service (Amazon S3) バケットにそのアーカイブをアップロードします。わかりやすいよう、[ファイルを公開](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)します。後で使用できるように、URL を記録しておきます。また、クックブックをプライベート Amazon S3 アーカイブやその他のタイプのリポジトリに保存することもできます。詳細については、「[クックブックリポジトリ](workingcookbook-installingcustom-repo.md)」を参照してください。

   Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、[「S3 バケットを空にする方法」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)または[「S3 バケットを削除する方法」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)を参照してください。

カスタム属性を使用するには、スタックを作成し、カスタムクックブックをインストールします。

**カスタム属性を使用する**

1. [OpsWorks スタックコンソール](https://console.aws.amazon.com/opsworks/)を開いて [**Add Stack**] を選択します。

1. 以下の標準設定を指定できます。
   + **Name** (名前) – ApacheConfig
   + **リージョン)** – 米国西部 (オレゴン)

     いずれのリージョンにもスタックを配置できますが、チュートリアルでは米国西部 (オレゴン) をお勧めします。
   + **Default SSH key** (デフォルト SSH キー) - Amazon EC2 キーペア

     EC2 キーペアの作成が必要な場合は、[Amazon EC2 キーペア](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)を参照してください。キーペアがスタックと同じ AWS リージョンに属している必要があることに注意してください。

   [**Advanced>>**] を選択し、[**Use custom Chef cookbooks**] を [**Yes**] に設定して、以下の設定を指定します。
   + **Repository type** (リポジトリタイプ) – **Http Archive** (Http アーカイブ)
   + **Repository URL** (リポジトリの URL) – 前の手順で記録したクックブックのアーカイブの URL

   そのほかの設定のデフォルト値を受け入れ、[**Add Stack**] を選択してスタックを作成します。
**注記**  
この例では、デフォルトのオペレーティングシステムである Amazon Linux を使用します。希望に応じて、Ubuntu を使用することもできます。唯一の相違点は Ubuntu システムであるということで、組み込みセットアップレシピが `apache2.conf` という同じ名前の設定ファイルを作成し、それを `/etc/apache2` ディレクトリに配置します。

1. **レイヤーの追加** を選択してから、デフォルト設定でスタックに [Java アプリケーションアプリケーションサーバーレイヤーを追加](layers-java.md)します。

1. デフォルト設定でレイヤーに [24/7 インスタンスを追加](workinginstances-add.md)し、インスタンスを起動します。

   この例では、t2.micro インスタンスで十分です。

1. インスタンスをオンラインにしたら、[、SSHでインスタンスに接続します](workinginstances-ssh.md)。`httpd.conf` ファイルは、`/etc/httpd/conf` ディレクトリにあります。ファイルを確認すると、カスタム `KeepAliveTimeout` 設定が表示されます。残りの設定には、組み込みの `apache.rb` ファイルからのデフォルト値があります。`httpd.conf` の関連する部分は以下のようになります。

   ```
   ...
   #
   # KeepAliveTimeout: Number of seconds to wait for the next request from the
   # same client on the same connection.
   #
   KeepAliveTimeout 5
   ...
   ```