本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
配方
重要
AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將工作負載遷移到其他解決方案。如果您對遷移有任何疑問,請透過 AWS re:Post
配方是一種 Ruby 應用程式,可定義系統的組態。配方可以安裝套件、透過範本建立組態檔案、執行 shell 命令、建立檔案和目錄等。您通常讓 AWS OpsWorks Stacks 在執行個體上發生生命週期事件時自動執行配方,但您也可以使用 Execute Recipes 堆疊命令隨時明確執行。如需詳細資訊,請參閱關於配方
配方主要是由一系列的「資源」構成,每組資源都代表系統方面的理想狀態。每個資源都包含一組屬性,可定義理想的狀態,並指定要採取的動作。Chef 會將每個資源與適當的「提供者」建立關聯,而提供者可以執行動作。如需詳細資訊,請參閱資源和提供者參考
package
資源可協助您管理 Linux 執行個體上的軟體套件。下列範例會安裝 Apache 套件。
... package 'apache2' do case node[:platform] when 'centos','redhat','fedora','amazon' package_name 'httpd' when 'debian','ubuntu' package_name 'apache2' end action :install end ...
Chef 會針對平台使用適當的套件提供者。資源屬性通常只會指派一個值,但您可以使用 Ruby 邏輯操作來執行條件式指派。此範例使用 case
運算子,其會使用 node[:platform]
來識別執行個體的作業系統,並依此設定 package_name
屬性。您可以使用標準的 Chef 節點語法將屬性插入配方,Chef 即會以相關聯的值進行取代。您可以在節點物件中使用任何屬性,而不只限於技術指南的屬性。
在判斷適當的套件名稱之後,程式碼區段會以 install
動做為結尾,由該動作安裝套件。此資源的其他動作包括 upgrade
和 remove
。如需詳細資訊,請參閱套件
下列方法通常很實用:將複雜的安裝和設定任務拆解為一或多個子任務,再以個別配方形式實作每個子任務,然後讓您的主要配方在適當的時間執行這些任務。下列範例所示的這行程式碼即遵循上述範例:
include_recipe 'apache2::service'
若要讓配方執行子配方,請使用 include_recipe
關鍵字,後接配方名稱。配方是使用標準的 Chef
語法來識別,其中 CookbookName
::RecipeName
會省略 RecipeName
.rb
副檔名。
注意
include_recipe
陳述式會有效地執行主要配方中該時間點的配方。然而,實際情況是,Chef 會將每個 include_recipe
陳述式取代為指定的配方程式碼,之後才執行主要配方。
directory
資源代表目錄,例如用來包含套件檔案的目錄。下列 default.rb
資源會建立 Linux 日誌目錄。
directory node[:apache][:log_dir] do mode 0755 action :create end
日誌目錄定義於其中一個技術指南的屬性檔案中。資源會將目錄的模式指定為 0755,並使用 create
動作來建立目錄。如需詳細資訊,請參閱目錄
execute
資源代表命令,如 shell 命令或指令碼。下列範例會產生 module.load 檔案。
execute 'generate-module-list' do if node[:kernel][:machine] == 'x86_64' libdir = 'lib64' else libdir = 'lib' end command "/usr/local/bin/apache2_module_conf_generate.pl /usr/#{libdir}/httpd/modules /etc/httpd/mods-available" action :run end
資源會先決定 CPU 類型。 [:kernel][:machine]
是 Chef 產生的另一個自動屬性,代表各種系統屬性,也就是此案例中的CPU類型。接著,它會指定命令 (Perl 指令碼) 並使用 run
動作來執行指令碼,以產生 module.load 檔案。如需詳細資訊,請參閱 execute
template
資源代表檔案,通常是組態檔案,該檔案是從技術指南的其中一個範本檔案產生。下列範例會透過 apache2.conf.erb
範本 (如範本中所述) 建立一個 httpd.conf
組態檔案。
template 'apache2.conf' do case node[:platform] when 'centos','redhat','fedora','amazon' path "#{node[:apache][:dir]}/conf/httpd.conf" when 'debian','ubuntu' path "#{node[:apache][:dir]}/apache2.conf" end source 'apache2.conf.erb' owner 'root' group 'root' mode 0644 notifies :restart, resources(:service => 'apache2') end
資源會根據執行個體的作業系統來判斷產生的檔案名稱和位置。接著,它會指定 apache2.conf.erb
為範本,以用來產生檔案,並設定檔案的擁有者、群組和模式。它會執行 notify
動作來通知 service
資源 (其代表要重新啟動伺服器的 Apache 伺服器)。如需詳細資訊,請參閱範本