屬性優先順序 - AWS OpsWorks

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

屬性優先順序

重要

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

若屬性的定義是唯一的,Chef 會直接將其併入節點物件。但是,任何屬性來源都可以定義任何屬性,因此相同的屬性可能會有值不同的多個定義。例如,內建的 apache2 技術指南定義了 node[:apache][:keepalive],但您也可以在自訂 JSON 或自訂技術指南中定義該屬性。若屬性具有多個定義,他們會按照稍後說明的順序進行評估,並且節點物件會接收到具有最高優先順序的定義。

一個屬性定義如下:

node.type[:attribute][:sub_attribute][:...]=value

如果屬性有多個定義,類型會決定哪個定義具有優先順序,並將該定義合併到節點物件中。 AWS OpsWorks 堆棧使用以下屬性類型:

  • default-這是最常見的類型,它基本上意味著「如果尚未定義屬性,請使用此值」。若所有屬性的定義皆為 default 類型,評估順序中的第一個定義便具有優先順序,其餘值則會遭到忽略。請注意, AWS OpsWorks 堆棧將所有堆棧配置和部署屬性定義設置為default類型。

  • normal — 具有此類型的屬性會取代先前在評估順序中定義的任何defaultnormal屬性。例如,若第一個屬性是來自內建的技術指南,並且具有 default 類型,而第二個則是具有 normal 類型的使用者定義屬性,則第二個定義便具有優先順序。

  • set-這是一個不推薦使用的類型,您可能會在舊的食譜中看到。它已由具有相同優先順序的 normal 取代。

Chef 支援數種額外的屬性類型,包含優先順序高於任何其他屬性定義的 automatic 類型。由 Chef 的 Ohai 工具產生的屬性定義全部皆為 automatic 類型,因此他們基本上等同於唯讀。這通常不是問題,因為沒有理由覆蓋它們,它們與 AWS OpsWorks Stack 的屬性不同。不過,建議您小心地為自訂技術指南屬性命名,使其與 Ohai 屬性相異。如需詳細資訊,請參閱關於屬性

注意

Ohai 工具為您可以從命令列執行的可執行檔。若要列出執行個體的 Ohai 屬性,請登入執行個體並在終端機視窗中執行 ohai。請注意,它會產生非常長的輸出。

以下為將各種屬性定義併入節點物件的步驟:

  1. 將任何自訂堆疊組態屬性併入堆疊組態和部署屬性。

    您可為堆疊或特定部署設定自訂 JSON 屬性。他們會位於評估的第一優先順序,基本上等同於 normal 類型。若一或多個堆疊組態屬性也在自訂 JSON 中定義,則自訂 JSON 的值會具有優先順序。否則 AWS OpsWorks Stacks 會直接將自訂 JSON 屬性併入堆疊組態。

  2. 將任何部署自訂 JSON 屬性併入堆疊組態和部署屬性。

    部署自訂 JSON 屬性也等同於 normal 類型,因此他們會優先於內建和自訂堆疊組態 JSON 及內建部署 JSON。

  3. 將堆疊組態和部署屬性合併成執行個體的節點物件。

  4. 將執行個體的內建技術指南屬性合併成節點物件。

    內建技術指南屬性全部皆為 default 類型。如果堆疊組態和部署屬性中也定義了一或多個內建食譜屬性 (通常是因為您使用自訂 JSON 定義),堆疊組態定義的優先順序會高於內建的食譜定義。所有其他內建技術指南屬性也會直接併入節點物件。

  5. 將執行個體的自訂技術指南屬性合併成節點物件。

    自訂技術指南屬性通常不是 normal 就是 default 類型。唯一屬性會併入節點物件。如果在步驟 1-3 中也定義了任何自訂食譜屬性 (通常是因為您使用自訂 JSON 定義它們),則優先順序取決於自訂食譜屬性的類型:

    • 步驟 1-3 中定義的屬性優先於自訂食譜default屬性。

    • 自訂文字簿normal屬性的優先順序高於步驟 1-3 中的定義。

重要

請勿使用自訂技術指南的 default 屬性覆寫堆疊組態或內建技術指南屬性。由於自訂技術指南屬性會在最後評估,default 屬性具有最低的優先順序,因此無法覆寫任何內容。