

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

# 常駐程式任務定義
<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` - 用於標記協助程式任務定義的鍵/值對陣列。
+ `pidMode` - 控制協助程式的 PID 命名空間模式。
+ `ipcMode` - 控制協助程式的 IPC 命名空間模式。

## 網路模式
<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`、`NET_ADMIN`、`BPF`、 `SYS_PTRACE`和 `PERFMON`：

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

## PID 和 IPC 命名空間共用
<a name="managed-daemons-namespace-sharing"></a>

在 Amazon ECS 受管執行個體上，協助程式支援 PID 和 IPC 命名空間共用，以啟用需要應用程式任務程序或 IPC 資源可見性的使用案例，例如安全代理程式、監控工具和可觀測性協助程式。

`pidMode`  
類型：字串  
必要：否  
有效值：`none` \| `shared`  
預設：`none`  
協助程式的 PID 命名空間模式。如果指定 `none` 或未提供任何值，協助程式會使用自己的 PID 命名空間執行，與其他任務隔離。如果`shared`指定 ，則協助程式會加入主機 PID 命名空間，讓使用 的非協助程式任務`pidMode: "host"`或使用 的其他協助程式可存取`pidMode: "shared"`。

`ipcMode`  
類型：字串  
必要：否  
有效值：`none` \| `shared`  
預設：`none`  
協助程式的 IPC 命名空間模式。如果指定 `none` 或未提供任何值，協助程式會使用自己的 IPC 命名空間執行，與其他任務隔離。如果`shared`指定 ，則協助程式會加入主機 IPC 命名空間，讓使用 的非協助程式任務`ipcMode: "host"`或使用 的其他協助程式可存取`ipcMode: "shared"`。

下列範例顯示同時啟用 PID 和 IPC 命名空間共用的協助程式任務定義：

```
{
    "family": "my-monitoring-daemon",
    "pidMode": "shared",
    "ipcMode": "shared",
    "containerDefinitions": [
        {
            "name": "monitoring-agent",
            "image": "public.ecr.aws/my-company/monitoring-agent:latest",
            "essential": true
        }
    ]
}
```

若要與已`pidMode`設為 的協助程式共用 PID 命名空間`shared`，非協助程式任務必須在其任務定義`pidMode: "host"`中指定 。這可讓任務的容器查看協助程式的程序，並啟用程序監控和訊號交付等使用案例。

若要與已`ipcMode`設為 的協助程式共用 IPC 命名空間`shared`，非協助程式任務必須在其任務定義`ipcMode: "host"`中指定 。這可讓任務的容器存取協助程式的 IPC 資源，例如共用記憶體區段和訊息佇列。

## 磁碟區
<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` - 容器重新啟動政策