配方 - AWS OpsWorks

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

配方

重要

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

配方是一種 Ruby 應用程式,可定義系統的組態。配方可以安裝套件、透過範本建立組態檔案、執行 shell 命令、建立檔案和目錄等。當執行個體上發生生命週期事件時,您通常會自動使用 AWS OpsWorks Stack 執行方法,但是您也可以隨時使用 Execute Recites 堆疊命令明確執行它們。如需詳細資訊,請參閱關於配方

配方主要是由一系列的「資源」構成,每組資源都代表系統方面的理想狀態。每個資源都包含一組屬性,可定義理想的狀態,並指定要採取的動作。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 動做為結尾,由該動作安裝套件。此資源的其他動作包括 upgraderemove。如需詳細資訊,請參閱套件

下列方法通常很實用:將複雜的安裝和設定任務拆解為一或多個子任務,再以個別配方形式實作每個子任務,然後讓您的主要配方在適當的時間執行這些任務。下列範例所示的這行程式碼即遵循上述範例:

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 動作來建立目錄。如需詳細資訊,請參閱目錄。您也可以搭配使用此資源和 Windows 執行個體。

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 伺服器)。如需詳細資訊,請參閱範本