使用 AWS OpsWorks 堆疊代理程式 CLI - AWS OpsWorks

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

使用 AWS OpsWorks 堆疊代理程式 CLI

重要

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

注意

代理程式 CLI 只適用於 Linux 執行個體。

在每個線上執行個體上, AWS OpsWorks Stacks 都會安裝代理程式,以便與服務進行通訊。St AWS OpsWorks acks 服務依次傳送命令給代理程式,以便在生命週期事件發生時,執行例如啟動 Chef 在執行個體上執行的工作。在 Linux 執行個體上,代理程式會公開命令列界面 (CLI),這對故障診斷非常有用。若要執行代理程式 CLI 命令,請使用 SSH 連線到執行個體。然後您可以執行代理程式 CLI 命令來執行各種任務,包括下列任務:

如需如何設定與執行個體間 SSH 連線的詳細資訊,請參閱使用 SSH 登入。您也必須具有堆疊的 SSH 和 sudo 許可

本節說明如何使用代理程式 CLI 進行故障診斷。如需詳細資訊和完整命令參考,請參閱 AWS OpsWorks 堆疊代理程式 CLI

執行配方

代理程式 CLI run_command 命令會指示代理程式重新執行其先前執行過的命令。最實用的故障診斷命令為 setupconfiguredeployundeploy,並各自對應到一個生命週期事件。這些命令會指示代理程式起始 Chef 執行,以執行相關聯的配方。

注意

run_command 命令僅限執行與指定命令相關聯的配方群組,通常是與生命週期事件相關聯的配方。您無法用它執行特定配方。若要執行一或多個指定配方,請使用執行配方堆疊命令或同等的 CLI 或 API 動作 (create-deploymentCreateDeployment)。

run_command 命令在為自訂配方除錯方面相當有用,尤其是指派至安裝和設定生命週期事件的配方,這些事件並無法直接從主控台加以觸發。透過使用 run_command,您可以隨時視需要執行特定事件的配方,而無須啟動或停止執行個體。

注意

AWS OpsWorks Stack 會從執行個體的食譜快取執行方法,而非食譜儲存庫。 AWS OpsWorks Stacks 會在執行個體啟動時將食譜下載到此快取中,但是如果您之後修改食譜,則不會自動更新線上執行個體的快取。如果您在啟動執行個體後修改了技術指南,請務必執行更新技術指南堆疊命令堆疊命令,以使用儲存庫中的最新版本更新技術指南快取。

代理程式僅快取最新的命令。您可以執行 list_commands 來列出這些命令,這會傳回已快取命令及其執行時間的清單。

sudo opsworks-agent-cli list_commands 2013-02-26T19:08:26 setup 2013-02-26T19:12:01 configure 2013-02-26T19:12:05 configure 2013-02-26T19:22:12 deploy

若要重新執行最新的命令,請執行:

sudo opsworks-agent-cli run_command

若要重新執行最新執行個體的指定命令,請執行:

sudo opsworks-agent-cli run_command command

例如,若要重新執行安裝配方,您可以執行下列命令:

sudo opsworks-agent-cli run_command setup

每個命令都有一個相關聯的堆疊組態和部署 JSON,代表該命令執行時堆疊和部署的狀態。由於該資料可能隨著命令不同有所差異,因此較舊執行個體的命令可能使用與最新執行個體不同的資料。若要重新執行特定執行個體的命令,請複製 list_commands 輸出中的時間,並執行以下命令:

sudo opsworks-agent-cli run_command time

上述範例均使用預設 JSON 重新執行命令,也就是為該命令安裝的 JSON。您可以對任意 JSON 檔案重新執行命令,如下所示:

sudo opsworks-agent-cli run_command -f /path/to/valid/json.file

顯示 Chef 日誌

代理程式 CLI show_log 命令會顯示指定的日誌。在命令完成後,您將會看到檔案結尾。因此,show_log 命令提供方便查看日誌結尾的方法,您通常會在這裡找到錯誤資訊。您可以向上捲動以查看日誌的先前部分。

若要顯示目前命令的日誌,請執行:

sudo opsworks-agent-cli show_log

您也可以顯示特定命令的日誌,但請注意,代理程式僅快取最後三十個命令的日誌。您可以執行 list_commands 列出執行個體的命令,這會傳回已快取命令及其執行時間的清單。如需範例,請參閱執行配方

若要顯示特定命令最新執行狀況的日誌,請執行下列命令:

sudo opsworks-agent-cli show_log command

命令參數可以設為 setupconfiguredeployundeploystartstoprestart。這些命令大部分都對應到生命週期事件,並指示代理程式執行相關聯配方。

若要顯示特定命令執行狀況的日誌,請複製 list_commands 輸出中的日期並執行:

sudo opsworks-agent-cli show_log date

如果命令仍在執行,show_log 會顯示日誌的目前狀態。

注意

疑難排解錯誤和 out-of-memory問題的其中一種方法是在執行期間追蹤記錄檔,如下所示:show_log

  1. 使用 run_command 來觸發適當的生命週期事件。如需詳細資訊,請參閱 執行配方

  2. 重複執行 show_log 以在寫入日誌時查看日誌的結尾。

如果 Chef 記憶體不足或意外結束,日誌會突然結束。如果配方失敗,日誌的結尾為例外狀況和堆疊追蹤。

顯示堆疊組態與部署 JSON

配方使用的許多資料來自堆疊組態和部署 JSON,這定義了一組 Chef 屬性,以提供堆疊組態、任何部署和使用者可新增之選用自訂屬性的詳細說明。 AWS OpsWorks Stacks 會針對每個命令安裝 JSON,代表命令執行時的堆疊和部署狀態。如需詳細資訊,請參閱 堆疊組態及部署屬性

如果自訂配方從堆疊組態和部署 JSON 取得資料,您可以檢查該 JSON 來驗證資料。顯示堆疊組態和部署 JSON 最簡單的方式,是執行代理程式 CLI get_json 命令,這會顯示 JSON 物件的格式化版本。以下提供某些一般輸出的前幾行:

{ "opsworks": { "layers": { "php-app": { "id": "4a2a56c8-f909-4b39-81f8-556536d20648", "instances": { "php-app2": { "elastic_ip": null, "region": "us-west-2", "booted_at": "2013-02-26T20:41:10+00:00", "ip": "10.112.235.192", "aws_instance_id": "i-34037f06", "availability_zone": "us-west-2a", "instance_type": "c1.medium", "private_dns_name": "ip-10-252-0-203.us-west-2.compute.internal", "private_ip": "10.252.0.203", "created_at": "2013-02-26T20:39:39+00:00", "status": "online", "backends": 8, "public_dns_name": "ec2-10-112-235-192.us-west-2.compute.amazonaws.com" ...

您可以顯示最新的堆疊組態和部署 JSON,如下所示:

sudo opsworks-agent-cli get_json

您可以執行下列命令來顯示指定命令的最新堆疊組態和部署 JSON:

sudo opsworks-agent-cli get_json command

命令參數可以設為 setupconfiguredeployundeploystartstoprestart。這些命令大部分都對應到生命週期事件,並指示代理程式執行相關聯配方。

您可以指定命令的日期,來顯示特定命令執行的堆疊組態和部署 JSON,如下所示:

sudo opsworks-agent-cli get_json date

使用此命令的最簡單方式如下:

  1. 執行 list_commands 會傳回清單,內含已在執行個體上執行的命令,以及每個命令的執行日期。

  2. 複製適當命令的日期,並將其做為 get_json date 引數使用。