

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

# Amazon ECS 受管協助程式
<a name="managed-daemons"></a>

Amazon ECS Managed Daemons 可讓您在 Amazon ECS 受管執行個體上的容器基礎設施中部署和管理軟體代理程式，例如安全性、可觀測性和聯網代理程式。Managed Daemons 會將協助程式生命週期管理與應用程式操作分離。您可以獨立部署、更新和監控代理程式，而無需重新部署工作負載或協調跨服務的變更。

## Managed Daemons 的運作方式
<a name="managed-daemons-how-it-works"></a>

若要使用受管協助程式，請先註冊協助程式任務定義。協助程式任務定義是描述形成協助程式之容器的範本。註冊協助程式任務定義後，請建立協助程式，並將其與叢集和一或多個 Amazon ECS 受管執行個體容量提供者建立關聯。然後，Amazon ECS 可確保在透過這些容量提供者佈建的每個 Amazon EC2 執行個體上執行一個協助程式任務。

協助程式不會獨立啟動執行個體。當您在 Amazon ECS 受管執行個體容量提供者上執行應用程式任務時，Amazon ECS 會佈建 Amazon EC2 執行個體、先啟動協助程式任務，然後才將應用程式任務轉換為 `RUNNING`。此排序可確保記錄、追蹤和指標集合等跨切割函數在應用程式開始處理請求之前可正常運作。

協助程式對於執行個體運作狀態至關重要。如果協助程式任務停止，Amazon ECS 會自動耗盡並取代該容器執行個體。這種自動修復行為可確保在所有執行個體中可靠的協助程式涵蓋範圍，無需手動介入。

當您將協助程式更新為新的任務定義修訂版時，Amazon ECS 會在關聯容量提供者中的所有執行個體之間執行滾動部署。在部署期間，Amazon ECS 會同時耗盡可設定的執行個體百分比、使用更新的常駐程式佈建取代執行個體，以及自動取代 Amazon ECS 服務任務。Amazon ECS 提供內建斷路器保護。您可以設定製作時間和 CloudWatch 警示，讓 Amazon ECS 在更新所有執行個體後監控部署，並在發生問題時自動轉返。

## 主要優點
<a name="managed-daemons-benefits"></a>
+ **解耦生命週期管理** - 獨立於應用程式部署更新協助程式。
+ **保證涵蓋**範圍 - Amazon ECS 可確保協助程式任務在每個執行個體上的應用程式任務之前啟動，因此交叉修剪函數一律可用。
+ **可靠的版本更新** - 當您更新協助程式版本時，Amazon ECS 會將其推展到關聯容量提供者中的所有執行個體，並內建斷路器保護和自動轉返，以確保每個執行個體執行目標修訂。
+ **改善資源使用率** - 每個執行個體執行單一協助程式任務可消除sidecar-per-task模型，減少叢集的資源負荷。
+ **自動執行個體修復** - 如果協助程式任務停止或運作狀態不佳，Amazon ECS 會自動耗盡並取代該容器執行個體。這可維持可靠的協助程式涵蓋範圍，無需手動介入。

**注意**  
Amazon ECS 為 Amazon EC2 啟動類型的 Amazon EC2 服務提供 DAEMON 排程策略。Managed Daemons 是為 Amazon ECS 受管執行個體建置的新功能，可簡化協助程式部署並提供更強大的協助程式涵蓋範圍保證。

## 開始使用
<a name="managed-daemons-getting-started"></a>

若要開始使用，請註冊指定容器映像的協助程式任務定義，然後在叢集中建立具有相關聯容量提供者的協助程式。您可以使用 AWS 管理主控台、 AWS CLI CloudFormation、 或 AWS SDKs。如需逐步說明，請參閱 [建立和管理協助程式](managed-daemons-create-manage.md)。

# 常駐程式任務定義
<a name="managed-daemons-task-definitions"></a>

協助程式任務定義是協助程式的藍圖。Amazon ECS 受管協助程式使用專用協助程式任務定義資源，與標準 Amazon ECS 任務定義不同。您可以註冊協助程式任務定義，以指定協助程式的容器映像、資源需求和組態。

## 建立協助程式任務定義
<a name="managed-daemons-create-taskdef"></a>

您可以使用 AWS 管理主控台 或 建立協助程式任務定義 AWS CLI。

### 使用 AWS 管理主控台
<a name="managed-daemons-create-taskdef-console"></a>

1. 開啟 Amazon ECS 主控台。在左側導覽中，選擇**協助程式任務定義**。

1. 選擇**建立新的協助程式任務定義**。

1. 針對**協助程式任務定義系列**，輸入唯一的名稱。名稱最多可包含 255 個英數字元、連字號和底線。

1. （選用） 針對**任務角色**，選擇將許可授予容器中執行之應用程式的 IAM 角色。如果您的容器未呼叫 AWS APIs請將此保留空白。

1. （選用） 針對**任務執行角色**，選取 `ecsTaskExecutionRole`。Amazon ECS 需要此角色才能提取容器映像並發佈日誌。

1. （選用） 針對**任務大小**，指定要預留給協助程式的 CPU 和記憶體。例如， `0.25 vCPU`和 `512 MB` 記憶體。

1. 設定您的容器詳細資訊：
   + **容器名稱** - 輸入容器的名稱。名稱最多可包含 255 個英數字元、連字號和底線。
   + **必要容器** - 選取**是**。每個協助程式任務定義至少需要一個基本容器。如果基本容器失敗，Amazon ECS 會停止整個任務。
   + **映像 URI** - 輸入 Docker 映像 URI。您可以瀏覽 Amazon ECR 映像，或使用來自 Docker Hub 或其他登錄檔的公有映像。

1. （選用） 視需要設定資源配置、運作狀態檢查、環境變數、日誌收集和標籤。

1. 檢閱您的組態，然後選擇**建立**。

### 使用 AWS CLI
<a name="managed-daemons-create-taskdef-cli"></a>

建立 JSON 檔案並使用 `register-daemon-task-definition`命令註冊協助程式任務定義。

以下是範例 JSON 檔案：

```
{
    "family": "my-daemon-task",
    "containerDefinitions": [
        {
            "name": "daemon-container",
            "image": "public.ecr.aws/docker/library/busybox:latest",
            "essential": true,
            "command": ["sh", "-c", "while true; do echo 'Daemon running'; sleep 30; done"],
            "memoryReservation": 512
        }
    ]
}
```

執行下列命令來註冊協助程式任務定義：

```
aws ecs register-daemon-task-definition --cli-input-json file://daemon-taskdef.json
```

## 協助程式任務定義參數
<a name="managed-daemons-taskdef-parameters"></a>

您可以在註冊協助程式任務定義時使用下列參數。

**必要參數**
+ `family` - 任務定義系列名稱。這會將相同協助程式任務定義的多個修訂分組。
+ `containerDefinitions` - 描述協助程式任務中容器的`DaemonContainerDefinition`物件陣列。

**選用參數**
+ `cpu` - 做為字串的任務層級 CPU 單位 （例如 `"256"`)。
+ `memory` - MiB 中的任務層級記憶體做為字串 （例如，`"512"`)。
+ `taskRoleArn` - IAM 角色的 ARN，將許可授予協助程式任務中的容器。
+ `executionRoleArn` - Amazon ECS 容器代理程式用來代表您進行 AWS API 呼叫的 IAM 角色 ARN （例如，從 Amazon ECR 提取映像）。
+ `volumes` - `DaemonVolume` 物件陣列。協助程式磁碟區僅支援使用 `host`和 繫結掛載`sourcePath`。協助程式任務定義不支援 Amazon EBS、Amazon EFS、FSx for Windows File Server、Docker 磁碟區或暫時性儲存。
+ `tags` - 標記協助程式任務定義的鍵值對陣列。

## 網路模式
<a name="managed-daemons-network-mode"></a>

協助程式使用 Amazon ECS 自動設定的特殊`daemon_bridge`網路模式。您無法在協助程式任務定義中指定網路模式。執行個體上的所有協助程式共用單一網路命名空間，且可透過靜態協助程式橋接 IP 地址 (`169.254.172.2`適用於 IPv4 或`fd00:ec2::172:2`適用於 IPv6) 在本機存取。應用程式任務 （非協助程式） 可以與此地址的協助程式通訊，無需額外的網路組態。

由於協助程式會在與應用程式任務不同的網路命名空間中執行，因此非協助程式任務不需要擔心連接埠與協助程式的衝突。不過，由於所有協助程式任務共用相同的命名空間，因此同一執行個體上的協助程式無法繫結至相同的連接埠。部署多個協助程式時，請確保每個協助程式使用唯一的連接埠。

## 特殊權限功能
<a name="managed-daemons-privileged"></a>

在 Amazon ECS 受管執行個體上，協助程式支援系統層級操作的特權 Linux 功能。安全代理程式、網路監控工具和可觀測性代理程式通常需要核心層級存取權才能正常運作。

您可以透過兩種方式授予 功能：

**完整特殊權限模式**會將所有 Linux 功能授予容器。當您的代理程式需要廣泛的系統存取時，請使用此選項：

```
{
    "containerDefinitions": [{
        "name": "security-daemon",
        "image": "my-security-agent:latest",
        "privileged": true
    }]
}
```

**個別功能**僅授予協助程式所需的許可，並遵循最低權限原則。使用 `linuxParameters.capabilities` 欄位來新增個別功能，例如 `SYS_ADMIN`、`SYS_PTRACE`、 `NET_ADMIN`和 `BPF`：

```
{
    "containerDefinitions": [{
        "name": "monitoring-daemon",
        "image": "my-monitoring-agent:latest",
        "linuxParameters": {
            "capabilities": {
                "add": ["NET_ADMIN", "SYS_PTRACE"]
            }
        }
    }]
}
```

## 磁碟區
<a name="managed-daemons-volumes"></a>

Managed Daemons 支援使用具有`sourcePath`規格的主機磁碟區來繫結掛載。這可讓協助程式容器掛載主機目錄，以存取基礎 Amazon EC2 執行個體上的日誌、指標和系統資訊。日誌收集代理程式、指標匯出程式和安全掃描器通常會使用此功能來取得主機層級資料的可見性。

協助程式任務定義支援使用 的主機磁碟區規格`sourcePath`。協助程式磁碟區會在基礎容器執行個體的生命週期內持續存在。

**注意**  
協助程式任務定義不支援 Amazon EBS 磁碟區、Amazon EFS 磁碟區、FSx for Windows File Server 磁碟區、Docker 磁碟區和暫時性儲存。

**注意**  
協助程式不支援彼此之間的磁碟區共用。每個協助程式都會使用自己的獨立磁碟區組態運作。

下列範例顯示具有綁定掛載的日誌收集器協助程式：

```
{
    "containerDefinitions": [{
        "name": "log-collector",
        "image": "fluent/fluentd:latest",
        "mountPoints": [{
            "sourceVolume": "var-log",
            "containerPath": "/var/log"
        }]
    }],
    "volumes": [{
        "name": "var-log",
        "host": {
            "sourcePath": "/var/log"
        }
    }]
}
```

## 支援的容器參數
<a name="managed-daemons-container-params"></a>

協助程式容器定義支援下列參數：
+ `image` （必要） - 容器映像 URI
+ `name` （必要） - 容器名稱
+ `cpu` - 為容器預留的 CPU 單位
+ `memory` / `memoryReservation` - 硬記憶體和軟記憶體限制
+ `essential` - 容器是否為必要 （預設值：true)
+ `command` / `entryPoint` - 覆寫容器命令或進入點
+ `environment` / `environmentFiles` / `secrets` - 環境組態
+ `privileged` - 在特權模式下執行容器
+ `user` - 以 身分執行容器的使用者
+ `workingDirectory` - 容器內的工作目錄
+ `readonlyRootFilesystem` - 將根檔案系統掛載為唯讀
+ `mountPoints` - 磁碟區掛載點 （僅限具有主機和 sourcePath 的繫結掛載）
+ `logConfiguration` - 記錄組態 （支援 awslogs、splunk、awsfirelens)
+ `healthCheck` - 容器運作狀態檢查組態
+ `dependsOn` - 容器啟動相依性
+ `ulimits` - 資源限制
+ `systemControls` - 核心參數
+ `linuxParameters.capabilities` - 要新增或捨棄的 Linux 功能
+ `linuxParameters.initProcessEnabled` - 在容器中執行初始化程序
+ `repositoryCredentials` - 私有登錄檔的登入資料
+ `restartPolicy` - 容器重新啟動政策

# 建立和管理協助程式
<a name="managed-daemons-create-manage"></a>

註冊協助程式任務定義後，請建立協助程式，將它部署到 Amazon ECS 受管執行個體容量提供者。Amazon ECS 會自動在關聯容量提供者的每個 Amazon EC2 執行個體上放置一個協助程式任務，並管理協助程式生命週期。

## 先決條件
<a name="managed-daemons-prerequisites"></a>

建立協助程式之前，請確認您具有下列項目：
+ Amazon ECS 叢集。
+ 與叢集相關聯的一或多個 Amazon ECS 受管執行個體容量提供者。
+ 已註冊的協助程式任務定義。

## 建立協助程式
<a name="managed-daemons-create"></a>

### AWS 管理主控台
<a name="managed-daemons-create-console"></a>

1. 開啟 Amazon ECS 主控台。在左側導覽中，選擇**叢集**，然後選取您的叢集。

1. 選擇**精靈**索引標籤，然後選擇**建立**。

1. 對於**精靈任務定義系列**，請從下拉式清單中選取您的精靈任務定義。

1. 對於**精靈任務定義修訂**，選取要使用的修訂。保留空白以使用最新的修訂版。

1. 針對**協助程式名稱**，輸入唯一的名稱。名稱最多可包含 255 個英數字元、連字號和底線。

1. 針對**容量提供者**，選取一或多個 Amazon ECS 受管執行個體容量提供者。這些會決定哪些執行個體執行您的協助程式任務。

1. （選用） 設定部署設定：
   + **耗盡百分比** - 在更新期間同時耗盡的執行個體百分比。預設：`25`。
   + **使用 CloudWatch alarm(s)** - 開啟 以監控部署運作狀態，並在警示觸發時自動轉返。
   + **製作時間** - Amazon ECS 在將所有執行個體更新為新的常駐程式修訂版後，在完成部署之前等待的分鐘數。在此期間，Amazon ECS 會監控 CloudWatch 警示，並在觸發任何警示時自動復原部署。預設：`0`。

1. (選用) 新增標籤。

1. （選用） 開啟**啟用 ECS Exec** 以在協助程式容器中執行互動式命令以進行故障診斷。

1. 檢閱您的組態，然後選擇**建立**。

### AWS CLI
<a name="managed-daemons-create-cli"></a>

使用您的協助程式組態建立 JSON 檔案，並執行 `create-daemon`命令。

以下是範例 JSON 檔案：

```
{
    "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/my-daemon-cluster",
    "daemonName": "my-monitoring-daemon",
    "daemonTaskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1",
    "capacityProviderArns": [
        "arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider"
    ]
}
```

執行下列命令來建立協助程式：

```
aws ecs create-daemon --cli-input-json file://create-daemon.json
```

**必要欄位**
+ `daemonName` - 協助程式的唯一名稱。
+ `clusterArn` - 叢集的 ARN。
+ `daemonTaskDefinitionArn` - 協助程式任務定義的 ARN。
+ `capacityProviderArns` - Amazon ECS 受管執行個體容量提供者 ARNs的陣列。

**選用欄位**
+ `deploymentConfiguration` - 自訂部署行為的`DaemonDeploymentConfiguration`物件。
+ `tags` - 用於標記的鍵/值對。
+ `propagateTags` - 標籤傳播設定。
+ `clientToken` - 等冪符記。

## 驗證協助程式部署
<a name="managed-daemons-verify"></a>

建立協助程式之後，請使用 AWS 管理主控台 或 來驗證其狀態 AWS CLI。

### AWS 管理主控台
<a name="managed-daemons-verify-console"></a>

1. 開啟 Amazon ECS 主控台。在左側導覽中，選擇**叢集**，然後選取您的叢集。

1. 選擇 **Daemons** 索引標籤。

1. 確認您的協助程式顯示**作用中**狀態。

1. 選擇**任務**索引標籤，以確認每個容器執行個體上執行一個協助程式任務。

### AWS CLI
<a name="managed-daemons-verify-cli"></a>

執行下列命令來驗證協助程式狀態：

```
aws ecs list-daemons \
    --cluster-arn arn:aws:ecs:us-east-1:123456789012:cluster/my-daemon-cluster
```

```
aws ecs describe-daemons \
    --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon
```

## 更新協助程式
<a name="managed-daemons-update"></a>

若要使用新的任務定義修訂版更新協助程式，或新增容量提供者，請使用 AWS 管理主控台 或 AWS CLI。這會觸發所有執行個體的滾動部署。

### AWS 管理主控台
<a name="managed-daemons-update-console"></a>

1. 開啟 Amazon ECS 主控台。在左側導覽中，選擇**叢集**，然後選取您的叢集。

1. 選擇**協助程式**索引標籤，然後選取您要更新的協助程式。

1. 選擇**更新**。

1. 對於**精靈任務定義修訂**，選取新的修訂。

1. （選用） 更新容量提供者或部署設定。

1. 選擇**更新**以開始滾動部署。

### AWS CLI
<a name="managed-daemons-update-cli"></a>

執行 `update-daemon` 命令：

```
aws ecs update-daemon \
    --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon \
    --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:2 \
    --capacity-provider-arns arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider
```

**重要**  
當您在`UpdateDaemon`請求中提供協助程式組態設定時，Amazon ECS 會使用您指定的設定，而不是預設值。更新之間不會保留協助程式組態設定，包括標籤和啟用執行命令旗標。對 的每次呼叫`UpdateDaemon`都必須包含您要套用的完整組態設定集。從請求中省略的任何設定都會還原為其預設值。

## 刪除協助程式
<a name="managed-daemons-delete"></a>

若要刪除協助程式，請使用 AWS 管理主控台 或 AWS CLI。刪除容量提供者或叢集之前，請等待所有協助程式任務停止。

### AWS 管理主控台
<a name="managed-daemons-delete-console"></a>

1. 開啟 Amazon ECS 主控台。在左側導覽中，選擇**叢集**，然後選取您的叢集。

1. 選擇**協助程式**索引標籤，然後選取您要刪除的協助程式。

1. 選擇 **刪除**。

1. 在確認對話方塊中，選擇**刪除**以確認。

### AWS CLI
<a name="managed-daemons-delete-cli"></a>

執行 `delete-daemon` 命令：

```
aws ecs delete-daemon \
    --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon
```

# 協助程式部署
<a name="managed-daemons-deployments"></a>

當您建立或更新協助程式時，Amazon ECS 會執行滾動部署，以在相關聯容量提供者中的所有執行個體上執行協助程式任務。本節說明協助程式部署的運作方式，以及如何設定部署行為。

## 協助程式部署的運作方式
<a name="managed-daemons-deploy-how"></a>

協助程式部署遵循 drain-provision-replace 模式。當您在具有現有執行個體的容量提供者上建立協助程式，或將協助程式更新為新的任務定義修訂版時，Amazon ECS 會耗盡一批執行個體、使用更新的協助程式佈建替換執行個體，並自動取代應用程式任務。此程序會重複執行，直到所有執行個體執行新的協助程式修訂版為止。

部署生命週期會轉換到下列狀態：

1. `PENDING` - Amazon ECS 已建立部署並準備開始。

1. `IN_PROGRESS` - Amazon ECS 正積極耗盡執行個體和佈建替換。

1. `SUCCESSFUL` - 所有執行個體都在執行目標協助程式修訂。

1. `STOPPED` - Amazon ECS 已停止部署，因為它失敗或被新部署取代。協助程式可能處於混合狀態，其中某些執行個體執行舊修訂版，而其他執行個體則執行新修訂版。

如果部署斷路器偵測到故障或在部署期間觸發 CloudWatch 警示，Amazon ECS 會自動轉返至先前的協助程式修訂版。

## 部署組態參數
<a name="managed-daemons-deploy-config"></a>

您可以在建立或更新協助程式時使用 `deploymentConfiguration` 參數自訂部署行為。
+ `drainPercent` (1.0–100.0) - 部署期間要同時耗盡的執行個體百分比。較高的值可加速部署，但可能會暫時減少可用容量。例如， 的值一次`20.0`耗盡 20% 的執行個體。若沒有指定，則預設為 `25.0`。
+ `alarms` (`DaemonAlarmConfiguration`) - 在部署期間要監控的 CloudWatch 警示。Amazon ECS 會在部署期間評估指定的警示，並在任何警示進入 `ALARM` 狀態時自動轉返。部署開始時，Amazon ECS 會忽略已處於 `ALARM` 狀態的警示。
+ `bakeTimeInMinutes` (0–1440) - Amazon ECS 在將所有執行個體更新為新的常駐程式修訂版後，在完成部署之前等待的分鐘數。在此期間，Amazon ECS 會監控 CloudWatch 警示，並在觸發任何警示時自動復原部署。若沒有指定，則預設為 `0`。

**部署組態的範例：**

```
aws ecs create-daemon \
    --cluster-arn arn:aws:ecs:us-east-1:123456789012:cluster/my-daemon-cluster \
    --daemon-name my-monitoring-daemon \
    --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1 \
    --capacity-provider-arns arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider \
    --deployment-configuration '{"drainPercent":20.0,"bakeTimeInMinutes":5}'
```

## 監控部署
<a name="managed-daemons-deploy-monitor"></a>

使用下列命令追蹤部署進度：

```
aws ecs list-daemon-deployments \
    --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon
```

```
aws ecs describe-daemon-deployments \
    --daemon-deployment-arns arn:aws:ecs:us-east-1:123456789012:daemon-deployment/my-daemon-cluster/abc123
```

`describe-daemon-deployments` 回應包含部署狀態、目標協助程式修訂版，以及指出有多少執行個體執行目標協助程式的 `totalRunningInstanceCount` 欄位。

## 協助程式部署案例
<a name="managed-daemons-deploy-scenarios"></a>

本節會逐步解說 Managed Daemons 的常見部署案例。
+ [在空容量提供者上部署協助程式](#managed-daemons-scenario-empty)
+ [使用現有執行個體在容量提供者上部署協助程式](#managed-daemons-scenario-existing)
+ [將容量提供者新增至現有的協助程式](#managed-daemons-scenario-add-cp)
+ [將協助程式更新為新的修訂版](#managed-daemons-scenario-update)

### 在空容量提供者上部署協助程式
<a name="managed-daemons-scenario-empty"></a>

在此案例中，您會在沒有現有執行個體的容量提供者上部署協助程式。執行個體會在您排程應用程式任務時啟動。

**先決條件：**叢集和沒有執行中執行個體的 Amazon ECS 受管執行個體容量提供者。

1. 註冊您的協助程式任務定義。

1. 建立協助程式。即使還沒有執行個體，Amazon ECS 也會立即完成建立。

   ```
   aws ecs create-daemon \
       --cluster-arn arn:aws:ecs:us-east-1:123456789012:cluster/my-daemon-cluster \
       --daemon-name my-monitoring-daemon \
       --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1 \
       --capacity-provider-arns arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider
   ```

1. 建立使用相同容量提供者的服務。當 Amazon ECS 為服務佈建執行個體時，它會先啟動協助程式任務，然後將應用程式任務轉換為 `RUNNING`。

   ```
   aws ecs create-service \
       --cluster my-daemon-cluster \
       --service-name my-app-service \
       --task-definition my-app-task \
       --desired-count 2 \
       --capacity-provider-strategy capacityProvider=my-daemon-capacity-provider,weight=1
   ```

1. 使用 `describe-daemons`命令或 主控台中的 **Daemons** 索引標籤，確認協助程式任務是否在每個執行個體上執行。

**注意**  
當 Amazon ECS 佈建執行個體並啟動協助程式任務時，協助程式部署可能會短暫保持 `PENDING` 狀態。等待部署到達，`SUCCESSFUL`再驗證協助程式任務置放。

### 使用現有執行個體在容量提供者上部署協助程式
<a name="managed-daemons-scenario-existing"></a>

在此案例中，您會在已執行執行個體和應用程式任務的容量提供者上部署協助程式。

**先決條件：**具有執行中執行個體之 Amazon ECS 受管執行個體容量提供者的叢集。

1. 註冊您的協助程式任務定義。

1. 建立協助程式。Amazon ECS 會啟動滾動部署，在所有現有的執行個體上放置協助程式任務。

   ```
   aws ecs create-daemon \
       --cluster-arn arn:aws:ecs:us-east-1:123456789012:cluster/my-daemon-cluster \
       --daemon-name my-monitoring-daemon \
       --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1 \
       --capacity-provider-arns arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider \
       --deployment-configuration '{"drainPercent":25.0,"bakeTimeInMinutes":3}'
   ```

   Amazon ECS 會耗盡一批現有的執行個體 （根據 `drainPercent`)、使用 協助程式佈建取代執行個體，以及取代應用程式任務。此程序會重複執行，直到所有執行個體執行協助程式為止。

1. 監控部署進度：

   ```
   aws ecs list-daemon-deployments \
       --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon
   ```

### 將容量提供者新增至現有的協助程式
<a name="managed-daemons-scenario-add-cp"></a>

在此案例中，您會將第二個容量提供者新增至現有的協助程式。協助程式會自動部署到新容量提供者中的執行個體。

**先決條件：**在第一個容量提供者上執行的協助程式，以及建立與叢集相關聯的第二個容量提供者。

1. 更新協助程式以包含兩個容量提供者：

   ```
   aws ecs update-daemon \
       --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon \
       --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:1 \
       --capacity-provider-arns \
           arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider \
           arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-daemon-capacity-provider-2
   ```

1. 監控部署，並確認協助程式任務在兩個容量提供者的執行個體上執行。

### 將協助程式更新為新的修訂版
<a name="managed-daemons-scenario-update"></a>

在此案例中，您會更新現有的協助程式，以使用新的任務定義修訂。

1. 使用更新的容器映像或組態註冊協助程式任務定義的新修訂版。

1. 更新協助程式以使用新的修訂：

   ```
   aws ecs update-daemon \
       --daemon-arn arn:aws:ecs:us-east-1:123456789012:daemon/my-daemon-cluster/my-monitoring-daemon \
       --daemon-task-definition-arn arn:aws:ecs:us-east-1:123456789012:daemon-task-definition/my-daemon-task:2
   ```

   Amazon ECS 會執行滾動部署。它會耗盡執行舊修訂版的執行個體、使用新修訂版佈建取代執行個體，以及自動取代應用程式任務。如果斷路器偵測到故障，Amazon ECS 會回復到先前的修訂版。

1. 監控部署並確認所有執行個體都執行新的修訂版：

   ```
   aws ecs describe-daemon-deployments \
       --daemon-deployment-arns arn:aws:ecs:us-east-1:123456789012:daemon-deployment/my-daemon-cluster/deployment-id
   ```

# 協助程式事件
<a name="managed-daemons-events"></a>

Amazon ECS 會將協助程式事件傳送至 ，以提供協助程式任務管理和部署生命週期變更的可見性。您可以使用這些事件來監控協助程式運作狀態、追蹤部署進度，以及觸發自動化工作流程。

Amazon ECS 支援下列協助程式事件類型：
+ [協助程式服務動作事件](#managed-daemons-service-action-events) - 與協助程式任務置放和啟動問題相關的事件。
+ [協助程式部署狀態變更事件](#managed-daemons-deployment-state-change-events) - 與協助程式部署生命週期轉換相關的事件。

若要了解如何為這些事件建立規則，請參閱 [建立協助程式事件的規則](#managed-daemons-eventbridge-rules)。

## 協助程式服務動作事件
<a name="managed-daemons-service-action-events"></a>

Amazon ECS 會傳送詳細資訊類型為 的協助程式服務動作事件`ECS Daemon Service Action`。當 Amazon ECS 在容器執行個體上啟動協助程式任務時，這些事件會通知您。

### 協助程式\$1TASK\$1START\$1IMPAIRED
<a name="managed-daemons-event-start-impaired"></a>

當 Amazon ECS 無法在容器執行個體上成功啟動協助程式任務時，會傳送`DAEMON_TASK_START_IMPAIRED`事件。事件包含指出失敗原因`failureType`的欄位：
+ `TASK_FAILED_TO_RUN` - 協助程式任務已建立，但無法達到`RUNNING`狀態。常見原因包括容器映像提取失敗、容器運作狀態檢查失敗或基本容器結束。`taskArn` 欄位出現在事件中。
+ `TASK_CREATION_FAILED` - 無法在容器執行個體上建立協助程式任務。常見原因包括執行個體上的 CPU、記憶體或其他資源不足。`taskArn` 欄位不存在於事件中，因為未建立任務。

### 範例：TASK\$1FAILED\$1TO\$1RUN 事件
<a name="managed-daemons-event-example-task-failed"></a>

下列事件顯示 協助程式任務已建立，但由於容器映像提取失敗而無法達到 `RUNNING` 狀態。

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-123456789012",
    "detail-type": "ECS Daemon Service Action",
    "source": "aws.ecs",
    "account": "123456789012",
    "time": "2026-03-24T12:00:00Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ecs:us-west-2:123456789012:task/my-cluster/a1b2c3d4e5f6"
    ],
    "detail": {
        "eventType": "WARNING",
        "eventName": "DAEMON_TASK_START_IMPAIRED",
        "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/my-cluster",
        "containerInstanceArn": "arn:aws:ecs:us-west-2:123456789012:container-instance/my-cluster/a1b2c3d4e5f6",
        "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/my-cluster/a1b2c3d4e5f6",
        "daemonRevisionArn": "arn:aws:ecs:us-west-2:123456789012:daemon-revision/my-cluster/my-daemon/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "capacityProviderName": "my-capacity-provider",
        "daemonArn": "arn:aws:ecs:us-west-2:123456789012:daemon/my-cluster/my-daemon",
        "daemonTaskDefinitionArn": "arn:aws:ecs:us-west-2:123456789012:daemon-task-definition/my-daemon-td:1",
        "failureType": "TASK_FAILED_TO_RUN",
        "createdAt": "2026-03-24T12:00:00.000Z",
        "reason": "Task failed to reach RUNNING status: CannotPullContainerError: pull image manifest has been retried 5 time(s)"
    }
}
```

### 範例：TASK\$1CREATION\$1FAILED 事件
<a name="managed-daemons-event-example-creation-failed"></a>

下列事件顯示由於 CPU 資源不足而無法在容器執行個體上建立的協助程式任務。`taskArn` 欄位不存在，因為未建立任務。

```
{
    "version": "0",
    "id": "87654321-4321-4321-4321-210987654321",
    "detail-type": "ECS Daemon Service Action",
    "source": "aws.ecs",
    "account": "123456789012",
    "time": "2026-03-24T12:01:00Z",
    "region": "us-west-2",
    "resources": [],
    "detail": {
        "eventType": "WARNING",
        "eventName": "DAEMON_TASK_START_IMPAIRED",
        "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/my-cluster",
        "containerInstanceArn": "arn:aws:ecs:us-west-2:123456789012:container-instance/my-cluster/b2c3d4e5f6a7",
        "daemonRevisionArn": "arn:aws:ecs:us-west-2:123456789012:daemon-revision/my-cluster/my-daemon/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "capacityProviderName": "my-capacity-provider",
        "daemonArn": "arn:aws:ecs:us-west-2:123456789012:daemon/my-cluster/my-daemon",
        "daemonTaskDefinitionArn": "arn:aws:ecs:us-west-2:123456789012:daemon-task-definition/my-daemon-td:1",
        "failureType": "TASK_CREATION_FAILED",
        "createdAt": "2026-03-24T12:01:00.000Z",
        "reason": "RESOURCE:CPU - Unable to place daemon task on container instance: insufficient CPU"
    }
}
```

## 協助程式部署狀態變更事件
<a name="managed-daemons-deployment-state-change-events"></a>

Amazon ECS 會傳送詳細資訊類型為 的協助程式部署狀態變更事件`ECS Daemon Deployment State Change`。每次協助程式部署的狀態變更時，Amazon ECS 都會發出這些事件。

### 部署狀態變更事件類型
<a name="managed-daemons-deploy-event-types"></a>

Amazon ECS 依下列事件類型分類部署狀態變更事件：

**INFO 事件**
+ `DAEMON_DEPLOYMENT_PENDING` - Amazon ECS 已啟動協助程式部署。
+ `DAEMON_DEPLOYMENT_IN_PROGRESS` - Amazon ECS 已開始部署，並積極取代協助程式任務。
+ `DAEMON_DEPLOYMENT_SUCCESSFUL` - Amazon ECS 已成功完成部署，所有協助程式任務皆執行正常。
+ `DAEMON_DEPLOYMENT_STOPPED` - Amazon ECS 已停止部署。當部署失敗或已由新的部署取代時，就會發生這種情況。
+ `DAEMON_DEPLOYMENT_STOP_REQUESTED` - Amazon ECS 已停止部署繼續進行，現在將開始復原。
+ `DAEMON_DEPLOYMENT_ROLLBACK_IN_PROGRESS` - 由於部署失敗或斷路器觸發，Amazon ECS 已啟動轉返。
+ `DAEMON_DEPLOYMENT_ROLLBACK_SUCCESSFUL` - Amazon ECS 已成功完成部署轉返。

**錯誤事件**
+ `DAEMON_DEPLOYMENT_ROLLBACK_FAILED` - Amazon ECS 無法完成部署轉返。

### 範例：部署擱置事件
<a name="managed-daemons-deploy-event-example"></a>

下列事件顯示 Amazon ECS 已啟動的協助程式部署。

```
{
    "version": "0",
    "id": "3329f79b-3dca-07f8-b1c2-5fe99f0b5e87",
    "detail-type": "ECS Daemon Deployment State Change",
    "source": "aws.ecs",
    "account": "111122223333",
    "time": "2026-03-05T15:54:41Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:ecs:us-west-2:111122223333:daemon/my-cluster/my-daemon"
    ],
    "detail": {
        "eventType": "INFO",
        "eventName": "DAEMON_DEPLOYMENT_PENDING",
        "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/my-cluster",
        "daemonArn": "arn:aws:ecs:us-west-2:111122223333:daemon/my-cluster/my-daemon",
        "daemonDeploymentArn": "arn:aws:ecs:us-west-2:111122223333:daemon-deployment/my-cluster/my-daemon/0EYSiB0qap8xf0N76FsbE",
        "targetDaemonRevisionArn": "arn:aws:ecs:us-west-2:111122223333:daemon-revision/my-cluster/my-daemon/85707969-3732-4b6a-a37d-5cefddd7d7dd",
        "updatedAt": "2026-03-05T15:54:41.618059641Z"
    }
}
```

## 建立協助程式事件的規則
<a name="managed-daemons-eventbridge-rules"></a>

您可以建立規則，以在協助程式事件發生時接收通知。如需建立規則的詳細資訊，請參閱《*Amazon EventBridge 使用者指南*》中的[建立規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html)。

下列範例事件模式示範如何篩選協助程式事件。

### 範例：比對所有協助程式服務動作事件
<a name="managed-daemons-rule-all-service-action"></a>

```
{
    "source": ["aws.ecs"],
    "detail-type": ["ECS Daemon Service Action"]
}
```

### 範例：符合特定失敗類型
<a name="managed-daemons-rule-failure-type"></a>

```
{
    "source": ["aws.ecs"],
    "detail-type": ["ECS Daemon Service Action"],
    "detail": {
        "eventName": ["DAEMON_TASK_START_IMPAIRED"],
        "failureType": ["TASK_CREATION_FAILED"]
    }
}
```

### 範例：符合特定叢集的事件
<a name="managed-daemons-rule-cluster"></a>

```
{
    "source": ["aws.ecs"],
    "detail-type": ["ECS Daemon Service Action"],
    "detail": {
        "eventName": ["DAEMON_TASK_START_IMPAIRED"],
        "clusterArn": ["arn:aws:ecs:us-west-2:123456789012:cluster/my-cluster"]
    }
}
```

### 範例：符合所有部署狀態變更事件
<a name="managed-daemons-rule-deployment"></a>

```
{
    "source": ["aws.ecs"],
    "detail-type": ["ECS Daemon Deployment State Change"]
}
```

# 協助程式指標
<a name="managed-daemons-metrics"></a>

Amazon ECS 發佈 Managed Daemons 的 CloudWatch 指標。您可以使用這些指標來追蹤叢集中協助程式任務的 CPU 和記憶體使用率。

協助程式指標使用與服務指標相同的`AWS/ECS`命名空間。Amazon ECS 會以`ServiceName`維度值區分協助程式指標與服務指標，該值使用字首，`daemon:`後面接著協助程式名稱 （例如，`daemon:my-daemon`)。

## 協助程式使用率指標
<a name="managed-daemons-metrics-cpu-memory"></a>

Amazon ECS 會將常駐程式 CPU 和記憶體使用率測量為與常駐程式任務定義中指定的資源相比，常駐程式任務使用的資源百分比。

CloudWatch 提供精靈使用率指標的下列統計資料：
+ **平均** - 叢集中所有協助程式任務的平均使用率。
+ **最低** - 資源用量最低的協助程式任務使用率。
+ **上限** - 資源用量最高的協助程式任務使用率。

### 使用率公式
<a name="managed-daemons-metrics-formulas"></a>

Amazon ECS 使用以下公式計算平均統計資料：

```
                                      (Total CPU units used by daemon tasks) x 100
Daemon CPU utilization =  -------------------------------------------------------------------------------
                          (Total CPU units specified in daemon task definition) x (Number of daemon tasks)
```

```
                                         (Total MiB of memory used by daemon tasks) x 100
Daemon memory utilization =  ------------------------------------------------------------------------------------
                             (Total MiB of memory specified in daemon task definition) x (Number of daemon tasks)
```

這些公式僅適用於平均統計資料。最小和最大統計資料分別代表資源使用率最低和最高的個別協助程式任務。

Amazon ECS 容器代理程式會每 20 秒針對每個執行中的協助程式任務取樣 CPU 和記憶體用量。代理程式每分鐘向 Amazon ECS 報告三個範例。Amazon ECS 會彙總叢集中所有協助程式任務的範例，並將平均值、最小值和最大值以協助程式任務定義中指定總資源的百分比發佈至 CloudWatch。

### 範例：使用率計算
<a name="managed-daemons-metrics-example-calculation"></a>

協助程式任務定義會指定 256 個 CPU 單位和 512 MiB 的記憶體。協助程式在 2 個容器執行個體中有 2 個執行中的任務。一個協助程式任務使用 200 個 CPU 單位和 400 MiB 的記憶體。另一個使用 100 個 CPU 單位和 256 MiB 的記憶體。Amazon ECS 會報告下列指標：
+ 平均 CPU 使用率：((200 \$1 100) x 100) / (256 x 2) = 58.6%
+ 平均記憶體使用率：((400 \$1 256) x 100) / (512 x 2) = 64.1%

## 檢視協助程式指標
<a name="managed-daemons-metrics-viewing"></a>

您可以使用 AWS 管理主控台 或 檢視協助程式指標 AWS CLI。

### AWS 管理主控台
<a name="managed-daemons-metrics-viewing-console"></a>

1. 開啟 CloudWatch 主控台。

1. 在左側導覽中，選擇**指標**，然後選擇**所有指標**。

1. 選擇 **AWS/ECS** 命名空間。

1. 選擇 **ClusterName、ServiceName** 維度。

1. 篩選以 開頭`ServiceName`的值`daemon:`，以尋找您的協助程式指標。

### AWS CLI
<a name="managed-daemons-metrics-viewing-cli"></a>

執行 `get-metric-statistics`命令，從 CloudWatch 擷取協助程式指標。使用 `daemon:`字首指定`ServiceName`維度。

### 範例：檢視協助程式 CPU 使用率
<a name="managed-daemons-metrics-example-cpu"></a>

下列命令會以 5 分鐘的間隔擷取 12 小時期間內協助程式的平均 CPU 使用率。

```
aws cloudwatch get-metric-statistics \
    --namespace AWS/ECS \
    --metric-name CPUUtilization \
    --dimensions Name=ClusterName,Value=my-cluster Name=ServiceName,Value=daemon:my-daemon \
    --start-time 2026-03-24T00:00:00Z \
    --end-time 2026-03-24T12:00:00Z \
    --period 300 \
    --statistics Average
```

### 範例：檢視協助程式記憶體使用率
<a name="managed-daemons-metrics-example-memory"></a>

下列命令會以 5 分鐘的間隔擷取 12 小時期間內協助程式的平均記憶體使用率。

```
aws cloudwatch get-metric-statistics \
    --namespace AWS/ECS \
    --metric-name MemoryUtilization \
    --dimensions Name=ClusterName,Value=my-cluster Name=ServiceName,Value=daemon:my-daemon \
    --start-time 2026-03-24T00:00:00Z \
    --end-time 2026-03-24T12:00:00Z \
    --period 300 \
    --statistics Average
```

# 協助程式自動修復
<a name="managed-daemons-auto-repair"></a>

Amazon ECS 將所有協助程式視為對執行個體運作狀態至關重要。如果任何協助程式任務停止或運作狀態不佳，Amazon ECS 會將執行個體視為受損，並自動耗盡和取代它。協助程式自動修復動作如下所示：

1. Amazon ECS 會偵測協助程式任務何時停止或運作狀態不佳。

1. Amazon ECS 會將執行個體標記為耗盡，以防止其接受新的應用程式任務。

1. Amazon ECS 會佈建替換執行個體，並在其上啟動協助程式任務。

1. 在協助程式任務達到運作狀態後，Amazon ECS 會將應用程式任務從耗盡執行個體排程到取代。

1. Amazon ECS 會終止原始執行個體。

**重要**  
協助程式運作狀態檢查是選用的，但強烈建議您使用。如果沒有運作狀態檢查，Amazon ECS 只能在協助程式任務停止時偵測失敗。

您可以使用 `DescribeContainerInstances` API 或 `DescribeTasks` API 監控協助程式運作狀態。