

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

# 在 Linux 堆疊上使用搜尋
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-linux"></a>

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

此範例根據具有單一 PHP 應用程式伺服器的 Linux 堆疊。它使用 Chef 搜尋取得伺服器的公有 IP 地址，並將地址放入 `/tmp` 目錄的檔案中。它基本上會從節點物件擷取相同的資訊 (如[直接取得屬性值](cookbooks-101-opsworks-opsworks-stack-config-node.md)所述)，但程式碼更為簡單，而且不是取決於堆疊組態和部署屬性結構的詳細資訊。

以下簡短地彙總如何針對此範例建立堆疊。如需詳細資訊，請參閱[建立新的堆疊](workingstacks-creating.md)。

**注意**  
如果您之前沒有在 OpsWorks Stacks 執行個體上執行自訂配方，您應該先瀏覽[在 Linux 執行個體上執行配方](cookbooks-101-opsworks-opsworks-instance.md)範例。

**建立堆疊**

1. 開啟 [OpsWorks Stacks 主控台](https://console.aws.amazon.com/opsworks/)，然後按一下 **Add Stack (新增堆疊)**。

1. 指定下列設定，並接受其他設定的預設值，然後按一下 **Add Stack (新增堆疊)**。
   + **名稱** – SearchJSON
   + **預設 SSH 金鑰** – Amazon EC2 金鑰對

   如果您需要建立 Amazon EC2 金鑰對，請參閱 [Amazon EC2 金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。請注意，金鑰對必須屬於與執行個體相同的 AWS 區域。此範例使用美國西部 （奧勒岡） 區域。

1. 按一下**新增圖層**，並使用預設設定將 [PHP App Server 圖層新增至](workinglayers-custom.md)堆疊。

1. [新增全年無休執行個體](workinginstances-add.md) (具有預設設定) 至 layer，以及[啟動它](workinginstances-starting.md)。

**設定技術指南**

1. 在 `opsworks_cookbooks` 內建立並導覽至名為 `searchjson` 的目錄。

1. 使用下列內容建立 `metadata.rb` 檔案，並將它儲存至 `opstest`。

   ```
   name "searchjson"
   version "0.1.0"
   ```

1. 在 `recipes` 內建立 `searchjson` 目錄。

1. 使用下列配方建立 `default.rb` 檔案，並將它儲存至 `recipes` 目錄。

   ```
   phpserver = search(:node, "layers:php-app").first
   Chef::Log.info("**********The public IP address is: '#{phpserver[:ip]}'**********")
   
   file "/tmp/ip_addresses" do
     content "#{phpserver[:ip]}"
     mode 0644
     action :create
   end
   ```

   Linux 堆疊僅支援 `node` 搜尋索引。配方會使用此索引來取得 `php-app` layer 中的執行個體清單。因為 layer 已知只有一個執行個體，所以配方只需要將第一個執行個體指派給 `phpserver`。如果 layer 具有多個執行個體，您可以列舉它們以擷取所需資訊。每個清單項目都是一個雜湊表，其中包含一組執行個體屬性。`ip` 屬性設定為執行個體的公有 IP 地址，因此您可以將後續配方程式碼中的該地址呈現為 `phpserver[:ip]`。

   將訊息新增至 Chef 日誌之後，配方接著會使用 [https://docs.chef.io/chef/resources.html#file](https://docs.chef.io/chef/resources.html#file) 資源來建立名為 `ip_addresses` 的檔案。`content` 屬性設定為以字串呈現 `phpserver[:ip]`。Chef 建立 `ip_addresses` 時，會將該字串新增至檔案。

1. 建立 的`.zip`封存`opsworks_cookbooks`、[上傳封存至 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html)、[將封存設為公](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)有，並記錄封存的 URL。如需技術指南儲存庫的詳細資訊，請參閱[技術指南儲存庫](workingcookbook-installingcustom-repo.md)。

   傳遞至 Amazon S3 儲存貯體的內容可能包含客戶內容。如需移除敏感資料的詳細資訊，請參閱[如何清空 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)或[如何刪除 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。

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

**執行配方**

1. [編輯堆疊以啟用自訂技術指南](workingcookbook-installingcustom-enable.md)，然後指定下列設定。
   + **儲存庫類型** – **Http Archive**
   + **儲存庫 URL** – 您先前記錄的技術指南封存 URL

   針對其他設定使用預設值，然後按一下 **Save (儲存)** 以更新堆疊組態。

1. 編輯自訂 layer 組態，並[指派給 `searchjson::default`](workingcookbook-assigningcustom.md) layer 的安裝事件。 OpsWorks 堆疊會在執行個體開機後或您明確觸發安裝事件時執行配方。

1. [執行更新自訂技術指南堆疊命令](workingstacks-commands.md)，以在堆疊執行個體上安裝最新版的自訂技術指南儲存庫。如果存在舊版的儲存庫，則此命令會予以覆寫。

1. 執行 **Setup (安裝)** 堆疊命令來執行配方，這會在執行個體上觸發安裝事件，並執行 `searchjson::default`。保留 **Running command setup page (執行命令安裝頁面)** 的開啟狀態。

成功執行配方之後，您就可以驗證配方。

**驗證 searchjson**

1. 第一步是檢查 [Chef 日誌](troubleshoot-debug-log.md)中的最新安裝事件。在**執行命令設定頁面上**，按一下 php-app1 執行個體**日誌**欄中**的**顯示以顯示日誌。向下捲動以在接近中間的位置找到您的日誌訊息，這看起來與下列類似。

   ```
   ...
   [2014-09-05T17:08:41+00:00] WARN: Previous bash[logdir_existence_and_restart_apache2]: ...
   [2014-09-05T17:08:41+00:00] WARN: Current  bash[logdir_existence_and_restart_apache2]: ...
   [2014-09-05T17:08:41+00:00] INFO: **********The public IP address is: '192.0.2.0'**********
   [2014-09-05T17:08:41+00:00] INFO: Processing directory[/etc/sysctl.d] action create (opsworks_initial_setup::sysctl line 1)
   ...
   ```

1. [使用 SSH 登入執行個體](workinginstances-ssh.md)，並列出 `/tmp` 的內容，其中應該包括名為 `ip_addresses` 且包含 IP 地址的檔案。