在 Linux 執行個體上使用外部技術指南:Berkshelf - AWS OpsWorks

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

在 Linux 執行個體上使用外部技術指南:Berkshelf

重要

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

注意

Berkshelf 僅適用於 Chef 11.10 Linux 堆疊。

在您開始實作技術指南之前,請參閱 Chef 社群技術指南,其中包含 Chef 社群成員基於各種用途所建立的技術指南。許多這些食譜都可以與 AWS OpsWorks Stack 一起使用,而無需修改,因此您可以將它們用於某些任務,而不是自己實現所有代碼。

若要在執行個體上使用外部技術指南,您需要安裝它並管理任何相依性的方法。偏好的方式是實作技術指南,而技術指南支援名為 Berkshelf 的相依性管理員。Berkshelf 適用於 Amazon EC2 實例,包括 AWS OpsWorks 堆棧實例,但它也被設計為與測試廚房和流浪者一起使用。但是,Vagrant 上的用法與 AWS OpsWorks Stacks 有些不同,因此本主題包括兩個平台的示例。如需如何使用 Berkshelf 的詳細資訊,請參閱 Berkshelf

搭配使用 Berkshelf 與 Test Kitchen 和 Vagrant

此範例顯示如何使用 Berkshelf 來安裝 getting-started 社群技術指南並執行其配方,以在執行個體的主目錄中安裝簡短文字檔。

安裝 Berkshelf 並初始化技術指南
  1. 在您的工作站上,安裝 Berkshelf Gem,如下所示。

    gem install berkshelf

    視您的工作站而定,此命令可能需要 sudo,或者您也可以使用 Ruby 環境管理員,例如 RVM。若要驗證是否已成功安裝 Berkshelf,請執行 berks --version

  2. 本主題的技術指南命名為 external_cookbook。您可以使用 Berkshelf 建立初始化的技術指南,而非先前主題所採用的手動方式。若要這麼做,請導覽至 opsworks_cookbooks 目錄,並執行下列命令。

    berks cookbook external_cookbook

    此命令會建立 external_cookbook 目錄以及數種標準 Chef 和 Test Kitchen 子目錄 (包括 recipestest)。此命令也會建立數種標準檔案的預設版本,包括下列項目:

    • metadata.rb

    • Vagrant、Test Kitchen 和 Berkshelf 的組態檔

    • default.rb 目錄中的空 recipes 配方

    注意

    您不需要執行 kitchen initberks cookbook 命令會處理這些任務。

  3. 執行 kitchen converge。新建立的技術指南目前不會執行任何有趣的動作,但會收歛。

注意

您也可以使用 berks init,初始化現有技術指南來使用 Berkshelf。

若要使用 Berkshelf 管理技術指南的外部相依性,技術指南的根目錄必須包含 Berksfile,而此組態檔指定 Berkshelf 應該如何管理相依性。當您使用 berks cookbook 建立 external_cookbook 技術指南時,會建立具有下列內容的 Berksfile

source "https://supermarket.chef.io" metadata

此檔案的宣告如下:

  • source— 食譜來源的網址。

    Berksfile 可以有任意數目的 source 宣告,而且每個宣告都指定相依技術指南的預設來源。如果您未明確指定技術指南的來源,則 Berkshelf 會查看同名技術指南的預設儲存庫。預設 Berksfile 包括可指定社群技術指南儲存庫的單一 source 屬性。該儲存庫包含 getting-started 技術指南,因此您可以將該列保持不變。

  • metadata— 指示 Berkshelf 包含在食譜文件中聲明的食譜依賴關係。metadata.rb

    您也可以包括 cookbook 屬性以在 Berksfile 中宣告相依技術指南,稍後將會予以討論。

有兩種方法可以宣告技術指南相依性:

  • 在 Berksfile 中包括 cookbook 宣告。

    這是 AWS OpsWorks 堆棧使用的方法。例如,若要指定此範例中所使用的 getting-started 技術指南,請在 Berksfile 中包括 cookbook "getting-started"。Berkshelf 接著會查看預設儲存庫中是否有該名稱的技術指南。您也可以使用 cookbook 明確指定技術指南來源,甚至指定特定版本。如需詳細資訊,請參閱 Berkshelf

  • 在 Berksfile 中包括 metadata 宣告,並在 metadata.rb 中宣告相依性。

    此宣告指示 Berkshelf 包括 metadata.rb 中所宣告的技術指南相依性。例如,若要宣告 getting-started 相依性,請將 depends 'getting-started' 宣告新增至技術指南的 metadata.rb 檔案。

這個例子使用第一種方法,以確保與 AWS OpsWorks Stacks 的一致性。

安裝 getting-started 技術指南
  1. 編輯預設 Berksfile,以將 metadata 宣告取代為 cookbookgetting-started 宣告。內容應該與下列類似。

    source "https://supermarket.chef.io" cookbook 'getting-started'
  2. 執行 berks install,以將 getting-started 技術指南從社群技術指南儲存庫下載至您工作站的 Berkshelf 目錄 (通常為 ~/.berkshelf)。此目錄通常只會稱為 Berkshelf。查看 Berkshelf 的 cookbooks 目錄,而您應該會看到 getting-started 技術指南的目錄,而其命名類似 getting-started-0.4.0

  3. 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:
  4. 執行 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。

  5. 執行 kitchen destroy 關機執行個體。下一個範例使用 AWS OpsWorks Stacks 實體。

使用帶有堆棧的伯克架 AWS OpsWorks

AWS OpsWorks 堆棧可以選擇支持伯克架為廚師 11.10 堆棧。若要搭配使用 Berkshelf 與您的堆疊,您必須執行下列動作。

  • 啟用堆疊的 Berkshelf。

    AWS OpsWorks 然後,堆疊會處理在堆疊執行個體上安裝 Berkshelf 的詳細資訊。

  • 將 Berksfile 新增至技術指南儲存庫的根目錄。

    Berksfile 應該包含所有相依技術指南的 sourcecookbook 宣告。

當 AWS OpsWorks Stacks 在執行個體上安裝自訂食譜儲存庫時,它會使用 Berkshelf 安裝在儲存庫的 Berksfile 中宣告的相依食譜。如需詳細資訊,請參閱 使用 Berkshelf

這個範例說明如何使用 Berkshelf 在 Stacks 執行個體上安裝已開始使用的社群食譜。 AWS OpsWorks 它也會安裝用來建立 createfile 自訂技術指南的版本,以在指定的目錄中建立檔案。如需 createfile 運作方式的詳細資訊,請參閱從技術指南安裝檔案

注意

如果這是您第一次在「堆疊」 AWS OpsWorks 堆疊上安裝自訂食譜,您應該先進行在 Linux 執行個體上執行配方範例。

從建立堆疊開始,彙總如下。如需詳細資訊,請參閱 建立新的堆疊

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

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

    • 名稱 — BerksTest

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

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

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

    • 名稱 — BerksTest

    • 短名稱 — 伯克斯特斯特

    您可以針對此範例實際使用任何 layer 類型。不過,此範例不需要其他 layer 所安裝的任何套件,因此自訂 layer 是最簡單的方法。

  4. 使用默認設置將 24/7 實例添加到 BerksTest 圖層,但不要啟動它。

使用 AWS OpsWorks Stacks 時,食譜必須位於具有標準目錄結構的遠程存儲庫中。然後將下載資訊提供給 AWS OpsWorks Stacks,Stacks 會在啟動時自動將儲存庫下載到每個堆疊的執行個體。為了簡單起見,此範例的儲存庫是公開的 Amazon S3 存檔,但 AWS OpsWorks Stack 也支援 HTTP 存檔、Git 儲存庫和顛覆儲存庫。如需詳細資訊,請參閱 技術指南儲存庫

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

建立技術指南儲存庫
  1. opsworks_cookbooks 目錄中,建立名為 berkstest_cookbooks 的目錄。如果您想要,則可以在您方便找到的任何位置建立此目錄,因為您會將它上傳至儲存庫。

  2. 使用下列內容,將名為 Berksfile 的檔案新增至 berkstest_cookbooks

    source "https://supermarket.chef.io" cookbook 'getting-started'

    此檔案宣告 getting-started 技術指南相依性,並指示 Berkshelf 從社群技術指南網站下載它。

  3. 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 目錄複製至該目錄。

  4. 建立.zip存檔berkstest_cookbooks將存檔上傳到 Amazon S3 儲存貯體、公開存檔,並記錄存檔的 URL。

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

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

    • 存儲庫類型-HTTP 存檔

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

    • 管理伯克架-

    前兩個設定為 AWS OpsWorks Stacks 提供了將食譜儲存庫下載到執行個體所需的資訊。最後一個設定會啟用 Berkshelf 支援,以將 getting-started 技術指南下載至執行個體。接受其他設定的預設值,然後按一下 Save (儲存) 以更新堆疊組態。

  2. 編輯圖 BerksTest 層,以將下列配方新增至圖層的設定生命週期事件

    • getting-started::default

    • createfile::default

  3. 啟動實例。安裝程式事件會在執行個體完成開機之後發生。 AWS OpsWorks Stacks 然後安裝食譜存儲庫,使用 Berkshelf 下載獲取開始的食譜,並運行該層的設置和部署配方,包括和。getting-started::default createfile::default

  4. 執行個體上線之後,請使用 SSH 登入。您應該會看到下列事項:

    • /srv/www/shared 應該包含 example_data.json

    • /root 應該包含 chef-getting-started.txt

      AWS OpsWorks 堆棧以 root 身份運行配方,因此獲取啟動將文件安裝在目錄中,而不是您的主/root目錄中。