本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Vagrant 上模擬堆疊組態和部署屬性
重要
所以此 AWS OpsWorks Stacks 服務於 2024 年 5 月 26 日終止使用壽命,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載移轉至其他解決方案。如果您對移轉有任何疑問,請聯絡 AWS Support 團隊上 AWS Re: 郵寄
注意
本主題僅適用於 Linux 執行個體。測試廚房尚不支持視窗,因此您將運行所有 Windows 示例 AWS OpsWorks 堆疊執行個體。
AWS OpsWorks Stacks 會針對每個生命週期事件,將堆疊配置和部署屬性新增至堆疊中每個執行個體的節點物件。這些屬性提供堆疊組態的快照,包括每 layer 和其線上執行個體的組態、每個已部署應用程式的組態,以此類推。因為這些屬性位於節點對象中,因此可以通過任何配方訪問它們; 大多數食譜 AWS OpsWorks 堆疊實體會使用一或多個這些屬性。
在流浪框中運行的實例不由管理 AWS OpsWorks 堆棧,因此默認情況下,其節點對像不包括任何堆棧配置和部署屬性。不過,您可以將適合的屬性集新增至 Test Kitchen 環境。然後測試廚房將屬性添加到實例的節點對象中,並且您的方法可以像訪問屬性一樣訪問屬性 AWS OpsWorks 堆棧實例。
本主題顯示如何取得適合堆疊組態和部署屬性的複本、在執行個體上安裝屬性,以及存取它們。
注意
如果您使用測試廚房對您的食譜運行測試,fauxhai
設定技術指南
-
建立並導覽至名為
printjson
的opsworks_cookbooks
子目錄。 -
初始化並設定 Test Kitchen,如範例 1:安裝套件中所述。
-
將兩個子目錄新增至
printjson
:recipes
和environments
。
您可以將具有適當定義的屬性檔案新增至技術指南,來模擬堆疊組態和部署屬性,但更佳的方式是使用 Test Kitchen 環境。有兩種基本方式:
-
將屬性定義新增至
.kitchen.yml
。如果您只有幾個屬性,則此方式最為有用。如需詳細資訊,請參閱 kitchen.yml
。 -
在環境檔案中定義屬性,並參考
.kitchen.yml
中的檔案。這種方法通常適用於堆疊配置和部署屬性,因為環境檔案已經是JSON格式化。您可以從合適的JSON格式獲取屬性的副本 AWS OpsWorks 堆棧實例並將其粘貼。所有範例都會使用環境檔案。
為您的食譜創建堆棧配置和部署屬性的最簡單方法是創建一個適當配置的堆棧,並將生成的屬性從實例複製為JSON。為了使您的測試廚房環境文件易於管理,然後您可以對其JSON進行編輯,以僅具有您的配方所需的屬性。本章中的範例是以從堆疊為基礎Chef 11 Linux 堆疊入門,堆疊是具有負載平衡器、PHP應用程式伺服器和 My SQL 資料庫伺服器的簡單PHP應用程式伺服器堆疊。
若要建立堆疊組態和部署 JSON
-
MyStack 如中所述建立Chef 11 Linux 堆疊入門,包括部署 S implePHPApp。如果您願意,您可以省略呼叫 in 的第二個 PHP App Server 執行個體步驟 4:向外延展 MyStack;這些範例不會使用這些屬性。
-
如果您尚未這麼做,請啟動
php-app1
執行個體,然後使用登入SSH。 -
在終端機視窗中,執行下列 agent cli 命令:
sudo opsworks-agent-cli get_json
這個命令會以JSON格式將執行個體最新的堆疊設定和部署屬性列印到終端機視窗中。
-
複製JSON到
.json
檔案並將其儲存在工作站上方便的位置。詳細信息取決於您的SSH客戶。例如,如果您在 Windows TTY 上使用 Pu,則可以執行該Copy All to Clipboard
命令,該命令會將終端機視窗中的所有文字複製到 Windows 剪貼簿。您接著可以將內容貼入.json
檔案,並編輯檔案以移除多餘的文字。 -
根據需 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.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
。
-
-
編輯
.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
。
-
使用下列內容建立名為
default.rb
的配方檔案,並將它儲存至技術指南的recipes
目錄。log "Stack name: #{node['opsworks']['stack']['name']}" log "Stack id: #{node['opsworks']['stack']['id']}"
此配方只會記錄您新增至環境的兩個堆疊組態和部署值。雖然配方在 Virtual Box 本機執行,但是您可以使用相同的節點語法來參考這些屬性,如果方案在 AWS OpsWorks 堆棧實例。
-
執行
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 ...