覆寫內建範本 - AWS OpsWorks

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

覆寫內建範本

重要

該 AWS OpsWorks Stacks 服務於 2024 年 5 月 26 日終止使用壽命,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載移轉至其他解決方案。如果您對移轉有任何疑問,請透過 AWS Re: post 或透過進AWS 階 Support 與 AWS Support 團隊聯絡。

注意

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

AWS OpsWorks 堆疊內建配方使用範本在執行個體上建立檔案,主要是伺服器的設定檔案,例如 Apache。例如,apache2 配方使用 apache2.conf.erb 範本來建立 Apache 伺服器的主要組態檔案 httpd.conf (Amazon Linux) 或 apache2.conf (Ubuntu)。

這些範本中的大部分組態設定是以屬性呈現,因此自訂組態檔案的偏好方式是覆寫適當的內建屬性。如需範例,請參閱覆寫內建屬性。不過,如果您想要自訂的設定不是以內建屬性呈現,或根本不在範本中,則必須覆寫範本本身。本主題說明如何覆寫內建範本,以指定自訂 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 的自訂回應。如需覆寫範本的一般討論,請參閱使用自訂範本

重要

當您覆寫內建範本時,內建配方會使用您自訂的範本版本,而不是內建版本。如果「 AWS OpsWorks 堆疊」更新了內建範本,自訂範本就會變成不同步,因此可能無法正常運作。 AWS OpsWorks 堆疊不會經常進行此類變更,而當範本變更時, AWS OpsWorks 堆疊會列出變更內容,並提供升級至新版本的選項。建議您監控 AWS OpsWorks Stacks 儲存庫的變更,並視需要手動更新自訂範本。請注意,儲存庫的每個支援 Chef 版本都有個別的分支,因此請確定您在正確的分支中。

若要開始,請建立自訂技術指南。

建立技術指南
  1. opsworks_cookbooks 目錄中,建立並導覽至名為 apache2 的技術指南目錄。若要覆寫內建範本,自訂技術指南必須與內建技術指南同名,在此範例中為 apache2

    注意

    如果您已經完成 覆寫內建屬性 逐步解說,則可以在此範例中使用相同的 apache2 技術指南,並略過步驟 2。

  2. 使用下列內容建立 metadata.rb 檔案,然後將它儲存至 apache2 目錄。

    name "apache2" version "0.1.0"
  3. apache2 目錄中,建立 templates/default 目錄。

    注意

    templates/default目錄適用於使用默認apache2.conf.erb模板的 Amazon Linux 實例。Ubuntu 14.04 執行個體使用作業系統特定 apache2.conf.erb 範本,其位在 templates/ubuntu-14.04 目錄中。如果您也想要自訂套用至 Ubuntu 14.04 執行個體,則也必須覆寫該範本。

  4. 內建 apache2.conf.erb 範本複製至您的 templates/default 目錄。開啟範本檔案,並將 ErrorDocument 500 行標示為註解,並提供自訂錯誤訊息,如下所示:

    ... ErrorDocument 500 "A custom error message." #ErrorDocument 404 /missing.html ...
  5. 建立opsworks_cookbooks命名的.zip存檔opsworks_cookbooks.zip,然後將檔案上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體。為求簡化,請將封存設為公有。記錄封存的 URL,供日後使用。您也可以將食譜存放在私有 Amazon S3 存檔或其他存放庫類型中。如需詳細資訊,請參閱 技術指南儲存庫

    傳遞至 Amazon S3 儲存貯體的內容可能包含客戶內容。如需移除敏感資料的詳細資訊,請參閱如何清空 S3 儲存貯體?如何刪除 S3 儲存貯體?

注意

為求簡化,此範例會將硬式編碼錯誤訊息新增至範本。若要變更它,您必須修改範本,並重新安裝技術指南。為了給自己更大的靈活性,您可以在自訂食譜的屬性檔案中為錯誤字串定義預設的自訂customize.rb屬性,並將該屬性的值指派給ErrorDocument 500。例如,如果您將屬性命名為 [:apache][:custom][:error500],則 apache2.conf.erb 中的對應行看起來應該與下列類似:

... ErrorDocument 500 <%= node[:apache][:custom][:error500] %> #ErrorDocument 404 /missing.html ...

您接著可以覆寫 [:apache][:custom][:error500],隨時變更自訂錯誤訊息。如果您使用自訂 JSON 覆寫屬性,則甚至不需要接觸技術指南。

若要使用自訂範本,請建立堆疊,並安裝技術指南。

使用自訂範本
  1. 開啟 AWS OpsWorks Stacks 主控台,然後選擇 Add Stack (新增堆疊)

  2. 指定下列標準設定:

    • 名稱 — ApacheTemplate

    • 地區 — 美國西部 (奧勒岡)

    • 預設安全殼層金鑰 — Amazon Elastic Compute Cloud (Amazon EC2) key pair

      如果您需要建立 Amazon EC2 key pair,請參閱 Amazon EC2 金鑰配對。請注意,金鑰對必須屬於與執行個體相同的 AWS 區域。

    選擇 Advanced>> (進階>>),並選擇 Use custom Chef cookbooks (使用自訂 Chef 技術指南) 指定下列設定:

    • 存儲庫類型-HTTP 存檔

    • 儲存庫 URL — 您之前錄製的食譜封存的 URL

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

  3. 選擇 [新增圖層],然後使用預設設定將 Java 應用程式伺服器層新增至堆疊。

  4. 新增全年無休執行個體 (具有預設設定) 至 layer,然後啟動執行個體。

    在此範例中,t2.micro 執行個體就已足夠。

  5. 執行個體上線之後,請使用 SSH 連線至它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 ...