

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

# 組み込みテンプレートの上書き
<a name="cookbooks-101-opsworks-templates"></a>

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

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

 OpsWorks スタックの組み込みレシピでは、 テンプレートを使用してインスタンスにファイルを作成します。主に Apache などのサーバーの設定ファイルです。例えば、`apache2` レシピでは、[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) を作成します。

これらのテンプレートの設定のほとんどは属性によって表されるため、設定ファイルをカスタマイズする主な方法は、適切な組み込み属性を上書きすることです。例については、[組み込み属性の上書き](cookbooks-101-opsworks-attributes.md)を参照してください。ただし、カスタマイズする設定が組み込み属性で表されない場合、またはテンプレート内にない場合は、テンプレート自体を上書きする必要があります。このトピックでは、組み込みテンプレートを上書きして、カスタム Apache 設定を指定する方法について説明します。

`ErrorDocument` 設定を `httpd.conf` ファイルに追加することで、Apache にカスタムラー応答を提供することができます。`apache2.conf.erb` には、以下のようないくつかのコメントアウトされた例だけがあります。

```
...
#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
...
```

これらの設定はハードコードコメントであるため、属性を上書きすることでカスタム値を指定することはできません。テンプレート自体を上書きする必要があります。ただし、属性とは異なり、テンプレート ファイルに含まれる特定の部分を上書きする方法はありません。組み込みバージョンと同じ名前でカスタムクックブックを作成し、テンプレートファイルを同じサブディレクトリにコピーして、必要に応じてファイルを変更します。このトピックでは、`apache2.conf.erb` を上書きしてカスタム応答にエラー 500 を提供する方法について説明します。テンプレートの上書きについての全般的な説明については、「[カスタムテンプレートの使用](workingcookbook-template-override.md)」を参照してください。

**重要**  
組み込みテンプレートを上書きする場合、組み込みレシピは、組み込みバージョンではなくカスタマイズされたバージョンのテンプレートを使用します。 OpsWorks スタックが組み込みテンプレートを更新すると、カスタムテンプレートは同期されず、正しく動作しない可能性があります。 OpsWorks スタックはそのような変更を頻繁に行うことはありません。テンプレートが変更されると、 OpsWorks スタックは変更を一覧表示し、新しいバージョンにアップグレードするオプションを提供します。[OpsWorks スタックのリポジトリ](https://github.com/aws/opsworks-cookbooks)の変更をモニタリングし、必要に応じてテンプレートを手動で更新することをお勧めします。リポジトリに、サポートされている Chef バージョンにそれぞれ個別のブランチがあり、正しいブランチにいることを確認します。

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

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

1. `opsworks_cookbooks` ディレクトリ内に、`apache2` というクックブックのディレクトリを作成して、そこに移動します。組み込みテンプレートを上書きするには、カスタムクックブックは組み込みのクックブックと同じ名前である必要があります。この例では `apache2` です。
**注記**  
すでに「[組み込み属性の上書き](cookbooks-101-opsworks-attributes.md)」ウォークスルーを完了している場合は、この例で同じ `apache2` クックブックを使用して、ステップ 2 をスキップできます。

1. 以下の内容で `metadata.rb` ファイルを作成し、`apache2` ディレクトリに保存します。

   ```
   name "apache2"
   version "0.1.0"
   ```

1. `apache2` ディレクトリに `templates/default` ディレクトリを作成します。
**注記**  
`templates/default` ディレクトリは、デフォルトの `apache2.conf.erb` テンプレートを使用する Amazon Linux インスタンスで動作します。Ubuntu 14.04 インスタンスは、オペレーティングシステム固有の `apache2.conf.erb` テンプレートを使用します。これは `templates/ubuntu-14.04` ディレクトリにあります。Ubuntu 14.04 インスタンスにカスタム設定を適用する場合は、そのテンプレートも上書きする必要があります。

1. `templates/default` ディレクトリに、[[built-in `apache2.conf.erb` template](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb) (組み込みテンプレート)] をコピーします。テンプレートファイルを開いて `ErrorDocument 500` 行をコメントアウトすると、以下の様なカスタムエラーメッセージが表示されます。

   ```
   ...
   ErrorDocument 500 "A custom error message."
   #ErrorDocument 404 /missing.html
   ...
   ```

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

**注記**  
わかりやすいように、この例では、テンプレートにハードコード化されたエラーメッセージを追加します。これを変更するには、テンプレートを変更して、[クックブックを再インストール](workingcookbook-installingcustom-enable-update.md)する必要があります。より柔軟な方法として、[デフォルトカスタム属性](cookbooks-101-opsworks-attributes.md)をカスタムクックブック `customize.rb` 属性のエラー文字列に定義して、その属性の値を `ErrorDocument 500` に割り当てることができます。例えば、属性に `[:apache][:custom][:error500]` という名前を付けると、`apache2.conf.erb` の対応する行は以下のようになります。  

```
...
ErrorDocument 500 <%= node[:apache][:custom][:error500] %>
#ErrorDocument 404 /missing.html
...
```
`[:apache][:custom][:error500]` を上書きすることで、カスタムエラーメッセージをいつでも変更できます。「[カスタム JSON を使用して属性を上書き](workingcookbook-json-override.md)」した場合は、カスタム クックブックに手を加える必要はありません。

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

**カスタムテンプレートを使用する**

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

1. 以下の標準設定を指定できます。
   + **Name** (名前) – ApacheTemplate
   + **リージョン** – 米国西部 (オレゴン)
   + **Default SSH key** — Amazon Elastic Compute Cloud (Amazon EC2) キーペア

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

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

   そのほかの設定のデフォルト値を受け入れ、[**Add Stack**] を選択してスタックを作成します。

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

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

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

1. インスタンスをオンラインにしたら、[、SSHでインスタンスに接続します](workinginstances-ssh.md)。`httpd.conf` ファイルは、`/etc/httpd/conf` ディレクトリにあります。ファイルには、以下のようなカスタムの `ErrorDocument`設定が含まれています。

   ```
   ...
   # Some examples:
   ErrorDocument 500 "A custom error message."
   #ErrorDocument 404 /missing.html
   #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
   #ErrorDocument 402 http://www.example.com/subscription_info.html
   ...
   ```