範例 7:執行命令和指令碼 - AWS OpsWorks

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

範例 7:執行命令和指令碼

重要

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

Chef 資源可以處理執行個體上的各式任務,但有時使用 shell 命令或指令碼會更好。例如,您可能已有用以達成特定任務的指令碼,而且繼續使用它們比實作新程式碼更容易。本節示範如何在執行個體上執行命令或指令碼。

執行命令

script 資源執行一或多個命令。它支援 csh、bash、Perl、Python 和 Ruby 命令解譯器,因此只要安裝適當的轉譯器,就可以用於 Linux 或 Windows 系統。本主題示範如何在 Linux 執行個體上執行簡單的 bash 命令。Chef 也支援 powershell_scriptbatch 資源在 Windows 上執行指令碼。如需詳細資訊,請參閱運行一個視窗 PowerShell腳本

開始使用
  1. opsworks_cookbooks 目錄中建立名為 script 的目錄,導覽至它。

  2. metadata.rb 檔案新增至具有以下內容的 script

    name "script" version "0.1.0"
  3. 初始化及設定 Test Kitchen (如範例 1:安裝套件中所述),並從 platforms 清單中移除 CentOS。

  4. script 中建立名為 recipes 的目錄。

您可以使用 script 資源本身執行命令,但 Chef 也支援資源的一組命令解譯器特定版本,以解譯器為名。下列配方使用 bash 資源執行簡單的 bash 指令碼。

bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end

bash 資源設定如下。

  • 它使用預設動作 run,在 code 區塊中執行命令。

    此範例有一個命令 touch somefile,但 code 區塊可以包含多個命令。

  • user 屬性指定執行命令的使用者。

  • cwd 屬性指定工作目錄。

    在此範例中,touch 會在 /tmp 目錄中建立檔案。

  • 如果檔案已存在,not_if 保護屬性指示資源不採取任何動作。

執行配方
  1. 建立包含前述範例程式碼的 default.rb 檔案,並將它儲存至 recipes

  2. 執行 kitchen converge,然後登入執行個體,驗證檔案是否位於 /tmp

執行指令碼

script 資源很方便,尤其是當您只需要執行一或兩個命令時,但通常將指令碼存放在檔案中並執行該檔案會更好。execute 資源在 Linux 或 Windows 上執行指定的可執行檔,包括指令碼檔案。本主題修改前述範例中的 script 技術指南,使用 execute 執行簡單的 shell 指令碼。您可以輕鬆將此範例擴展為較複雜的指令碼,或其他類型的可執行檔。

設定指令碼檔案
  1. files 子目錄新增至 scriptdefault 子目錄新增至 files

  2. 建立包含下列內容且名為 touchfile 的檔案,將它新增至 files/default。本範例中使用常見的 Bash 解譯器程式碼,但如有需要可取代為您 shell 環境中使用的解譯器。

    #!/usr/bin/env bash touch somefile

    指令碼檔案可以包含任意數目的命令。為了方便起見,此範例指令碼只有單一 touch 命令。

下列配方執行指令碼。

cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end

cookbook_file 資源將指令碼檔案複製到 /tmp,並設定模式讓檔案變成可執行檔。然後 execute 資源執行此檔案,如下所示:

  • user 屬性指定命令的使用者 (本範例中為 root)。

  • cwd 屬性指定工作目錄 (本範例中為 /tmp)。

  • command 屬性指定要執行的指令碼 (本範例中為 touchfile),位於工作目錄。

執行配方
  1. 以前述範例取代 recipes/default.rb 中的程式碼。

  2. 執行 kitchen converge,然後登入執行個體以驗證 /tmp 現在包含模式設定為 0755 的指令碼檔案以及 somefile

完成後,請執行 kitchen destroy 關機執行個體。下一節使用新的技術指南。