

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

# 使用 OpsWorks Stacks 代理程式 CLI
<a name="troubleshoot-debug-cli"></a>

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

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

在每個線上執行個體上， OpsWorks Stacks 都會安裝 代理程式，該代理程式會與服務通訊。Stacks OpsWorks 服務會依序傳送命令給代理程式，以執行任務，例如在生命週期事件發生時啟動執行個體上的 Chef 執行。在 Linux 執行個體上，代理程式會公開命令列界面 (CLI)，這對故障診斷非常有用。若要執行代理程式 CLI 命令，請使用 [SSH 連線到執行個體](workinginstances-ssh.md)。然後您可以執行代理程式 CLI 命令來執行各種任務，包括下列任務：
+ 執行配方。
+ 顯示 Chef 日誌。
+ 顯示[堆疊組態與部署 JSON](workingcookbook-json.md)。

如需如何設定與執行個體間 SSH 連線的詳細資訊，請參閱[使用 SSH 登入](workinginstances-ssh.md)。您也必須具有堆疊的 [SSH 和 sudo 許可](opsworks-security-users.md)。

本節說明如何使用代理程式 CLI 進行故障診斷。如需詳細資訊和完整命令參考，請參閱 [OpsWorks Stacks 代理程式 CLI](agent.md)。

**Topics**
+ [執行配方](#troubleshoot-debug-cli-recipes)
+ [顯示 Chef 日誌](#troubleshoot-debug-cli-log)
+ [顯示堆疊組態與部署 JSON](#troubleshoot-debug-cli-json)

## 執行配方
<a name="troubleshoot-debug-cli-recipes"></a>

代理程式 CLI [`run_command`](agent-run.md) 命令會指示代理程式重新執行其先前執行過的命令。最實用的故障診斷命令為 `setup`、`configure`、`deploy` 和 `undeploy`，並各自對應到一個生命週期事件。這些命令會指示代理程式起始 Chef 執行，以執行相關聯的配方。

**注意**  
`run_command` 命令僅限執行與指定命令相關聯的配方群組，通常是與生命週期事件相關聯的配方。您無法用它執行特定配方。若要執行一或多個指定配方，請使用[執行配方堆疊命令](workingstacks-commands.md)或同等的 CLI 或 API 動作 ([https://docs.aws.amazon.com/cli/latest/reference/opsworks/create-deployment.html](https://docs.aws.amazon.com/cli/latest/reference/opsworks/create-deployment.html) 和 [https://docs.aws.amazon.com/opsworks/latest/APIReference/API_CreateDeployment.html](https://docs.aws.amazon.com/opsworks/latest/APIReference/API_CreateDeployment.html))。

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

**注意**  
OpsWorks Stacks 會從執行個體的技術指南快取執行配方，而非技術指南儲存庫。當執行個體啟動時， OpsWorks Stacks 會將技術指南下載至此快取，但如果您後續修改技術指南，則不會自動更新線上執行個體上的快取。如果您在啟動執行個體後修改了技術指南，請務必執行[更新技術指南堆疊命令](workingstacks-commands.md)堆疊命令，以使用儲存庫中的最新版本更新技術指南快取。

代理程式僅快取最新的命令。您可以執行 [`list_commands`](agent-list.md) 來列出這些命令，這會傳回已快取命令及其執行時間的清單。

```
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](workingcookbook-json.md)，代表該命令執行時堆疊和部署的狀態。由於該資料可能隨著命令不同有所差異，因此較舊執行個體的命令可能使用與最新執行個體不同的資料。若要重新執行特定執行個體的命令，請複製 `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 日誌
<a name="troubleshoot-debug-cli-log"></a>

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

若要顯示目前命令的日誌，請執行：

```
sudo opsworks-agent-cli show_log
```

您也可以顯示特定命令的日誌，但請注意，代理程式僅快取最後三十個命令的日誌。您可以執行 [`list_commands`](agent-list.md) 列出執行個體的命令，這會傳回已快取命令及其執行時間的清單。如需範例，請參閱 [執行配方](#troubleshoot-debug-cli-recipes)。

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

```
sudo opsworks-agent-cli show_log command
```

命令參數可以設為 `setup`、`configure`、`deploy`、`undeploy`、`start`、`stop` 或 `restart`。這些命令大部分都對應到生命週期事件，並指示代理程式執行相關聯配方。

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

```
sudo opsworks-agent-cli show_log date
```

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

**注意**  
使用 `show_log` 來為錯誤和記憶體不足問題進行故障診斷的其中一種方法，是在執行期間顯示日誌的結尾，如下所示：  
使用 `run_command` 來觸發適當的生命週期事件。如需詳細資訊，請參閱[執行配方](#troubleshoot-debug-cli-recipes)。
重複執行 `show_log` 以在寫入日誌時查看日誌的結尾。
如果 Chef 記憶體不足或意外結束，日誌會突然結束。如果配方失敗，日誌的結尾為例外狀況和堆疊追蹤。

## 顯示堆疊組態與部署 JSON
<a name="troubleshoot-debug-cli-json"></a>

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

如果自訂配方從堆疊組態和部署 JSON 取得資料，您可以檢查該 JSON 來驗證資料。顯示堆疊組態和部署 JSON 最簡單的方式，是執行代理程式 CLI [`get_json`](agent-json.md) 命令，這會顯示 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
```

命令參數可以設為 `setup`、`configure`、`deploy`、`undeploy`、`start`、`stop` 或 `restart`。這些命令大部分都對應到生命週期事件，並指示代理程式執行相關聯配方。

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

```
sudo opsworks-agent-cli get_json date
```

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

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

1. 複製適當命令的日期，並將其做為 `get_json` *date* 引數使用。