

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

# 範例 1：安裝套件
<a name="cookbooks-101-basics-packages"></a>

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

套件安裝是較常用的配方之一，相當簡單，視套件而定。例如，下列配方將 Git 安裝在 Linux 系統中。

```
package 'git' do
  action :install
end
```

[`package` 資源](https://docs.chef.io/chef/resources.html#package)處理套件安裝。在本範例中，您不需要指定任何屬性。資源名稱是 `package_name` 屬性的預設值，它可以識別套件。`install` 動作指示提供者安裝套件。略過 `install` 可讓程式碼變得更簡單，它是 `package` 資源的預設動作。當您執行配方時，Chef 會使用適當的提供者安裝套件。在本範例要使用的 Ubuntu 系統中，提供者透過呼叫 `apt-get` 來安裝 Git。

**注意**  
在 Windows 系統上安裝軟體需要的程序略有不同。如需詳細資訊，請參閱[安裝 Windows 軟體](cookbooks-101-opsworks-install-software.md)。

若要使用 Test Kitchen 在 Vagrant 中執行此配方，您必須先設定技術指南，然後初始化及設定 Test Kitchen。下列內容適用於 Linux 系統，但 Windows 和 Macintosh 系統所用的程序基本類似。一開始先開啟終端機視窗，本章的所有範例都使用命令列工具。

**準備技術指南**

1. 在您的主目錄中建立名為 `opsworks_cookbooks` 的子目錄，它會包含本章所有的技術指南。然後，為此技術指南建立名為 `installpkg` 的子目錄中，導覽至它。

1. 在 `installpkg` 中建立名為 `metadata.rb` 的檔案，包含下列程式碼。

   ```
   name "installpkg"
   version "0.1.0"
   ```

   為求簡化，本章的範例只指定技術指南名稱和版本，但 `metadata.rb` 可以包含各種技術指南中繼資料。如需詳細資訊，請參閱 [About Cookbook Metadata](http://docs.chef.io/cookbook_repo.html#about-cookbook-metadata)。
**注意**  
初始化 Test Kitchen 之前請務必先建立 `metadata.rb`，它會使用資料建立預設的組態檔案。

1. 在 `installpkg` 中執行 `kitchen init`，這會初始化 Test Kitchen 並安裝預設的 Vagrant 驅動程式。

1. `kitchen init` 命令會在 `installpkg` 中建立名為 `.kitchen.yml` 的 YAML 組態檔案。在您偏好的文字編輯器中開啟 檔案。`.kitchen.yml` 檔案包含 `platforms` 區段，指定執行配方的系統。Test Kitchen 會在每個平台上建立執行個體並執行指定的配方。
**注意**  
Test Kitchen 預設一次只在一個平台上執行配方。如果您在建立執行個體的任何命令中新增 `-p` 參數，Test Kitchen 就會以平行方式在每個平台上執行配方。

   針對本範例，單一平台即已足夠，所以請編輯 `.kitchen.yml` 以移除 `centos-6.4` 平台。您的 `.kitchen.yml` 檔案現在看起來應如下：

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: default
       run_list:
         - recipe[installpkg::default]
       attributes:
   ```

   Test Kitchen 只執行 `.kitchen.yml` 執行清單中的配方。您使用 `[cookbook_name::recipe_name]` 格式識別配方，其中 *recipe\$1name* 省略 `.rb` 副檔名。`.kitchen.yml` 執行清單一開始會包含技術指南的預設配方 `installpkg::default`。這是您要實作的配方，因此您不需要修改執行清單。

1. 建立 `installpkg` 的子目錄，名為 `recipes`。

   如果技術指南包含配方，大多數情況下，它們必須位於 `recipes`子目錄中。

您現在可以將配方新增到技術指南，使用 Test Kitchen 在執行個體上執行它。

**執行配方**

1. 建立包含區段開頭處之 Git 安裝範例程式碼名為 `default.rb` 的檔案，並將它儲存到 `recipes` 子目錄中。

1. 在 `installpkg` 目錄中執行 `kitchen converge`。此命令會在 Vagrant 中啟動新的 Ubuntu 執行個體、將技術指南複製到執行個體，並啟動 Chef 執行以執行`.kitchen.yml`執行清單中的配方。

1. 若要驗證配方是否成功，請執行 `kitchen login` 開啟執行個體的 SSH 連線。然後，`git --version` 驗證是否已成功安裝 Git。若要返回您的工作站，請執行 `exit`。

1. 完成後，請執行 `kitchen destroy` 關機執行個體。下一個範例會使用不同的技術指南。

此範例是非常好的入門方法，但它非常簡單。其他套件的安裝比較複雜，您可能需要執行下列任一或所有作業：
+ 建立並設定使用者。
+ 建立一或多個資料、日誌等等的目錄。
+ 安裝一或多個組態檔案。
+ 為不同的作業系統指定不同的套件名稱或屬性值。
+ 啟動服務，然後視需要再重新啟動它。

下列範例說明如何解決這些問題，以及其他一些有用的操作。