

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

# 在 Amazon EC2 資源上建立具有多個容器的單一節點任務定義
<a name="create-job-definition-single-node-multi-container"></a>

請完成下列步驟，在 Amazon Elastic Compute Cloud (Amazon EC2) 資源上建立具有多個容器的單一節點任務定義。

**若要在 Amazon EC2 資源上建立新的任務定義：**

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 從導覽列中，選擇要 AWS 區域 使用的 。

1. 在左側導覽窗格中，選擇**任務定義**。

1. 選擇**建立**。

1. 針對**協調類型，**選擇 **Amazon Elastic Compute Cloud (Amazon EC2)**。

1. 對於**任務定義結構**，請關閉**使用舊版 containerProperties 結構**處理。

1. 對於 **EC2 平台組態**，請關閉**啟用多節點平行**處理。

1. 選擇**下一步**。

1. 在**一般組態**區段中，輸入下列內容：

   1. 在**名稱**中，輸入任務定義的唯一名稱。名稱長度最多可達 128 個字元。可以包含大小寫字母、數字、連字號 (-) 和底線 (\_)。

   1. 針對**執行逾時 - *選用***，輸入逾時值 （以秒為單位）。執行逾時是未完成任務終止之前的時間長度。如果嘗試超過逾時持續時間，則會停止嘗試並移至 `FAILED` 狀態。如需詳細資訊，請參閱[任務逾時](job_timeouts.md)。最小值為 60 秒。

   1. 開啟**排程優先順序 - *選用***。輸入介於 0 到 100 之間的排程優先順序值。較高值的優先順序較高。

   1. 展開**標籤 - *選用***，然後選擇**新增標籤**以將標籤新增至資源。輸入索引鍵和選用值，然後選擇**新增標籤**。

   1. 開啟**傳播標籤**，將標籤從任務和任務定義傳播到 Amazon ECS 任務。

1. 在**重試策略 - *選用***區段中，輸入下列內容：

   1. 針對**任務嘗試**，輸入嘗試將任務移至`RUNNABLE`狀態的 AWS Batch 次數。輸入介於 1 到 10 之間的數字。

   1. 針對**重試策略條件**，選擇在**結束時新增評估**。輸入至少一個參數值，然後選擇**動作**。對於每組條件，**動作**必須設定為**重試**或**結束**。這些動作表示下列項目：
      + **重試** – AWS Batch 重試，直到達到您指定的任務嘗試次數為止。
      + **結束** – AWS Batch 停止重試任務。
**重要**  
如果您選擇在**結束時新增評估**，則必須至少設定一個參數，然後選擇**動作**或選擇在**結束時移除評估**。

1. 在**任務屬性**區段中，輸入下列項目：

   1. 針對**執行角色 - *條件式***，選擇角色以允許 Amazon ECS 代理程式代表您進行 AWS API 呼叫。如需建立**執行角色**的詳細資訊，請參閱 [教學課程：建立 IAM 執行角色](create-execution-role.md)。

   1. 選擇**啟用 ECS 執行命令**，以啟用直接存取 Amazon ECS 容器殼層，並略過主機作業系統。您必須選擇**任務角色**。
**重要**  
**ECS 執行**命令需要可寫入的檔案系統。

   1. 針對**任務角色**，選擇 Amazon ECS Identity and Access Management (IAM) 角色，以允許容器代表您進行 AWS API 呼叫。如需詳細資訊，請參閱《[Amazon Elastic Container Service 開發人員指南》中的 Amazon ECS 任務 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。 **

   1. 針對 **IPC 模式**`task`，選擇 `host`、 或 `none`。如果指定 `host` ，則在同一容器執行個體上指定主機 IPC 模式的任務中的所有容器都會與主機 Amazon EC2 執行個體共用相同的 IPC 資源。如果指定任務，則指定任務內的所有容器都會共用相同的 IPC 資源。如果未指定，則任務容器中的 IPC 資源為私有，不會與任務或容器執行個體中的其他容器共用。如果沒有指定值，則 IPC 資源命名空間共用取決於容器執行個體上 Docker 常駐程式的設定。

   1. 針對 **PID 模式**，選擇 `host`或 `task`。例如，監控附屬可能需要 `pidMode` 存取相同任務中執行之其他容器的相關資訊。如果指定 `host` ，則在同一容器執行個體上指定主機 PID 模式的任務中的所有容器都會與主機 Amazon EC2 執行個體共用相同的程序命名空間。如果已指定 `task`，則指定任務內的所有容器會共用相同的程序命名空間。如果未指定任何值，每個容器的預設值會是私有命名空間。

1. 在**消耗性資源**區段中，輸入下列內容：

   1. 輸入唯一的**名稱**和**請求的值**。

   1. 您可以選擇新增消耗性資源來**新增更多消耗性資源**。

1. 在**儲存**區段中，輸入下列內容：

   1. 輸入磁碟區**的名稱**和**來源路徑**，然後選擇**新增磁碟區**。您也可以選擇開啟啟用 EFS。

   1. 您可以選擇新增磁碟區來**新增更多磁碟區**。

1. 針對**參數**，選擇**新增參數**，將參數替換預留位置新增為**鍵**對和選用**值**對。

1. 選擇**下一頁**。

1. 在**容器組態**區段中：

   1. 在 **Name** (名稱) 中，輸入容器的名稱。

   1. 對於**必要容器**，如果容器為必要，請啟用 。

   1. 針對**映像**，選擇要用於任務的Docker映像。根據預設，Docker Hub 登錄檔中的映像為可用。您也可以用 `{{repository-url}}/{{image}}:{{tag}}` 指定其他儲存庫。名稱長度最多可達 225 個字元。它可以包含大小寫字母、數字、連字號 (-)、底線 (\_)、冒號 (：)、斜線 (/) 和數字符號 (\#)。此參數會映射至 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Image` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `IMAGE` 參數。
**注意**  
Docker 映像架構必須符合執行個體排程所在之運算資源的處理器架構。例如，ARM 型 Docker 映像只能在 ARM 型運算資源上執行。
      + Amazon ECR Public 儲存庫中的映像會使用完整`registry/repository[:tag]`或命名慣例 `registry/repository[@digest]` （例如 `public.ecr.aws/{{registry_alias}}/{{my-web-app}}:{{latest}}`)。
      + Amazon ECR 儲存庫中的映像會使用完整的命名慣例 `registry/repository[:tag]` （例如 `{{aws_account_id}}.dkr.ecr.{{region}}.amazonaws.com``/{{my-web-app}}:{{latest}}`)。
      + Docker Hub 上官方儲存庫中的映像，使用的是單一名稱 (例如，`ubuntu` 或 `mongo`)。
      + Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如，`amazon/amazon-ecs-agent`)。
      + 其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如，`quay.io/assemblyline/ubuntu`)。

   1. 針對**資源需求**，請設定下列各項：

      1. 針對 **vCPUs**，選擇容器CPUs 數量。

      1. 針對**記憶體**，選擇容器的記憶體量。

      1. 針對 **GPU - *選用***，選擇容器的 GPUs 數量。

   1. 在 **User** (使用者) 中，輸入要在容器內使用的使用者名稱。

   1. 開啟**啟用唯讀檔案系統**以移除磁碟區的寫入存取權。

   1. 開啟**特權**，在主機執行個體上為任務容器提供更高的許可，類似於根使用者。

   1. 在**命令**中，將命令輸入 欄位做為其 **JSON** 字串陣列對等項。

      此參數會映射至 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Cmd` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `COMMAND` 參數。如需 Docker `CMD` 參數的詳細資訊，請參閱 [https://docs.docker.com/engine/reference/builder/\#cmd](https://docs.docker.com/engine/reference/builder/#cmd)。
**注意**  
您可以在 命令中使用參數替換和預留位置的預設值。如需詳細資訊，請參閱[參數](job_definition_parameters.md#parameters)。

   1. 對於**儲存庫登入資料 - *選用***，輸入包含登入資料之秘密的 ARN。

   1. 針對**環境變數 - *選用***，選擇**新增環境變數**以新增要傳遞至容器的環境變數。

   1. 在 **Linux 參數 - *選用***區段中：

      1. 開啟**啟用初始化程序**以在容器內執行初始化程序。

      1. 針對**共用記憶體大小**，輸入 /dev/shm 磁碟區的大小 (MiB)

      1. 針對**最大交換大小**，輸入容器可以使用的交換記憶體總量 （以 MiB 為單位）。

      1. 針對**交換輸入**介於 0 到 100 之間的值，表示容器的交換行為。如果您未指定值並啟用交換，則值預設為 60。

      1. 針對**裝置**，選擇**新增裝置**以新增裝置：

         1. 針對 **Container path (容器路徑)**，指定容器執行個體中的路徑，以公開對應到主機執行個體的裝置。如果您將此保留空白，則會在容器中使用主機路徑。

         1. 針對 **Host path (主機路徑)**，指定主機執行個體中的裝置的路徑。

         1. 針對**許可**，選擇要套用至裝置的一或多個許可。可用的許可為**讀取**、**寫入**和 **MKNOD**。

      1. 針對 **Tmpfs**，選擇**新增 tmpfs** 以新增`tmpfs`掛載。

   1. 
**注意**  
Firelens 記錄必須在專用容器中完成。若要設定 Firelens 記錄：  
在每個容器中，除了專用防火墻容器之外，請將**記錄驅動程式**設定為 `awsfirelens`
在您的 Firelens 容器中，設定記錄目的地的 **Firelens 組態 - 選用**和**記錄組態 - *選用*** 

      在 **Firelens 組態 - 選用**區段中：
**重要**  
AWS Batch 在非 MNP、非 FARGATE Amazon ECS 任務上強制執行`host`網路模式。Amazon ECS Firelens [需要根使用者](https://github.com/aws/aws-for-fluent-bit/blob/mainline/troubleshooting/debugging.md#amazon-ecs-firelens-root-is-required)。執行使用 `host` 網路模式的任務時，Amazon ECS 建議不要使用根使用者 (UID 0) 執行容器，[以提高安全性](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#network_mode)。因此，所有具有 Firelens 記錄的非 MNP、非 FARGATE ECS 任務都不符合安全最佳實務。

      1. 針對**類型**，選擇 `fluentd`或 `fluentbit`。

      1. 在**選項**中，輸入選項的名稱/值對。您可以使用新增**選項****來新增更多選項**。

   1.  在**記錄組態 - *選用***區段中：

      1. 對於**日誌驅動程式**，選擇要使用的日誌驅動程式。如需可用日誌驅動程式的詳細資訊，請參閱 [LogConfiguration：logDriver](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-logDriver)。
**注意**  
根據預設，會使用 `awslogs` 日誌驅動程式。

      1. 針對**選項**，選擇**新增選項**以新增選項。輸入名稱/值對，然後選擇**新增選項**。

      1. 針對**秘密**，選擇**新增秘密**。輸入名稱/值對，然後選擇**新增秘密**以新增秘密。
**提示**  
如需詳細資訊，請參閱 [LogConfiguration：secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)。

   1. 對於**掛載點 - *選用***，選擇**新增掛載點**以新增資料磁碟區的掛載點。您必須指定來源磁碟區和容器路徑。

   1. 針對**秘密 - *選用***，選擇**新增秘密**以新增秘密。然後，輸入名稱值對，然後選擇**新增秘密**。
**提示**  
如需詳細資訊，請參閱 [LogConfiguration：secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)。

   1. 針對 **Ulimits - *選用***，選擇**新增 ulimit** 以新增容器`ulimits`的值。輸入**名稱**、**軟性限制**和**硬性限制**值，然後選擇**新增 ulimit**。

   1. 對於**相依性 - *選用***，選擇**新增容器相依性**。選擇容器的名稱及其狀態，以判斷此容器何時啟動。

1. 如果您只設定一個容器，則必須選擇**新增容器**並完成設定新容器。否則，請選擇**下一步**以檢閱。