設定配方 - AWS OpsWorks

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

設定配方

重要

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

設定配方會指派給 layer 的設定生命週期事件,該事件會在執行個體進入或離開線上狀態時,在所有堆疊的執行個體上發生。您可使用設定配方調整執行個體的組態,以適當回應變更。當您實作設定配方時,請記得堆疊組態變更可能會涉及與這一 layer 無關的執行個體。配方必須要能適當地進行回應,在某些案例中,可能不會進行任何行為。

tomcat::configure

tomcat::configure 配方用於 layer 的設定生命週期事件。

include_recipe 'tomcat::context' # Optional: Trigger a Tomcat restart in case of a configure event, if relevant # settings in custom JSON have changed (e.g. java_opts/JAVA_OPTS): #include_recipe 'tomcat::container_config'

tomcat::configure 配方基本上就是執行兩個依存配方的中繼配方。

  1. tomcat::context 配方會建立 web 應用程式內容組態檔案。

    此檔案會設定應用程式用來與 MySQL 執行個體通訊的 JDBC 資源,如下一節所討論。執行此配方以回應設定事件,可讓 layer 在資料庫 layer 變更時更新 web 應用程式內容組態檔案。

  2. tomcat::container_config 安裝配方會再次執行,以擷取任何容器組態中的變更。

includetomcat::container_config 在此範例中已標示為註解。若您希望使用自訂的 JSON 修改 Tomcat 設定,您可以移除註解。設定生命週期事件接著會執行 tomcat::container_config 更新 Tomcat 的相關組態檔案 (如 tomcat::container_config 所述) 並重新啟動 Tomcat 服務。

tomcat::context

Tomcat 食譜使應用程序能夠訪問 MySQL 數據庫服務器,該服務器可以在單獨的實例上運行,通過使用 J DataSource 2EE 對象。透過 Tomcat,您可以藉由建立和安裝每個應用程式的 web 應用程式內容組態檔案,來啟用連線。此檔案定義應用程式和應用程式用來與資料庫通訊之 JDBC 資源間的關聯。如需詳細資訊,請參閱內容容器

tomcat::context 配方的主要用途是建立此組態檔案。

include_recipe 'tomcat::service' node[:deploy].each do |application, deploy| context_name = deploy[:document_root].blank? ? application : deploy[:document_root] template "context file for #{application} (context name: #{context_name})" do path ::File.join(node['tomcat']['catalina_base_dir'], 'Catalina', 'localhost', "#{context_name}.xml") source 'webapp_context.xml.erb' owner node['tomcat']['user'] group node['tomcat']['group'] mode 0640 backup false only_if { node['datasources'][context_name] } variables(:resource_name => node['datasources'][context_name], :webapp_name => application) notifies :restart, resources(:service => 'tomcat') end end

除了 Tomcat 食譜屬性之外,此方案還使用堆 AWS OpsWorks 疊配置和配置事件一起安裝的堆疊配置和部署屬性。St AWS OpsWorks acks 服務會將屬性新增至每個執行個體的節點物件,其中包含配方通常會透過使用資料包或搜尋取得的資訊,並在每個執行個體上安裝屬性。屬性包含堆疊組態、部署應用程式和任何使用者希望包含之自訂資料的詳細資訊。配方可透過使用標準 Chef 節點語法,從堆疊組態和部署屬性取得資料。如需詳細資訊,請參閱 堆疊組態及部署屬性。透過 Chef 11.10 堆疊,您也可以使用 Chef 搜尋取得堆疊組態和部署資料。如需詳細資訊,請參閱 使用 Chef 搜尋

deploy屬性是指[:deploy]命名空間,其中包含透過主控台或 API 定義或由 AWS OpsWorks Stacks 服務產生的部署相關屬性。deploy 屬性包含每個部署應用程式的屬性,以應用程式的短名命名。每個應用程式屬性都包含一組描述應用程式的屬性,例如文件根 ([:deploy][:appname][:document_root])。

context 配方首先會透過呼叫 tomcat::service,確認已為此 Chef 執行定義服務。它接著會定義 context_name 變數,代表組態檔案的名稱 (排除 .xml 副檔名)。若您使用預設文件根,context_name 會設為應用程式的短名。否則,它會設為指定的文件根。建立堆疊和執行應用程式中討論的範例會將文件根設為 "ROOT",因此內容為 ROOT,組態檔案則名為 ROOT.xml

大量的配方都會穿過每個應用程式的部署應用程式清單,使用 webapp_context.xml.erb 範本建立內容組態檔案。範例只會部署一個應用程式,但 deploy 屬性的定義仍會要求您將其視為應用程式清單處理。

webapp_context.xml.erb 範本並非作業系統限定,因此它會位於 templates 目錄的 default 子目錄中。

配方會建立組態檔案如下:

  • 當使用預設屬性值時,組態檔案名稱會設為 context_name.xml,並安裝在 /etc/tomcat6/Catalina/localhost/ 目錄中。

    堆疊組態屬性的 ['datasources'] 節點包含一或多個屬性,每一種都會將一個內容名稱映射到關聯應用程式用來與資料庫通訊的 JDBC 資料來源。節點和其內容都會在您建立堆疊時,使用自訂 JSON 定義,如稍後的建立堆疊和執行應用程式所述。範例具有將 ROOT 內容名稱與名為 jdbc/mydb 的 JDBC 資源建立關聯的單一屬性。

  • 使用預設屬性值,檔案的使用者和群組都會設為由 Tomcat 套件定義的值:tomcat (Amazon Linux) 或 tomcat6 (Ubuntu)。

  • template 資源只會在 ['datasources'] 節點存在且包含 context_name 屬性值建立組態檔案。

  • template 資源會定義兩個變數:resource_namewebapp_name

    resource_name 已設為與 context_name 關聯的資源名稱,webapp_name 則已設為應用程式的短名。

  • 範本資源會重新啟動 Tomcat 服務,載入及啟用變更。

webapp_context.xml.erb 範本由包含具有自己屬性組之 Context 元素的 Resource 元素組成。

表徵上下文配置的Resource屬性:

  • 名稱-JDBC 資源名稱,設定為中定義的resource_nametomcat::context值。

    例如,資源名稱已設為 jdbc/mydb。

  • auth類型-這些是 JDBC 連DataSource接的標準設置。

  • maxActiveMaxidlemaxWait — 作用中和閒置連線的數目上限,以及傳回連線的等待時間上限。

  • 使用者稱和密碼 — 資料庫的使用者名稱和根密碼,這些密碼是從deploy屬性取得的。

  • driverClassNameJDBC 驅動程式的類別名稱,設定為 MySQL 驅動程式。

  • 網址 — 連線網址。

    前綴取決於資料庫。其應設為 jdbc:mysql (MySQL)、jdbc:postgresql (Postgres) 和 jdbc:sqlserver (SQL Server)。範例將 URL 設為 jdbc:mysql://host_IP_Address:3306:simplejsp,其中 simplejsp 為應用程式的短名。

  • 工廠-DataSource 工廠,這是 MySQL 數據庫所需的。

如需此設定檔的詳細資訊,請參閱 Tomcat Wiki 的使用 DataSources主題。