步驟 2.3:實作自訂技術指南 - AWS OpsWorks

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

步驟 2.3:實作自訂技術指南

重要

AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問,請透過 AWS re:Post 或透過 AWS Premium Support 聯絡 AWS 支援 團隊。

儘管堆疊基本上是執行個體的容器,但您無法直接將執行個體新增到堆疊。您將會新增一或多個 layer,每一個代表相關執行個體的群組,然後將執行個體新增至這些 layer。

layer 基本上是 Stacks AWS OpsWorks 用來建立一組具有相同組態的 Amazon EC2 執行個體的藍圖。執行個體從基礎版本的作業系統開始,且執行個體的 layer 會在執行個體上執行各種任務來實作該藍圖,這些任務可能包括:

  • 建立目錄和檔案

  • 管理使用者

  • 安裝並設定軟體

  • 啟動或停止伺服器

  • 部署應用程式程式碼以及相關檔案。

layer 透過執行 Chef 配方在執行個體上執行任務,簡稱為 配方。配方是使用 Chef 網域專用語言 (DSL) 來描述執行個體最終狀態的 Ruby 應用程式。透過 AWS OpsWorks Stacks,每個配方通常會指派給 layer 的生命週期事件之一:設定、組態、部署、取消部署和關機。當執行個體上發生生命週期事件時, AWS OpsWorks Stacks 會執行事件的配方來執行適當的任務。例如,安裝事件會在執行個體完成開機後發生。 AWS OpsWorks 堆疊接著會執行安裝配方,通常會執行安裝和設定伺服器軟體以及啟動相關服務等任務。

AWS OpsWorks Stacks 為每個 layer 提供一組執行標準任務的內建配方。您可以實作自訂配方來執行額外任務,並將其指派到 layer 的生命週期事件,以擴展 layer 的功能。Windows 堆疊支援自訂 layer,這些 layer 具有一組僅執行幾項基本任務的最少量配方。若要將功能新增至您的 Windows 執行個體,您必須實作自訂配方來安裝軟體、部署應用程式等等。本主題說明如何建立簡單的自訂 layer 來支援 IIS 執行個體。

技術指南和配方的快速簡介

配方定義執行個體預期狀態的一或多個 layer 面:應包含哪些目錄、應安裝哪些軟體套件、應部署哪些應用程式等等。配方封裝在「技術指南」中,而技術指南可以包含一或多個相關配方,再加上相關檔案 (例如建立組態檔案的範本)。

本主題為配方做了基本的介紹,足以為您示範如何實作技術指南以支援簡單的自訂 IIS layer。如需技術指南一般簡介的詳細資訊,請參閱 技術指南和配方。如需詳細的實作技術指南教學介紹,包括某些 Windows 特定主題,請參閱技術指南 101

技術上而言,Chef 配方是 Ruby 應用程式,但大部分 (如非全部) 程式碼位於 Chef DSL 中。DSL 主要由一組「資源」組成,可用於宣告性指定執行個體狀態的某一 layer 面。例如,directory 資源會定義要新增至系統的目錄。下列範例定義一個具有完整控制權的 C:\data 目錄,此目錄屬於指定使用者,且不會從父目錄繼承權限。

directory 'C:\data' do rights :full_control, 'WORKGROUP\username' inherits false action :create end

當 Chef 執行配方時,會透過將資料傳遞給相關聯的「提供者」(這是處理修改執行個體狀態詳細資訊的 Ruby 物件) 來執行每項資源。在此範例中,供應者會使用指定組態來建立新目錄。

自訂 IIS layer 的自訂技術指南必須執行下列任務:

  • 安裝 IIS 功能,並開始服務。

    您通常會在完成啟動執行個體後的安裝期間執行此任務。

  • 將應用程式部署到執行個體 (此範例中為一個簡單的 HTML 頁面)。

    您通常會在設定期間執行此任務。不過,應用程式通常需要定期更新,所以您也需要在執行個體處於上線狀態時部署更新。

您可以使用單一配方來執行所有這些任務。但是,首選方法是將單獨的配方用於設定和部署任務。這樣一來,您無需執行設定程式碼,也可隨時部署應用程式更新。下列說明如何設定技術指南來支援自訂 IIS layer。後續主題將說明如何實作配方。

開始使用
  1. 在您的工作站中方便的位置上,建立名為 iis-cookbook 的目錄。

  2. 將具有下列內容的 metadata.rb 檔案新增至 iis-cookbook

    name "iis-cookbook" version "0.1.0"

    此範例使用最少量的 metadata.rb。如需如何使用此檔案的詳細資訊,請參閱 metadata.rb

  3. recipes 目錄新增至 iis-cookbook

    此目錄 (必須命名為 recipes) 包含技術指南的配方。

一般而言,技術指南可以包含各種其他目錄。例如,如果配方使用範本來建立組態檔案,範本通常會位於 templates\default 目錄中。此範例的技術指南完全由配方所組成,所以不需要其他目錄。此外,此範例僅使用單一技術指南,但您可以使用所需數量的技術指南;針對複雜的專案,通常使用多個技術指南會更適當。例如,針對設定和部署任務,您可以使用個別的技術指南。如需更多技術指南範例,請參閱 技術指南和配方

實作配方來安裝和啟動 IIS

IIS 是一項 Windows「功能」,是可安裝在 Windows Server 上的選用系統元件之一。您可以讓配方透過下列其中一種方法來安裝 IIS:

注意

powershell_script 位於 Windows 配方的最有用資源之間。您可使用其透過執行適當的 PowerShell 指令碼或 cmdlet 在執行個體上執行各種任務。尤其適用於不受 Chef 資源支援的任務。

此範例使用 PowerShell 指令碼來安裝和啟動 Web Server (IIS)。下文將介紹 windows 技術指南。如需如何使用 windows_feature 來安裝 IIS 的範例,請參閱 安裝 Windows 功能:IIS

將下列內容和名為 install.rb 的配方新增至技術指南的 recipes 目錄。

powershell_script 'Install IIS' do code 'Install-WindowsFeature Web-Server' not_if "(Get-WindowsFeature -Name Web-Server).Installed" end service 'w3svc' do action [:start, :enable] end

此配方包含兩種資源。

powershell_script

powershell_script 執行指定的 PowerShell 指令碼或 cmdlet。此範例具有下列屬性設定:

  • code – 要執行的 PowerShell cmdlet。

    此範例執行 Install-WindowsFeature cmdlet,這會安裝 Web 伺服器 (IIS)。一般而言,code 屬性可以具有任意數目的行,因此您可以執行所需數量的 cmdlet。

  • not-if防護屬性,可確保配方只有在尚未安裝時才安裝 IIS。

    您通常會希望配方是「等冪」,因此配方不會浪費時間重複執行相同的任務。

每個資源都有一個動作,指定提供者要採取的動作。在此範例中沒有明確的動作,因此供應者會採取預設 :run 動作,該動作會執行指定 PowerShell 指令碼。如需詳細資訊,請參閱執行 Windows PowerShell 指令碼

服務

一個 service 管理一項服務,在此範例中為 Web Server IIS 服務 (W3SVC)。此範例使用預設屬性並指定 :start:enable 這兩個動作來啟動和啟用 IIS。

注意

如果您希望安裝使用套件安裝程式的軟體 (例如 MSI),您可以使用 windows_package 資源。如需詳細資訊,請參閱安裝套件

啟用自訂技術指南

AWS OpsWorks Stacks 會在每個執行個體上從本機快取執行配方。若要執行您的自訂配方,您必須執行下列作業:

  • 將技術指南存放在遠端儲存庫中。

    AWS OpsWorks Stacks 會將技術指南從此儲存庫下載到每個執行個體的本機快取。

  • 編輯堆疊以啟用自訂技術指南。

    自訂技術指南預設為停用,所以您必須為堆疊啟用自訂技術指南,並提供儲存庫的 URL 和相關資訊。

AWS OpsWorks Stacks 支援自訂技術指南的 S3 封存和 Git 儲存庫;此範例使用 S3 封存。如需詳細資訊,請參閱技術指南儲存庫

使用 S3 封存
  1. 建立 iis-cookbook 目錄的 .zip 存檔。

    AWS OpsWorks Stacks 也支援 Windows 堆疊的 .tgz(gzip 壓縮 tar) 封存。

  2. 將封存上傳至美國西部 (加利佛尼亞北部) 區域的 S3 儲存貯體,並將檔案設為公有。您也可以使用私有 S3 封存,但在這個範例中公有封存已足夠,且使用起來更簡單。

    1. 登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/s3/ 開啟 Amazon S3 主控台。

    2. 如果您在 中還沒有儲存貯體us-west-1,請選擇建立儲存貯體,並在美國西部 (加利佛尼亞北部) 區域中建立儲存貯體。

    3. 在儲存貯體清單中,選擇您要上傳檔案的儲存貯體名稱,然後選擇 Upload (上傳)

    4. 選擇 Add Files (新增檔案)

    5. 選取要上傳的存檔,然後選擇 Open (開啟)

    6. Upload - Select Files and Folders (上傳 - 選取檔案與資料夾) 對話方塊的底部,選擇 Set Details (設定詳細資訊)

    7. Set Details (設定詳細資訊) 對話方塊中,選擇 Set Permissions (設定許可)

    8. Set Permissions (設定許可) 對話方塊中,選擇 Make everything public (公開所有項目)

    9. Set Permissions (設定許可) 對話方塊中,選擇 Start Upload (開始上傳)。上傳完成時,iis-cookbook.zip 檔案會出現在您的儲存貯體中。

    10. 選擇儲存貯體,然後選擇儲存貯體的 Properties (屬性) 標籤。在 Link (連結) 旁,記錄封存檔案的 URL 以供日後使用。

    如需將檔案上傳至 Amazon S3 儲存貯體的詳細資訊,請參閱《Amazon S3 主控台使用者指南》中的如何將檔案和資料夾上傳至 S3 儲存貯體?Amazon S3

重要

到目前為止,本演練只需您稍微花一點時間; AWS OpsWorks Stacks 服務本身是免費的。不過,您必須支付您使用的任何 AWS 資源,例如 Amazon S3 儲存體。一旦您上傳封存,即會開始產生費用。如需詳細資訊,請參閱 AWS 定價

為堆疊啟用自訂技術指南。
  1. 在 AWS OpsWorks Stacks 主控台中,選擇導覽窗格中的堆疊,然後選擇右上角的堆疊設定

  2. Settings (設定) 頁面的右上角,選擇 Edit (編輯)

  3. Settings (設定) 頁面上,將 Use custom Chef cookbooks (使用自訂 Chef 技術指南) 設定為 Yes (是) 然後輸入下列資訊:

    • 儲存庫類型 – S3 Archive

    • 儲存庫 URL – 您先前記錄之技術指南封存檔案的 S3 URL。

  4. 選擇 Save (儲存) 來更新堆疊組態。

AWS OpsWorks Stacks 會在所有新的執行個體上安裝您的自訂技術指南。請注意, AWS OpsWorks Stacks 不會自動在線上執行個體上安裝或更新自訂技術指南。您可以手動執行此作業,如下所述。