在 Vagrant 上模擬堆疊組態和部署屬性 - AWS OpsWorks

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

在 Vagrant 上模擬堆疊組態和部署屬性

重要

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

注意

本主題僅適用於 Linux 執行個體。測試廚房尚不支持 Windows,因此您將在 AWS OpsWorks 堆棧實例上運行所有 Windows 示例。

AWS OpsWorks Stacks 會針對每個生命週期事件,為堆疊中的每個執行個體新增堆疊配置和部署屬性至節點物件。這些屬性提供堆疊組態的快照,包括每 layer 和其線上執行個體的組態、每個已部署應用程式的組態,以此類推。由於這些屬性位於節點對象中,因此可以通過任何方法訪問它們; AWS OpsWorks Stacks 實例的大多數配方都使用一個或多個這些屬性。

在 Vagrant 框中運行的實例不由 AWS OpsWorks Stacks 管理,因此默認情況下其節點對像不包含任何堆棧配置和部署屬性。不過,您可以將適合的屬性集新增至 Test Kitchen 環境。然後,測試廚房將屬性添加到實例的節點對象中,您的方法可以像訪問 AWS OpsWorks Stacks 實例上的屬性一樣。

本主題顯示如何取得適合堆疊組態和部署屬性的複本、在執行個體上安裝屬性,以及存取它們。

注意

如果您使用 Test Kitchen 在配方上執行測試,則 fauxhai 提供替代方法來模擬堆疊組態和部署 JSON。

設定技術指南
  1. 建立並導覽至名為 printjsonopsworks_cookbooks 子目錄。

  2. 初始化並設定 Test Kitchen,如範例 1:安裝套件中所述。

  3. 將兩個子目錄新增至 printjsonrecipesenvironments

您可以將具有適當定義的屬性檔案新增至技術指南,來模擬堆疊組態和部署屬性,但更佳的方式是使用 Test Kitchen 環境。有兩種基本方式:

  • 將屬性定義新增至 .kitchen.yml

    如果您只有幾個屬性,則此方式最為有用。如需詳細資訊,請參閱 kitchen.yml

  • 在環境檔案中定義屬性,並參考 .kitchen.yml 中的檔案。

    此方式通常適用於堆疊組態和部署屬性,因為環境檔案已為 JSON 格式。您可以從合適的 AWS OpsWorks Stacks 實例中獲取 JSON 格式的屬性副本,然後將其粘貼到中。所有範例都會使用環境檔案。

建立您技術指南的堆疊組態和部署屬性的最簡單方法是建立已適當設定的堆疊,以及從執行個體複製產生的屬性且其格式為 JSON。為了讓 Test Kitchen 環境易於管理,您可以接著編輯該 JSON 檔案,使其只具有您配方所需的屬性。本章中的範例根據Chef 11 Linux 堆疊入門 中的堆疊,此簡單 PHP 應用程式伺服器堆疊具有一個負載平衡器、多部 PHP 應用程式伺服器和一個 MySQL 資料庫伺服器。

建立堆疊組態和部署 JSON
  1. 按照中所 MyStack 述進行創建Chef 11 Linux 堆疊入門,包括部署簡單的 PAPP。如果您願意,您可以省略呼叫 in 的第二個 PHP 應用程式伺服器執行個體步驟 4:向外延展 MyStack;這些範例不會使用這些屬性。

  2. 如果您尚未這麼做,則請啟動 php-app1 執行個體,然後使用 SSH 登入

  3. 在終端機視窗中,執行下列 agent cli 命令:

    sudo opsworks-agent-cli get_json

    此命令會將執行個體的最新堆疊組態和部署屬性以 JSON 格式列印到終端機視窗。

  4. 將 JSON 複製至 .json 檔案,並將它儲存至工作站上的方便位置。詳細資訊取決於 SSH 用戶端。例如,如果您在 Windows 上使用 PuTTY,則可以執行 Copy All to Clipboard 命令,以將終端機視窗中的所有文字都複製至 Windows 剪貼簿。您接著可以將內容貼入 .json 檔案,並編輯檔案以移除多餘的文字。

  5. 視需要編輯 MyStack JSON。堆疊組態和部署屬性有很多,而且技術指南通常只會使用其中的一小部分。為了讓環境檔案易於管理,您可以編輯 JSON,讓它保留原始結構,但只包含您技術指南實際使用的屬性。

    此範例使用大量編輯過的 MyStack JSON 版本,其中只包含兩個['opsworks']['stack']屬性['id]['name']。建立 MyStack JSON 的編輯版本,如下所示:

    { "opsworks": { "stack": { "name": "MyStack", "id": "42dfd151-6766-4f1c-9940-ba79e5220b58", }, }, }

若要讓此 JSON 進入執行個體的節點物件,您需要將它新增至 Test Kitchen 環境。

將堆疊組態和部署屬性新增至 Test Kitchen 環境
  1. 使用下列內容建立名為 test.json 的環境檔案,並將它儲存至技術指南的 environments 資料夾。

    { "default_attributes": { "opsworks" : { "stack" : { "name" : "MyStack", "id" : "42dfd151-6766-4f1c-9940-ba79e5220b58" } } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }

    環境檔案具有下列元素:

    • default_attributes— JSON 格式的預設屬性。

      這些屬性會新增至具有 default 屬性類型的節點物件,這是所有堆疊組態和部署 JSON 屬性所使用的類型。此範例使用先前顯示且編輯過的堆疊組態和部署 JSON 版本。

    • chef_type— 將此元素設定為environment

    • json_class— 將此元素設定為Chef::Environment

  2. 編輯 .kitchen.yml 來定義 Test Kitchen 環境,如下所示。

    --- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-12.04 suites: - name: printjson provisioner: solo_rb: environment: test run_list: - recipe[printjson::default] attributes:

    您可以將下列元素新增至 kitchen init 所建立的預設 .kitchen.yml,來定義環境。

    provisioner

    新增下列元素。

    • name— 將此元素設定為chef_solo

      要更緊密地複製 AWS OpsWorks 堆棧環境,您可以使用 Chef 客戶端本地模式而不是 Chef 獨奏。本機模式是一個 Chef 用戶端選項,使用在執行個體上本機執行的輕量版 Chef 伺服器 (Chef Zero),而非遠端伺服器。這可讓您的配方使用 Chef 伺服器功能,例如未連線至遠端伺服器的搜尋或資料包。

    • environments_path— 包含環境檔案的食譜子目錄,./environments例如此範例。

    suites:provisioner

    新增 solo_rb 元素,但其 environment 元素設定為環境檔案名稱並去除 .json 副檔名。此範例將 environment 設定為 test

  3. 使用下列內容建立名為 default.rb 的配方檔案,並將它儲存至技術指南的 recipes 目錄。

    log "Stack name: #{node['opsworks']['stack']['name']}" log "Stack id: #{node['opsworks']['stack']['id']}"

    此配方只會記錄您新增至環境的兩個堆疊組態和部署值。雖然配方在 Virtual Box 本機執行,但是您可以使用與在 AWS OpsWorks Stacks 執行個體上執行方案時所採用的節點語法相同的節點語法來參考這些屬性。

  4. 執行 kitchen converge。您應該會看到與下列類似的日誌輸出。

    ... Converging 2 resources Recipe: printjson::default * log[Stack name: MyStack] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack name: MyStack] action write (printjson::default line 1) [2014-07-01T23:14:09+00:00] INFO: Stack name: MyStack * log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write (printjson::default line 2) [2014-07-01T23:14:09+00:00] INFO: Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58 ...