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

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

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

重要

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

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

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

  • 建立目錄和檔案

  • 管理使用者

  • 安裝並設定軟體

  • 啟動或停止伺服器

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

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

AWS OpsWorks Stacks 為每個圖層提供了一組執行標準任務的內置配方。您可以實作自訂配方來執行額外任務,並將其指派到 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 碼或指令程式,在執行個體上執行各種工作。尤其適用於不受 Chef 資源支援的任務。

此範例會執行 PowerShell 指令碼來安裝並啟動網頁伺服器 (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令碼或指令程式。此範例具有下列屬性設定:

  • code— 要執行的 PowerShell 指令程式。

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

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

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

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

服務

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

注意

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

啟用自訂技術指南

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

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

    AWS OpsWorks Stacks 會從這個儲存庫下載食譜到每個執行個體的本機快取。

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

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

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

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

    AWS OpsWorks 堆棧還支持.tgz(gzip 壓縮焦油)歸檔的 Windows 堆棧。

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

    1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/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 儲存貯體的詳細資訊,請參閱如何將檔案和資料夾上傳到 S3 儲存貯體?Amazon S3 控制台用戶指南中。

重要

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

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

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

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

    • 存放庫類型 — S3 存檔

    • 儲存庫 URL — 您之前錄製的食譜封存檔案的 S3 URL。

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

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