

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 覆寫內建範本
<a name="cookbooks-101-opsworks-templates"></a>

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

**注意**  
本主題僅適用於 Linux 堆疊。您無法在 Windows 堆疊上覆寫內建範本。

Stacks 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 Stacks 更新內建範本，自訂範本會變得不同步且可能無法正常運作。 OpsWorks Stacks 不會經常進行此類變更，而且當範本確實變更時， OpsWorks Stacks 會列出變更，並讓您選擇升級至新版本。建議您監控 [OpsWorks Stacks 儲存庫](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. 將[內建 `apache2.conf.erb` 範本](https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/templates/default/apache2.conf.erb)複製至您的 `templates/default` 目錄。開啟範本檔案，並將 `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 Stacks 主控台](https://console.aws.amazon.com/opsworks/)，然後選擇 **Add Stack (新增堆疊)**。

1. 指定下列標準設定：
   + **名稱** – ApacheTemplate
   + **區域** – 美國西部 （奧勒岡）
   + **預設 SSH 金鑰** – Amazon Elastic Compute Cloud (Amazon EC2) 金鑰對

     如果您需要建立 Amazon EC2 金鑰對，請參閱 [Amazon EC2 金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。請注意，金鑰對必須屬於與執行個體相同的 AWS 區域。

   選擇 **Advanced>> (進階>>)**，並選擇 **Use custom Chef cookbooks (使用自訂 Chef 技術指南)** 指定下列設定：
   + **儲存庫類型** – **Http Archive**
   + **儲存庫 URL** – 您先前記錄的技術指南封存的 URL

   接受其他設定的預設值，然後選擇 **Add Stack (新增堆疊)** 來建立堆疊。

1. 選擇**新增 layer**，然後使用預設設定將 [Java App Server layer 新增至](layers-java.md)堆疊。

1. [新增全年無休執行個體](workinginstances-add.md) (具有預設設定) 至 layer，然後啟動執行個體。

   在此範例中，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
   ...
   ```