本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Stacks Linux AWS OpsWorks 執行個體上執行配方
重要
AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問,請透過 AWS re:Post
測試 Kitchen 和 Vagrant 提供簡單且有效的方法來實作技術指南,但為了驗證技術指南的配方在生產環境中正確執行,您必須在 Stacks AWS OpsWorks 執行個體上執行。本主題說明如何在 AWS OpsWorks Stacks Linux 執行個體上安裝自訂技術指南,以及執行簡單配方。本主題也提供一些有效修復配方錯誤的秘訣。
如需如何在 Windows 執行個體上執行配方的描述,請參閱在 Windows 執行個體上執行配方。
建立和執行配方
首先,您需要建立堆疊。以下簡短地彙總如何針對此範例建立堆疊。如需詳細資訊,請參閱建立新的堆疊。
建立 堆疊
-
開啟 AWS OpsWorks Stacks 主控台
,然後按一下 Add Stack (新增堆疊)。 -
指定下列設定,並接受其他設定的預設值,然後按一下 Add Stack (新增堆疊)。
-
名稱 – OpsTest
-
預設SSH金鑰 – Amazon EC2金鑰對
如果您需要建立 Amazon EC2金鑰對,請參閱 Amazon EC2金鑰對。請注意,金鑰對必須屬於與執行個體相同的AWS區域。此範例使用預設的美國西部 (奧勒岡) 區域。
-
-
按一下 Add a layer (新增 layer),並新增自訂 layer 至具有下列設定的堆疊。
-
名稱 – OpsTest
-
簡短名稱 – 反對
任何 layer 類型都會實際作用於 Linux 堆疊,但此範例不需要其他 layer 類型所安裝的任何套件,因此自訂 layer 是最簡單的方法。
-
-
新增全年無休執行個體 (具有預設設定) 至 layer,以及啟動它。
當執行個體啟動時,通常需要幾分鐘的時間,您可以建立技術指南。此範例將使用條件式邏輯中稍微修改過的配方版本,這會建立其名稱取決於平台的資料目錄。
設定技術指南
-
在
opsworks_cookbooks
內建立並導覽至名為opstest
的目錄。 -
使用下列內容建立
metadata.rb
檔案,並將它儲存至opstest
。name "opstest" version "0.1.0"
-
在
recipes
內建立opstest
目錄。 -
使用下列配方建立
default.rb
檔案,並將它儲存至recipes
目錄。Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) directory data_dir do mode 0755 owner 'root' group 'root' recursive true action :create end
請注意,配方會記錄訊息,但做法是呼叫
Chef::Log.info
。您在此範例中未使用 Test Kitchen,因此log
方法並不實用。 會將訊息Chef::Log.info
放入 Chef 日誌中,您可以在 Chef 執行完成後讀取。 AWS OpsWorks Stacks 提供輕鬆檢視這些日誌的方式,如下所述。注意
Chef 日誌通常包含許多例行作業和相對無趣的資訊。括住訊息文字的 '*' 字元可讓您更輕鬆地找到它們。
-
建立
opsworks_cookbooks
的.zip
存檔。若要在 AWS OpsWorks Stacks 執行個體上安裝技術指南,您必須將其存放在儲存庫中,並提供 Stacks AWS OpsWorks 將技術指南下載至執行個體所需的資訊。您可以將技術指南存放至任何數個支援的儲存庫類型中。此範例會將包含技術指南的封存檔案存放在 Amazon S3 儲存貯體中。如需技術指南儲存庫的詳細資訊,請參閱技術指南儲存庫。注意
為求簡化,此範例只會封存整個
opsworks_cookbooks
目錄。不過,這表示 Stacks AWS OpsWorks 會將 中的所有技術指南下載opsworks_cookbooks
到執行個體,即使您只使用其中一個。若只要安裝範例技術指南,請建立另一個父目錄,並將opstest
移至該目錄。然後,建立父目錄的.zip
封存,並使用它,而非opsworks_cookbooks.zip
。傳遞至 Amazon S3 儲存貯體的內容可能包含客戶內容。如需移除敏感資料的詳細資訊,請參閱如何清空 S3 儲存貯體?或如何刪除 S3 儲存貯體?。
-
將封存上傳到 Amazon S3 儲存貯體、公開封存,並記錄封存的 URL。
您現在可以安裝技術指南,並執行配方。
執行配方
-
編輯堆疊以啟用自訂技術指南,然後指定下列設定。
-
儲存庫類型 – S3 封存
-
儲存庫 URL – 您先前記錄URL的技術指南封存
針對其他設定使用預設值,然後按一下 Save (儲存) 以更新堆疊組態。
-
-
執行更新自訂技術指南堆疊命令,以在堆疊執行個體上安裝最新版的自訂技術指南。如果存在舊版的技術指南,則此命令會予以覆寫。
-
透過使用配方執行執行執行配方堆疊命令來執行設定為 的配方
opstest::default
。此命令會啟動 Chef 執行,內含包含opstest::default
的回合清單。
成功執行配方之後,您就可以驗證配方。
驗證 opstest
-
第一步是檢查 Chef 日誌。按一下 opstest1 執行個體日誌欄中的顯示以顯示日誌。向下捲動,您會在接近底端看到您的日誌訊息。
... [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache. [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache. [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.****** [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3) ...
-
使用 SSH登入執行個體並列出 的內容
/srv/www/
。
如果您已遵循所有步驟,則會看到 /srv/www/config
,而不是您預期的 /srv/www/shared
目錄。下節提供一些快速修復這類錯誤的指導方針。
自動執行配方
Execute Recipes (執行配方) 命令是一種輕鬆測試自訂配方的方法,這是在其中大部分範例中使用它的原因。不過,實際上,您通常會在執行個體生命週期中的標準點執行配方,例如在執行個體完成開機後或部署應用程式時。 AWS OpsWorks Stacks 透過支援每一層的一組生命週期事件,簡化執行個體上執行的配方:設定、設定、部署、取消部署和關機。您可以將配方指派給適當的生命週期事件,讓 AWS OpsWorks Stacks 自動在 layer 的執行個體上執行配方。
您通常會在執行個體完成開機時立即建立目錄,這對應至安裝事件。以下顯示如何使用您稍早在範例中建立的相同堆疊,在安裝時執行範例配方。您可以針對其他事件使用相同的程序。
在安裝時自動執行配方
-
在導覽窗格中選擇圖層,然後選擇圖 OpsTest 層配方連結旁的鉛筆圖示。
-
將
opstest::default
新增至 layer 的 Setup (安裝) 配方,並按一下 + 將它新增至 layer,然後選擇 Save (儲存) 儲存組態。 -
選擇 Instances (執行個體),並將另一個執行個體新增至 layer,然後啟動它。
執行個體應該命名為
opstest2
。開機完成後, AWS OpsWorks Stacks 會執行opstest::default
。 -
在
opstest2
執行個體上線之後,請驗證/srv/www/shared
已存在。
注意
故障診斷和修復手冊
如果您未取得預期的結果,或您的配方甚至未成功執行,則故障診斷通常會從檢查 Chef 日誌開始。它包含執行的詳細描述,而且包括您配方中的任何內嵌日誌訊息。如果您的配方失敗,則日誌特別有用。發生該情況時,Chef 會記錄錯誤 (包括堆疊追蹤)。
如果配方成功 (如此範例所示),則 Chef 日誌通常不怎麼有幫助。在這種情況下,只要仔細查看配方 (特別是前幾行),就可以找出問題所在:
Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...
當您在 Vagrant 上測試配方時,CentOS 是 Amazon Linux 的適用備用方法,但現在您將在實際 Amazon Linux 執行個體上執行。Amazon Linux 的平台值是 amazon
,但未包含在 value_for_platform
呼叫中,因此配方會建立 /srv/www/config
。如需故障診斷的詳細資訊,請參閱偵錯和故障診斷指南。
現在您已找到問題,您需要更新配方並驗證修復。您可以返回原始來源檔案、更新 default.rb
、上傳新的封存至 Amazon S3,以此類推。不過,該程序可能有點繁瑣且耗時。下列更快速的方式特別適用於簡單配方錯誤 (例如範例中的配方錯誤):編輯執行個體上的配方。
編輯執行個體上的配方
-
使用 SSH登入執行個體,然後執行
sudo su
以提升您的權限。您需要有 root 權限才能存取技術指南目錄。 -
AWS OpsWorks Stacks 會將您的技術指南存放在 中
/opt/aws/opsworks/current/site-cookbooks
,因此請導覽至/opt/aws/opsworks/current/site-cookbooks/opstest/recipes
。注意
AWS OpsWorks Stacks 也會將技術指南的複本存放在 中
/opt/aws/opsworks/current/merged-cookbooks
。請不要編輯該技術指南。當您執行配方時, AWS OpsWorks Stacks 會將技術指南從 複製到.../site-cookbooks
.../merged-cookbooks
,因此您在 中所做的任何變更.../merged-cookbooks
都會遭到覆寫。 -
在執行個體上使用文字編輯器來編輯
default.rb
,並將centos
取代為amazon
。您的配方現在看起來應該與下列類似。Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "amazon" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...
若要驗證修復,請重新執行 Execute Recipe (執行配方) 堆疊命令來執行配方。執行個體現在應該會有一個 /srv/www/shared
目錄。如果您需要進一步變更配方,則可以經常執行 Execute Recipe (執行配方);每次執行命令時,並不需要停止並重新啟動執行個體。對配方正確運作感到滿意後,請不要忘記更新您來源技術指南中的程式碼。