在 AWS OpsWorks 堆疊 Linux 執行個體上執行方案 - AWS OpsWorks

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

在 AWS OpsWorks 堆疊 Linux 執行個體上執行方案

重要

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

測試廚房和 Vagrant 提供了一種簡單有效的方法來實現食譜,但要驗證食譜的食譜在生產環境中是否能正常運行,您必須在 Stacks 實例 AWS OpsWorks 上運行它們。本主題說明如何在 AWS OpsWorks Stacks Linux 執行個體上安裝自訂技術指南,以及執行簡單配方。本主題也提供一些有效修復配方錯誤的秘訣。

如需如何在 Windows 執行個體上執行配方的描述,請參閱在 Windows 執行個體上執行配方

建立和執行配方

首先,您需要建立堆疊。以下簡短地彙總如何針對此範例建立堆疊。如需詳細資訊,請參閱 建立新的堆疊

建立 堆疊
  1. 開啟 AWS OpsWorks Stacks 主控台,然後按一下 Add Stack (新增堆疊)

  2. 指定下列設定,並接受其他設定的預設值,然後按一下 Add Stack (新增堆疊)

    • 名稱 — OpsTest

    • 預設安全殼層金鑰 — Amazon EC2 key pair

    如果您需要建立 Amazon EC2 key pair,請參閱 Amazon EC2 金鑰配對。請注意,金鑰對必須屬於與執行個體相同的 AWS 區域。此範例使用預設的美國西部 (奧勒岡) 區域。

  3. 按一下 Add a layer (新增 layer),並新增自訂 layer 至具有下列設定的堆疊。

    • 名稱 — OpsTest

    • 短名稱 — 支持

    任何 layer 類型都會實際作用於 Linux 堆疊,但此範例不需要其他 layer 類型所安裝的任何套件,因此自訂 layer 是最簡單的方法。

  4. 新增全年無休執行個體 (具有預設設定) 至 layer,以及啟動它

執行個體正在啟動時 (通常需要幾分鐘),您可以建立食譜。此範例將使用條件式邏輯中稍微修改過的配方版本,這會建立其名稱取決於平台的資料目錄。

設定技術指南
  1. opsworks_cookbooks 內建立並導覽至名為 opstest 的目錄。

  2. 使用下列內容建立 metadata.rb 檔案,並將它儲存至 opstest

    name "opstest" version "0.1.0"
  3. recipes 內建立 opstest 目錄。

  4. 使用下列配方建立 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。您沒有在此示例中使用測試廚房,因此該log方法不是很有用。 Chef::Log.info將消息放入 Chef 日誌中,您可以在 Chef 運行完成後閱讀該日誌。 AWS OpsWorks 堆疊提供檢視這些記錄的簡單方法,如稍後所述。

    注意

    Chef 日誌通常包含許多例行作業和相對無趣的資訊。括住訊息文字的 '*' 字元可讓您更輕鬆地找到它們。

  5. 建立 opsworks_cookbooks.zip 存檔。若要將食譜安裝在 AWS OpsWorks Stacks 執行個體上,您必須將其儲存在儲存庫中,並向 AWS OpsWorks Stacks 提供將食譜下載至執行個體所需的資訊。您可以將技術指南存放至任何數個支援的儲存庫類型中。此範例將包含食譜的存檔檔案儲存在 Amazon S3 儲存貯體中。如需技術指南儲存庫的詳細資訊,請參閱技術指南儲存庫

    注意

    為求簡化,此範例只會封存整個 opsworks_cookbooks 目錄。但是,這意味著 AWS OpsWorks Stacks 會將所有食譜下載opsworks_cookbooks到實例中,即使您只會使用其中一本。若只要安裝範例技術指南,請建立另一個父目錄,並將 opstest 移至該目錄。然後,建立父目錄的 .zip 封存,並使用它,而非 opsworks_cookbooks.zip

    傳遞至 Amazon S3 儲存貯體的內容可能包含客戶內容。如需移除敏感資料的詳細資訊,請參閱如何清空 S3 儲存貯體?如何刪除 S3 儲存貯體?

  6. 將存檔上傳到 Amazon S3 儲存貯體、將存檔設為公開,並記錄存檔的 URL。

您現在可以安裝技術指南,並執行配方。

執行配方
  1. 編輯堆疊以啟用自訂技術指南,然後指定下列設定。

    • 存放庫類型S3 存檔

    • 儲存庫 URL — 您之前錄製的食譜封存網址

    針對其他設定使用預設值,然後按一下 Save (儲存) 以更新堆疊組態。

  2. 執行更新自訂技術指南堆疊命令,以在堆疊執行個體上安裝最新版的自訂技術指南。如果存在舊版的技術指南,則此命令會予以覆寫。

  3. 透過執行方法堆疊命令並將要執行的方法設定為執行方案來執行方案opstest::default。此命令會啟動 Chef 執行,內含包含 opstest::default 的回合清單。

成功執行配方之後,您就可以驗證配方。

驗證 opstest
  1. 第一步是檢查 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) ...
  2. 使用 SSH 登入執行個體,並列出 /srv/www/ 的內容。

如果您已遵循所有步驟,則會看到 /srv/www/config,而不是您預期的 /srv/www/shared 目錄。下節提供一些快速修復這類錯誤的指導方針。

自動執行配方

Execute Recipes (執行配方) 命令是一種輕鬆測試自訂配方的方法,這是在其中大部分範例中使用它的原因。不過,實際上,您通常會在執行個體生命週期的標準點執行方法,例如執行個體完成開機後或部署應用程式時。 AWS OpsWorks Stack 可為每個層支援一組生命週期事件,以簡化執行個體上的執行方法:設定、設定、部署、取消部署和關閉。您可以將配方指派給適當的生命週期事件,讓 AWS OpsWorks 堆疊自動在圖層的執行個體上執行配方。

您通常會在執行個體完成開機時立即建立目錄,這對應至安裝事件。以下顯示如何使用您稍早在範例中建立的相同堆疊,在安裝時執行範例配方。您可以針對其他事件使用相同的程序。

在安裝時自動執行配方
  1. 在導覽窗格中選擇「圖」,然後選擇圖 OpsTest 層「配方」連結旁邊的鉛筆圖示。

  2. opstest::default 新增至 layer 的 Setup (安裝) 配方,並按一下 + 將它新增至 layer,然後選擇 Save (儲存) 儲存組態。

  3. 選擇 Instances (執行個體),並將另一個執行個體新增至 layer,然後啟動它。

    執行個體應該命名為 opstest2。完成啟動後, AWS OpsWorks 堆棧將運行opstest::default

  4. 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 等等。不過,該程序可能有點繁瑣且耗時。下列更快速的方式特別適用於簡單配方錯誤 (例如範例中的配方錯誤):編輯執行個體上的配方。

編輯執行個體上的配方
  1. 使用 SSH 登入執行個體,然後執行 sudo su 以提升您的權限。您需要有 root 權限才能存取技術指南目錄。

  2. AWS OpsWorks 堆棧將您的食譜存儲在中/opt/aws/opsworks/current/site-cookbooks,因此請導航到/opt/aws/opsworks/current/site-cookbooks/opstest/recipes

    注意

    AWS OpsWorks 「堆疊」也會將食譜的副本儲存在中/opt/aws/opsworks/current/merged-cookbooks。請不要編輯該技術指南。當您執行配方時, AWS OpsWorks Stacks 會將食譜從複製.../site-cookbooks.../merged-cookbooks,因此您在中所做的任何更改都.../merged-cookbooks會被覆蓋。

  3. 在執行個體上使用文字編輯器來編輯 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 (執行配方);每次執行命令時,並不需要停止並重新啟動執行個體。對配方正確運作感到滿意後,請不要忘記更新您來源技術指南中的程式碼。

注意

如果您已將方案指派給生命週期事件,讓 AWS OpsWorks Stacks 自動執行,您可以隨時使用「執行方案」重新執行配方。您也可以使用 AWS OpsWorks Stacks 主控台手動觸發適當的事件,不必重新啟動執行個體即可重新執行方案。不過,此方式會執行事件的所有配方。提醒如下: