覆寫內建屬性 - AWS OpsWorks

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

覆寫內建屬性

重要

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

注意

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

AWS OpsWorks Stacks 會在每個執行個體上安裝一組內建食譜。許多內建技術指南都支援內建 layer,而且其屬性檔案定義各種預設系統和應用程式設定 (例如 Apache 伺服器組態設定)。將這些設定放在屬性檔案中,即可使用下列方式覆寫對應內建屬性來自訂許多組態設定:

  • 使用自訂 JSON 定義屬性。

    此方式的優點是簡單並具彈性。不過,您必須手動輸入自訂 JSON,因此沒有健全的方法可以管理屬性定義。

  • 實作自訂技術指南,並在 customize.rb 屬性檔案中定義屬性。

    此方式比使用自訂 JSON 更不具彈性,但是更為健全,因為您可以將自訂技術指南放在來源控制之下。

本主題說明如何使用自訂技術指南屬性檔案覆寫內建屬性,並使用 Apache 伺服器做為範例。如需如何覆寫具有自訂 JSON 之屬性的詳細資訊,請參閱 使用自訂 JSON。如需如何覆寫屬性的一般討論,請參閱覆寫屬性

注意

偏好使用覆寫屬性來自訂組態設定,但不會一律透過屬性呈現設定。在該情況下,您通常可以覆寫內建配方用來建立組態檔案的範本,來自訂組態檔案。如需範例,請參閱覆寫內建範本

內建屬性通常代表範本檔案中安裝配方用來建立組態檔案的值。例如,其中一個 apache2 安裝配方 default.rb 使用 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 技術指南的 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 ...
注意

如需常用內建屬性的詳細資訊,請參閱內建技術指南屬性

若要支援覆寫內建屬性,所有內建技術指南都會包含 customize.rb 屬性檔案,而此屬性檔案透過 include_attribute 指令併入所有模組中。內建技術指南的 customize.rb 檔案未包含任何屬性定義,而且不會影響內建屬性。若要覆寫內建屬性,您可以建立與內建技術指南同名的自訂技術指南,並將自訂屬性定義放入也命名為 customize.rb 的屬性檔案中。該檔案的優先順序高於內建版本,並包含在任何相關模組中。如果您在 customize.rb 中定義任何內建屬性,則它們會覆寫對應的內建屬性。

此範例顯示如何覆寫內建 [:apache][:keepalivetimeout] 屬性,以將其值設定為 5,而非 3。您可以將類似的方式用於任何內建屬性。不過,請注意您覆寫哪些屬性。例如,opsworks 命名空間中的覆寫屬性可能會導致一些內建配方的問題。

重要

請不要修改內建屬性檔案的複本本身來覆寫內建屬性。例如,您「可以」apache.rb 的複本放入您自訂技術指南的 apache2/attributes 資料夾,並修改它的一些設定。不過,此檔案的優先順序高於內建版本,而內建配方現在會使用您的 apache.rb 版本。如果 AWS OpsWorks Stacks 稍後修改了內置apache.rb文件,除非您手動更新版本,否則配方將不會獲得新值。透過使用customize.rb,您只會覆寫指定的屬性;內建配方會繼續自動取得您尚未覆寫之每個屬性的 up-to-date 值。

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

建立技術指南
  1. opsworks_cookbooks 目錄內,建立並導覽至名為 apache2 的技術指南目錄。

    若要覆寫內建屬性,自訂技術指南必須與內建技術指南同名,在此範例中為 apache2

  2. apache2 目錄中,建立 attributes 目錄。

  3. 將名為 customize.rb 的檔案新增至 attributes 目錄,並使用它來定義您想要覆寫的內建技術指南屬性。在此範例中,檔案應該包含下列項目:

    normal[:apache][:keepalivetimeout] = 5
    重要

    若要覆寫內建屬性,自訂屬性必須是 normal 類型或以上類型,並且具有與對應內建屬性完全相同的節點名稱。normal 類型確保自訂屬性的優先順序高於內建屬性,即所有 default 類型。如需詳細資訊,請參閱 屬性優先順序

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

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

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

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

  2. 指定下列標準設定。

    • 名稱 — ApacheConfig

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

      您可以將堆疊放在任何區域,但我們建議使用美國西部 (奧勒岡) 進行教學課程。

    • 預設安全殼層金鑰 — EC2 key pair

      如果您需要建立 EC2 金鑰對,請參閱 Amazon EC2 金鑰對。請注意,金鑰對必須屬於與堆疊相同的 AWS 區域。

    選擇 Advanced>> (進階>>),並將 Use custom Chef cookbooks (使用自訂 Chef 技術指南) 設定為 Yes (是),然後指定下列設定。

    • 存儲庫類型-HTTP 存檔

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

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

    注意

    此範例使用預設作業系統:Amazon Linux。如果您想要,可以使用 Ubuntu。唯一的差異是,在 Ubuntu 系統上,內建安裝配方會產生具有相同設定且名為 apache2.conf 的組態檔案,並將它放入 /etc/apache2 目錄中。

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

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

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

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