本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Linux 執行個體上使用外部技術指南:Berkshelf
重要
AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問,請透過 AWS re:Post
注意
Berkshelf 僅適用於 Chef 11.10 Linux 堆疊。
在您開始實作技術指南之前,請參閱 Chef 社群技術指南
若要在執行個體上使用外部技術指南,您需要安裝它並管理任何相依性的方法。偏好的方式是實作技術指南,而技術指南支援名為 Berkshelf 的相依性管理員。Berkshelf 適用於 Amazon EC2 執行個體,包括 OpsWorks Stacks 執行個體,但也旨在與 Test Kitchen 和 Vagrant 搭配使用。不過,Vagrant 上的用量與 Stacks OpsWorks 略有不同,因此本主題包含兩個平台的範例。如需如何使用 Berkshelf 的詳細資訊,請參閱 Berkshelf
搭配使用 Berkshelf 與 Test Kitchen 和 Vagrant
此範例顯示如何使用 Berkshelf 來安裝 getting-started 社群技術指南並執行其配方,以在執行個體的主目錄中安裝簡短文字檔。
安裝 Berkshelf 並初始化技術指南
-
在您的工作站上,安裝 Berkshelf Gem,如下所示。
gem install berkshelf
視您的工作站而定,此命令可能需要
sudo
,或者您也可以使用 Ruby 環境管理員,例如 RVM。若要驗證是否已成功安裝 Berkshelf,請執行 berks --version
。 -
本主題的技術指南命名為 external_cookbook。您可以使用 Berkshelf 建立初始化的技術指南,而非先前主題所採用的手動方式。若要這麼做,請導覽至
opsworks_cookbooks
目錄,並執行下列命令。berks cookbook external_cookbook
此命令會建立
external_cookbook
目錄以及數種標準 Chef 和 Test Kitchen 子目錄 (包括recipes
和test
)。此命令也會建立數種標準檔案的預設版本,包括下列項目:-
metadata.rb
-
Vagrant、Test Kitchen 和 Berkshelf 的組態檔
-
default.rb
目錄中的空recipes
配方
注意
您不需要執行
kitchen init
;berks cookbook
命令會處理這些任務。 -
-
執行
kitchen converge
。新建立的技術指南目前不會執行任何有趣的動作,但會收歛。
注意
您也可以使用 berks init
,初始化現有技術指南來使用 Berkshelf。
若要使用 Berkshelf 管理技術指南的外部相依性,技術指南的根目錄必須包含 Berksfile
,而此組態檔指定 Berkshelf 應該如何管理相依性。當您使用 berks cookbook
建立 external_cookbook
技術指南時,會建立具有下列內容的 Berksfile
。
source "https://supermarket.chef.io" metadata
此檔案的宣告如下:
-
source
– 技術指南來源的 URL。Berksfile 可以有任意數目的
source
宣告,而且每個宣告都指定相依技術指南的預設來源。如果您未明確指定技術指南的來源,則 Berkshelf 會查看同名技術指南的預設儲存庫。預設 Berksfile 包括可指定社群技術指南儲存庫的單一source
屬性。該儲存庫包含 getting-started 技術指南,因此您可以將該列保持不變。 -
metadata
– 指示 Berkshelf 包含技術指南檔案中宣告的技術指南相依性metadata.rb
。您也可以包括
cookbook
屬性以在 Berksfile 中宣告相依技術指南,稍後將會予以討論。
有兩種方法可以宣告技術指南相依性:
-
在 Berksfile 中包括
cookbook
宣告。這是 Stacks OpsWorks 使用的方法。例如,若要指定此範例中所使用的 getting-started 技術指南,請在 Berksfile 中包括
cookbook "getting-started"
。Berkshelf 接著會查看預設儲存庫中是否有該名稱的技術指南。您也可以使用cookbook
明確指定技術指南來源,甚至指定特定版本。如需詳細資訊,請參閱 Berkshelf。 -
在 Berksfile 中包括
metadata
宣告,並在metadata.rb
中宣告相依性。此宣告指示 Berkshelf 包括
metadata.rb
中所宣告的技術指南相依性。例如,若要宣告 getting-started 相依性,請將depends 'getting-started'
宣告新增至技術指南的metadata.rb
檔案。
此範例使用第一個方法,以與 Stacks OpsWorks 保持一致。
安裝 getting-started 技術指南
-
編輯預設 Berksfile,以將
metadata
宣告取代為cookbook
的getting-started
宣告。內容應該與下列類似。source "https://supermarket.chef.io" cookbook 'getting-started'
-
執行
berks install
,以將 getting-started 技術指南從社群技術指南儲存庫下載至您工作站的 Berkshelf 目錄 (通常為~/.berkshelf
)。此目錄通常只會稱為 Berkshelf。查看 Berkshelf 的cookbooks
目錄,而您應該會看到 getting-started 技術指南的目錄,而其命名類似getting-started-0.4.0
。 -
將
external_cookbook::default
回合清單中的.kitchen.yml
取代為getting-started::default
。此範例不會從 external_cookbook 執行任何配方;它基本上就只是使用 getting-started 技術指南的方式。.kitchen.yml
檔案現在應該與下列類似。--- driver: name: vagrant provisioner: name: chef_solo platforms: - name: ubuntu-12.04 suites: - name: default run_list: - recipe[getting-started::default] attributes:
-
執行
kitchen converge
,然後使用kitchen login
登入執行個體。登入目錄應該包含名為chef-getting-started.txt
且具有下列類似內容的檔案:Welcome to Chef! This is Chef version 11.12.8. Running on ubuntu. Version 12.04.
Test Kitchen 會在執行個體的
/tmp/kitchen/cookbooks
目錄中安裝技術指南。如果您列出該目錄的內容,則會看到兩個技術指南:external_cookbook 和 getting-started。 -
執行
kitchen destroy
關機執行個體。下一個範例使用 OpsWorks Stacks 執行個體。
搭配 Stacks OpsWorks 使用 Berkshelf
OpsWorks Stacks 選擇性支援 Berkshelf for Chef 11.10 堆疊。若要搭配使用 Berkshelf 與您的堆疊,您必須執行下列動作。
-
啟用堆疊的 Berkshelf。
OpsWorks Stacks 接著會處理在堆疊執行個體上安裝 Berkshelf 的詳細資訊。
-
將 Berksfile 新增至技術指南儲存庫的根目錄。
Berksfile 應該包含所有相依技術指南的
source
和cookbook
宣告。
當 OpsWorks Stacks 在執行個體上安裝您的自訂技術指南儲存庫時,它會使用 Berkshelf 來安裝儲存庫 Berksfile 中宣告的相依技術指南。如需詳細資訊,請參閱使用 Berkshelf。
此範例示範如何使用 Berkshelf 在 Stacks OpsWorks 執行個體上安裝入門社群技術指南。它也會安裝用來建立 createfile 自訂技術指南的版本,以在指定的目錄中建立檔案。如需 createfile 運作方式的詳細資訊,請參閱從技術指南安裝檔案。
注意
如果這是您第一次在 Stacks OpsWorks 堆疊上安裝自訂技術指南,您應該先瀏覽在 Linux 執行個體上執行配方範例。
從建立堆疊開始,彙總如下。如需詳細資訊,請參閱建立新的堆疊。
建立堆疊
-
開啟 OpsWorks Stacks 主控台
,然後按一下 Add Stack (新增堆疊)。 -
指定下列設定,並接受其他設定的預設值,然後按一下 Add Stack (新增堆疊)。
-
名稱 – BerksTest
-
預設 SSH 金鑰 – Amazon EC2 金鑰對
如果您需要建立 Amazon EC2 金鑰對,請參閱 Amazon EC2 金鑰對。請注意,金鑰對必須屬於與執行個體相同的 AWS 區域。此範例使用預設的美國西部 (奧勒岡) 區域。
-
-
按一下 Add a layer (新增 layer),並新增自訂 layer 至具有下列設定的堆疊。
-
名稱 – BerksTest
-
簡短名稱 – berkstest
您可以針對此範例實際使用任何 layer 類型。不過,此範例不需要其他 layer 所安裝的任何套件,因此自訂 layer 是最簡單的方法。
-
-
新增全年無休執行個體至 BerksTest layer (具有預設設定),但尚未啟動它。
使用 OpsWorks Stacks,技術指南必須位於具有標準目錄結構的遠端儲存庫中。然後,您將下載資訊提供給 OpsWorks Stacks,其會在啟動時自動將儲存庫下載到每個堆疊的執行個體。為了簡化,此範例的儲存庫是公有 Amazon S3 封存,但 OpsWorks Stacks 也支援 HTTP 封存、Git 儲存庫和 Subversion 儲存庫。如需詳細資訊,請參閱技術指南儲存庫。
傳遞至 Amazon S3 儲存貯體的內容可能包含客戶內容。如需移除敏感資料的詳細資訊,請參閱如何清空 S3 儲存貯體?或如何刪除 S3 儲存貯體?。
建立技術指南儲存庫
-
在
opsworks_cookbooks
目錄中,建立名為berkstest_cookbooks
的目錄。如果您想要,則可以在您方便找到的任何位置建立此目錄,因為您會將它上傳至儲存庫。 -
使用下列內容,將名為 Berksfile 的檔案新增至
berkstest_cookbooks
。source "https://supermarket.chef.io" cookbook 'getting-started'
此檔案宣告 getting-started 技術指南相依性,並指示 Berkshelf 從社群技術指南網站下載它。
-
將
createfile
目錄新增至包含下列內容的berkstest_cookbooks
。-
具有下列內容的
metadata.rb
檔案。name "createfile" version "0.1.0"
-
包含具有下列內容之
files/default
檔案的example_data.json
目錄。{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
檔案的名稱和內容為任意的。配方只需要將檔案複製至指定的位置。
-
包含具有下列配方程式碼之
recipes
檔案的default.rb
目錄。directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end
此配方會建立
/srv/www/shared
,並將example_data.json
從技術指南的files
目錄複製至該目錄。
-
-
建立 的
.zip
封存berkstest_cookbooks
、上傳封存至 Amazon S3 儲存貯體、將封存設為公有,並記錄封存的 URL。
您現在可以安裝技術指南,並執行配方。
安裝技術指南並執行配方
-
編輯堆疊以啟用自訂技術指南,然後指定下列設定。
-
儲存庫類型 – Http Archive
-
儲存庫 URL – 您先前記錄的技術指南封存 URL
-
管理 Berkshelf – 是
前兩個設定提供 OpsWorks Stacks 將技術指南儲存庫下載到您的執行個體所需的資訊。最後一個設定會啟用 Berkshelf 支援,以將 getting-started 技術指南下載至執行個體。接受其他設定的預設值,然後按一下 Save (儲存) 以更新堆疊組態。
-
-
編輯 BerksTest layer,以將下列配方新增至 layer 的安裝生命週期事件。
-
getting-started::default
-
createfile::default
-
-
啟動實例。設定事件會在執行個體完成開機後發生。 OpsWorks Stacks 接著會安裝技術指南儲存庫、使用 Berkshelf 下載入門技術指南,以及執行 layer 的設定和部署配方,包括
getting-started::default
和createfile::default
。 -
執行個體上線之後,請使用 SSH 登入。您應該會看到下列事項:
-
/srv/www/shared
應該包含example_data.json
。 -
/root
應該包含chef-getting-started.txt
。OpsWorks Stacks 會以根目錄的形式執行配方,因此入門會將 檔案安裝在
/root
目錄中,而不是您的主目錄中。
-