步驟 3:建立和部署自訂技術指南 - AWS OpsWorks

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

步驟 3:建立和部署自訂技術指南

重要

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

目前堆疊還沒有什麼功能。您必須啟用您的應用程式,才能存取 Redis 伺服器。最靈活的方式便是在應用程式的 config 子資料夾中置放一個帶有存取資訊的 YAML 檔案。應用程式接著便能從檔案取得資訊。使用此方法,您可以變更連線資訊,無需重新撰寫和重新部署應用程式。在此範例中,檔案應該命名redis.yml並包含 ElastiCache 叢集的主機名稱和連接埠,如下所示:

host: cache-cluster-hostname port: cache-cluster-port

您可以手動將此文件複製到服務器,但更好的方法是實現 Chef 法來生成文件,並讓 AWS OpsWorks Stacks 在每台服務器上運行配方。Chef 方法是專門的 Ruby 應用程式, AWS OpsWorks Stacks 用來在執行個體上執行工作,例如安裝套件或建立設定檔。配方是封裝在「技術指南」中,而技術指南可以包含多個配方和相關檔案 (例如組態檔案的範本)。食譜會放置在儲存庫中,例如 GitHub,且必須具有標準的目錄結構。如果您還沒有自訂技術指南儲存庫,請參閱技術指南儲存庫,以取得如何設定技術指南的資訊。

針對此範例,請將名為 redis-config 的技術指南新增至您的技術指南儲存庫,其內容如下:

my_cookbook_repository redis-config recipes generate.rb templates default redis.yml.erb

recipes 資料夾包含名為 generate.rb 的配方,該配方會從 redis.yml.erb 產生應用程式的組態檔案,如下所示:

node[:deploy].each do |app_name, deploy_config| # determine root folder of new app deployment app_root = "#{deploy_config[:deploy_to]}/current" # use template 'redis.yml.erb' to generate 'config/redis.yml' template "#{app_root}/config/redis.yml" do source "redis.yml.erb" cookbook "redis-config" # set mode, group and owner of generated file mode "0660" group deploy_config[:group] owner deploy_config[:user] # define variable “@redis” to be used in the ERB template variables( :redis => deploy_config[:redis] || {} ) # only generate a file if there is Redis configuration not_if do deploy_config[:redis].blank? end end end

配方取決於 AWS OpsWorks Stacks 堆疊設定和部署 JSON 物件中的資料,這些 JSON 物件會安裝在每個執行個體上,並包含有關堆疊和任何已部署應用程式的詳細資訊。物件的 deploy 節點具有以下結構:

{ ... "deploy": { "app1": { "application" : "short_name", ... } "app2": { ... } ... } }

deploy 節點包含每個部署應用程式 (以應用程式的短名命名) 的一組內嵌 JSON 物件。每個應用程式物件都包含一組定義應用程式組態的屬性,例如文件根和應用程式類型。如需部署屬性的清單,請參閱deploy 屬性。配方可使用 Chef 屬性語法來表示堆疊組態及部署 JSON 的。例如:[:deploy][:app1][:application] 表示 app1 應用程式的短名。

針對 [:deploy] 中的每個應用程式,配方會執行關聯的程式碼區塊,其中 deploy_config 表示應用程式屬性。第一個配方會將 app_root 設為應用程式的根目錄,[:deploy][:app_name][:deploy_to]/current。它接著會使用 Chef 範本資源redis.yml.erb 產生組態檔案,然後將其置放於 app_root/config 中。

組態檔案通常會從範本建立,其中許多設定都由 Chef「屬性」定義。使用屬性,您可以於稍後使用自訂 JSON 變更設定,而無須重新撰寫範本檔案。redis.yml.erb 範本包含下列項目:

host: <%= @redis[:host] %> port: <%= @redis[:port] || 6379 %>

<%... %> 元素為代表屬性值的預留位置。

  • <%= @redis[:host] %> 表示 redis[:host] 的值,也就是快取叢集的主機名稱。

  • <%= @redis[:port] || 6379 %> 表示 redis[:port] 的值或預設連接埠值 6379 (若屬性尚未定義的話)。

template 資源的運作方式如下:

  • sourcecookbook 分別指定範本和技術指南名稱。

  • modegroupowner 會給予組態檔案與應用程式相同的存取權。

  • variables 區段會將範本中使用的 @redis 變數設為應用程式的 [:redis] 屬性值。

    [:redis] 屬性值是透過使用自訂 JSON 來設定,如稍後所述。它並非標準應用程式屬性之一。

  • not_if 指示詞會確保配方不會在已有現有檔案時再次產生組態檔案。

在您撰寫技術指南之後,您必須將其部署至每個執行個體的技術指南快取。此操作不會執行配方。它只會將新的技術指南安裝到堆疊的執行個體上。您通常會藉由將其指派給 layer 的生命週期事件來執行配方,如稍後所述。

部署您的自訂技術指南
  1. 在「堆 AWS OpsWorks 疊堆疊」頁面上,按一下堆疊設定,然後按一下編輯

  2. Configuration Management (組態管理) 區段中,將 Use custom Chef cookbooks (使用自訂 Chef 技術指南) 設為 Yes (是),輸入技術指南儲存庫資訊,然後按一下 Save (儲存) 以更新堆疊組態。

  3. Stack (堆疊) 頁面中,按一下 Run Command (執行命令),選取 Update Custom Cookbooks (更新自訂技術指南) 堆疊命令,然後按一下 Update Custom Cookbooks (更新自訂技術指南) 以將新的技術指南安裝到執行個體的技術指南快取中。

若您修改您的技術指南,只須再次執行 Update Custom Cookbooks (更新自訂技術指南) 即可安裝更新後的版本。如需此程序的詳細資訊,請參閱安裝自訂技術指南