本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 3:建立和部署自訂技術指南
重要
該 AWS OpsWorks Stacks 服務於 2024 年 5 月 26 日終止使用壽命,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載移轉至其他解決方案。如果您對移轉有任何疑問,請透過 AWS Re: post
目前堆疊還沒有什麼功能。您必須啟用您的應用程式,才能存取 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
recipesgenerate
.rb templates defaultredis.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][:
。它接著會使用 Chef 範本資源app_name
][:deploy_to]/currentredis.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
資源的運作方式如下:
-
source
和cookbook
分別指定範本和技術指南名稱。 -
mode
、group
和owner
會給予組態檔案與應用程式相同的存取權。 -
variables
區段會將範本中使用的@redis
變數設為應用程式的[:redis]
屬性值。[:redis]
屬性值是透過使用自訂 JSON 來設定,如稍後所述。它並非標準應用程式屬性之一。 -
not_if
指示詞會確保配方不會在已有現有檔案時再次產生組態檔案。
在您撰寫技術指南之後,您必須將其部署至每個執行個體的技術指南快取。此操作不會執行配方。它只會將新的技術指南安裝到堆疊的執行個體上。您通常會藉由將其指派給 layer 的生命週期事件來執行配方,如稍後所述。
部署您的自訂技術指南
-
在「堆 AWS OpsWorks 疊堆疊」頁面上,按一下堆疊設定,然後按一下編輯。
-
在 Configuration Management (組態管理) 區段中,將 Use custom Chef cookbooks (使用自訂 Chef 技術指南) 設為 Yes (是),輸入技術指南儲存庫資訊,然後按一下 Save (儲存) 以更新堆疊組態。
-
在 Stack (堆疊) 頁面中,按一下 Run Command (執行命令),選取 Update Custom Cookbooks (更新自訂技術指南) 堆疊命令,然後按一下 Update Custom Cookbooks (更新自訂技術指南) 以將新的技術指南安裝到執行個體的技術指南快取中。
若您修改您的技術指南,只須再次執行 Update Custom Cookbooks (更新自訂技術指南) 即可安裝更新後的版本。如需此程序的詳細資訊,請參閱安裝自訂技術指南。