

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

# 任務定義
<a name="job_definitions"></a>

AWS Batch 任務定義會指定任務的執行方式。雖然每個任務都必須參考任務定義，但任務定義中指定的許多參數都可以在執行時間覆寫。

任務定義中指定的部分屬性包括：
+ 要與任務中的容器搭配使用的 Docker 映像。
+ 要與容器搭配使用vCPUs 數量和記憶體數量。
+ 容器啟動時應執行的命令。
+ 啟動時，應將哪些 （如果有） 環境變數傳遞至容器。
+ 應與容器搭配使用的任何資料磁碟區。
+ 您的任務應使用什麼 （如果有的話） IAM 角色來取得 AWS 許可。

**Topics**
+ [

# 建立單一節點任務定義
](create-job-definition.md)
+ [

# 建立多節點平行任務定義
](create-multi-node-job-def.md)
+ [

# 使用 ContainerProperties 的任務定義範本
](job-definition-template.md)
+ [

# 使用 EcsProperties 建立任務定義
](multi-container-jobs.md)
+ [

# 使用 awslogs 日誌驅動程式
](using_awslogs.md)
+ [

# 指定敏感資料
](specifying-sensitive-data.md)
+ [

# 任務的私有登錄檔身分驗證
](private-registry.md)
+ [

# Amazon EFS 磁碟區
](efs-volumes.md)
+ [

# 任務定義範例
](example-job-definitions.md)

# 建立單一節點任務定義
<a name="create-job-definition"></a>

您必須先建立任務定義 AWS Batch，才能在 中執行任務。此程序在單節點和多節點平行任務之間略有不同。本主題特別介紹如何為 AWS Batch 非多節點平行任務 （也稱為 *Gang 排程*) 的任務建立任務定義。

您可以在 Amazon Elastic Container Service 資源上建立多節點平行任務定義。如需詳細資訊，請參閱[建立多節點平行任務定義](create-multi-node-job-def.md)。

**Topics**
+ [

# 在 Amazon EC2 資源上建立單一節點任務定義
](create-job-definition-EC2.md)
+ [

# 在 Fargate 資源上建立單一節點任務定義
](create-job-definition-Fargate.md)
+ [

# 在 Amazon EKS 資源上建立單一節點任務定義
](create-job-definition-eks.md)
+ [

# 在 Amazon EC2 資源上建立具有多個容器的單一節點任務定義
](create-job-definition-single-node-multi-container.md)

# 在 Amazon EC2 資源上建立單一節點任務定義
<a name="create-job-definition-EC2"></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. 對於 **EC2 平台組態**，請關閉**啟用多節點平行**處理。

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

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

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

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

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

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

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

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

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

   1. 針對**映像**，選擇要用於任務的Docker映像。根據預設，Docker Hub 登錄檔中的映像為可用。您也可以用 `repository-url/image:tag` 指定其他儲存庫。名稱長度最多可達 225 個字元。它可以包含大小寫字母、數字、連字號 (-)、底線 (\$1)、冒號 (：)、斜線 (/) 和數字符號 (\$1)。此參數會映射至 [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. 在**命令**中，將命令輸入 欄位做為其 **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/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)。
**注意**  
您可以在命令中使用預設值來取代參數和預留位置。如需詳細資訊，請參閱[參數](job_definition_parameters.md#parameters)。

   1. （選用） 對於**執行角色**，指定 IAM 角色，授予 Amazon ECS 容器代理程式代表您進行 AWS API 呼叫的許可。此功能針對任務使用 Amazon ECS IAM 角色。如需詳細資訊，請參閱《[Amazon Elastic Container Service 開發人員指南》中的 Amazon ECS 任務執行 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)。 **

   1. 針對**任務角色組態**，選擇具有 AWS APIs 許可的 IAM 角色。此功能針對任務使用 Amazon ECS IAM 角色。如需詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》**中的[任務 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。
**注意**  
這裡只會顯示具有 **Amazon Elastic Container Service 任務角色**信任關係的角色。如需為您的 AWS Batch 任務建立 IAM 角色的詳細資訊，請參閱《*Amazon Elastic Container Service 開發人員指南*》中的[為您的任務建立 IAM 角色和政策](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。

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

1. 在**環境組態**區段中：

   1. 針對 **vCPUs**，輸入要預留給容器的 vCPUs 數量。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `CpuShares` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--cpu-shares` 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 vCPU。

   1. 針對**記憶體**，輸入容器可用的記憶體限制。如果您的容器嘗試超過您在此處指定的記憶體量，則容器會停止。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Memory` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--memory` 選項。您必須為單一工作指定至少 4 MiB 的記憶體。
**注意**  
若要最大化資源使用率，請為特定執行個體類型的任務排定記憶體優先順序。如需詳細資訊，請參閱[運算資源記憶體管理](memory-management.md)。

   1. 針對 ** GPUs 數量**，選擇要保留給容器的 GPUs 數量。

   1. （選用） 對於**環境變數**，選擇**新增環境變數**，將環境變數新增為名稱/值對。這些變數會傳遞至容器。

   1. （選用） 針對**秘密**，選擇**新增秘密**，將秘密新增為名稱/值對。這些秘密會在容器中公開。如需詳細資訊，請參閱 [LogConfiguration：secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)。

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

1. 在 **Linux 組態**區段中：

   1. 在 **User** (使用者) 中，輸入要在容器內使用的使用者名稱。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `User` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--user` 選項。

   1. （選用） 若要在主機執行個體上提升任務容器的許可 （類似於`root`使用者），請將**特權**滑桿拖曳至右側。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Privileged` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--privileged` 選項。

   1. （選用） 開啟**啟用初始化程序**以在容器內執行`init`程序。此程序會轉送訊號並接收程序。

1. （選用） 在**檔案系統組態**區段中：

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

   1. 針對**共用記憶體大小**，輸入`/dev/shm`磁碟區的大小 （以 MiB 為單位）。

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

   1. 針對**交換輸入**介於 0 到 100 之間的值，以表示容器的交換行為。如果您未指定值並啟用交換，則值預設為 60。如需詳細資訊，請參閱 [LinuxParameters：swappiness](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html#Batch-Type-LinuxParameters-swappiness)。

   1. （選用） 展開**其他組態**。

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

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

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

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

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

   1. （選用） 對於**磁碟區組態**，選擇**新增磁碟區**以建立要傳遞至容器的磁碟區清單。輸入磁碟區**的名稱**和**來源路徑**，然後選擇**新增磁碟區**。您也可以選擇開啟**啟用 EFS**。

   1. （選用） 對於**掛載點**，選擇**新增掛載點組態**以新增資料磁碟區的掛載點。您必須指定來源磁碟區和容器路徑。這些掛載點會傳遞至容器執行個體Docker daemon上的 。您也可以選擇將磁碟區設為**唯讀**。

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

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. （選用） 在**記錄組態**區段中：

   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. 針對**任務定義檢閱**，檢閱組態步驟。如需變更，請選擇 **Edit** (編輯)。完成後，請選擇**建立任務定義**。

# 在 Fargate 資源上建立單一節點任務定義
<a name="create-job-definition-Fargate"></a>

完成下列步驟，以在 AWS Fargate 資源上建立單一節點任務定義。

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

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

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

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

1. 選擇**建立**。

1. 針對**協調類型**，選擇 **Fargate**。如需詳細資訊，請參閱[Fargate 運算環境](fargate.md)。

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

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

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

1. （選用） 展開**標籤**，然後選擇**新增標籤**以將標籤新增至資源。開啟**傳播標籤**，從任務和任務定義傳播標籤。

1. 在 **Fargate 平台組態**區段中：

   1. 針對**執行期平台**，選擇運算環境架構。

   1. 針對**作業系統系列**，選擇運算環境的作業系統。

   1. 針對 **CPU 架構**，選擇 vCPU 架構。

   1. 對於 **Fargate 平台版本**，請輸入 `LATEST`或特定執行期環境版本。

   1. （選用） 開啟**指派公有 IP**，將公有 IP 地址指派給 Fargate 任務網路介面。對於在私有子網路中執行以將傳出流量傳送至網際網路的任務，私有子網路需要連接 NAT 閘道，才能將請求路由至網際網路。您可能想要這麼做，以便提取容器映像。如需詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》**中的 [Amazon ECS 任務聯網](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)。

   1. （選用） 對於**暫時性儲存**，輸入要配置給任務的暫時性儲存量。暫時性儲存量必須介於 21 GiB 和 200 GiB 之間。根據預設，如果您未輸入值，則會配置 20 GiB 的暫時性儲存。
**注意**  
暫時性儲存需要 Fargate 平台 1.4 版或更新版本。

   1. 針對**執行角色**，指定 IAM 角色，授予 Amazon ECS 容器和 Fargate 代理程式代表您進行 AWS API 呼叫的許可。此功能使用 Amazon ECS IAM 角色執行任務功能。如需包括組態先決條件的詳細資訊，請參閱《[Amazon Elastic Container Service 開發人員指南》中的 Amazon ECS 任務執行 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)。 **

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

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

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

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

   1. 針對**映像**，選擇要用於任務的 Docker 映像。根據預設，Docker Hub 登錄檔中的映像可供使用。您也可以用 `repository-url/image:tag` 指定其他儲存庫。名稱長度上限為 225 個字元。可包含大寫及小寫字母、數字、連字號 (-)、底線 (\$1)、冒號 (:)、句點 (.)、斜線 (/) 和數字符號 (\$1)。此參數會映射至 [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. 在**命令**中，將命令輸入 欄位做為其 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/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)。
**注意**  
您可以在命令中使用預設值來取代參數和預留位置。如需詳細資訊，請參閱[參數](job_definition_parameters.md#parameters)。

   1. （選用） 將參數新增至任務定義做為名稱/值映射，以覆寫任務定義預設值。若要新增參數：

      1. 針對**參數**，選擇**新增參數**，輸入名稱/值對，然後選擇**新增參數**。
**重要**  
如果您選擇**新增參數**，您必須設定至少一個參數，或選擇**移除參數**

   1. 在**環境組態**區段中：

      

      1. 針對**任務角色組態**，選擇具有 AWS APIs 許可的 IAM 角色。此功能使用 Amazon ECS IAM 角色執行任務功能。如需詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》**中的[任務 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。
**注意**  
這裡只會顯示具有 **Amazon Elastic Container Service 任務角色**信任關係的角色。如需如何為您的 AWS Batch 任務建立 IAM 角色的詳細資訊，請參閱《*Amazon Elastic Container Service 開發人員指南*》中的[為您的任務建立 IAM 角色和政策](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。

      1. 針對 **vCPUs**，輸入要預留給容器的 vCPUs 數量。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `CpuShares` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--cpu-shares` 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 vCPU。

      1. 針對**記憶體**，輸入容器可用的記憶體限制。如果容器嘗試使用超過此處指定的記憶體，容器便會終止。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Memory` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--memory` 選項。您必須為單一工作指定至少 4 MiB 的記憶體。

         如果您使用 GuardDuty 執行期監控，GuardDuty 安全代理程式會有些微的記憶體負荷。因此，記憶體限制必須包含 GuardDuty 安全代理程式的大小。如需有關 GuardDuty 安全代理程式記憶體限制的資訊，請參閱《*GuardDuty 使用者指南*》中的 [CPU 和記憶體限制](https://docs.aws.amazon.com/guardduty/latest/ug/prereq-runtime-monitoring-ecs-support.html#ecs-runtime-agent-cpu-memory-limits)。如需有關最佳實務的資訊，請參閱《*Amazon ECS 開發人員指南*》中的[如何在啟用執行期監控之後修復 Fargate 任務上的記憶體不足錯誤](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-troubleshooting.html#memory-error)。
**注意**  
若要最大化資源使用率，請為特定執行個體類型的任務排定記憶體的優先順序。如需詳細資訊，請參閱[運算資源記憶體管理](memory-management.md)。

   1. （選用） 對於**環境變數**，選擇**新增環境變數**，將環境變數新增為名稱/值對。這些變數會傳遞至容器。

   1. （選用） 對於**秘密**，選擇**新增秘密**，將秘密新增為名稱/值對。這些秘密會在容器中公開。如需詳細資訊，請參閱 [LogConfiguration：secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)。

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

1. （選用） 在** Linux 組態**區段中：

   1. 針對**使用者**，輸入要在容器內使用的使用者名稱。

   1. 開啟**啟用初始化程序**以在容器內執行初始化程序。此程序會轉送訊號並接收程序。

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

   1. （選用） 展開**其他組態**。

   1. 針對**掛載點組態**，選擇**新增掛載點組態**以新增資料磁碟區的掛載點。您必須指定來源磁碟區和容器路徑。這些掛載點會傳遞至容器執行個體Docker daemon上的 。

   1. 針對**磁碟區組態**，選擇**新增磁碟區**以建立要傳遞至容器的磁碟區清單。輸入磁碟區**的名稱**和**來源路徑**，然後選擇**新增磁碟區**。

   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. 在**記錄組態**區段中：

      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. 對於**任務定義檢閱**，請檢閱組態步驟。如需變更，請選擇 **Edit** (編輯)。完成後，請選擇**建立任務定義**。

# 在 Amazon EKS 資源上建立單一節點任務定義
<a name="create-job-definition-eks"></a>

請完成下列步驟，以在 Amazon Elastic Kubernetes Service (Amazon EKS) 上建立單一節點任務定義。

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

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

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

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

1. 選擇**建立**。

1. 針對**協調類型**，選擇 **Elastic Kubernetes Service (EKS)**。

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

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

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

1. （選用） 展開**標籤**，然後選擇**新增標籤**以將標籤新增至資源。

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

1. 在 **EKS pod 屬性**區段中：

   1. 針對**服務帳戶名稱**，輸入為在 中執行的程序提供身分的帳戶pod。

   1. 開啟**主機網路**以使用Kubernetespod網路模型，並為傳入連線開啟接聽連接埠。僅針對傳出通訊關閉此設定。

   1. 針對 **DNS 政策**，選擇下列其中一項：
      + **無值 (null)** – pod忽略Kubernetes環境中的 DNS 設定。
      + **預設** – pod 會繼承其執行所在節點的名稱解析度組態。
**注意**  
如果未指定 DNS 政策，**預設**不會是預設 DNS 政策。而是使用 **ClusterFirst**。
      + **ClusterFirst** – 任何與設定之叢集網域尾碼不相符的 DNS 查詢都會轉寄至繼承自節點的上游名稱伺服器。
      + **ClusterFirstWithHostNet** – 如果**主機網路**開啟，則使用此選項。

   1. （選用） 對於**磁碟區**，選取**新增磁碟區**，然後：

      1. 為您的磁碟區新增**名稱**。

      1. （選用） 新增**主機上目錄的主機路徑**。

      1. （選用） 新增**中型**和**大小限制**以設定 [Kubernetes emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)。

      1. （選用） 提供 Pod 的**秘密名稱**，以及秘密是否為**選用**。

      1. （選用） 定義**宣告名稱**，將 Kubernetes [持久性磁碟區宣告](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)連接至 Pod，以及是否為**唯讀**。

   1. （選用） 對於 **Pod 標籤**，選擇**新增 Pod 標籤**，然後輸入名稱/值對。
**重要**  
Pod 標籤的字首不能包含 `kubernetes.io/`、 `k8s.io/`或 `batch.amazonaws.com/`。

   1. （選用） 對於 **Pod 註釋**，選擇**新增註釋**，然後輸入名稱/值對。
**重要**  
Pod 註釋的字首不能包含 `kubernetes.io/`、 `k8s.io/`或 `batch.amazonaws.com/`。

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

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

      1. 在**名稱**中，輸入容器的唯一名稱。名稱必須以字母或數字開頭，長度最多可達 63 個字元。它可以包含大小寫字母、數字和連字號 (-)。

      1. 針對**映像**，選擇要用於任務的Docker映像。根據預設，Docker Hub 登錄檔中的映像可供使用。您也可以用 `repository-url/image:tag` 指定其他儲存庫。名稱長度上限為 255 個字元。可包含大寫及小寫字母、數字、連字號 (-)、底線 (\$1)、冒號 (:)、句點 (.)、斜線 (/) 和數字符號 (\$1)。此參數會映射至 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段`Image`中的 ，以及 的 `IMAGE` 參數 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)
**注意**  
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. （選用） 針對**命令**，輸入要傳遞至容器的JSON命令。

      1. （選用） 對於**引數**，輸入要傳遞至容器的引數。如果未提供 引數，則會使用容器映像命令。

   1. （選用） 您可以將參數新增至任務定義做為名稱值映射，以覆寫任務定義預設值。若要新增參數：

      1. 針對**參數**，輸入名稱值對，然後選擇**新增參數**。
**重要**  
如果您選擇**新增參數**，您必須至少設定一個參數，或選擇**移除參數**

   1. 在**環境組態**區段中：

      1. 針對 **vCPUs**，輸入要保留給容器的 vCPUs 數量。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `CpuShares` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--cpu-shares` 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 vCPU。

      1. 針對**記憶體**，輸入容器可用的記憶體限制。如果容器嘗試使用超過此處指定的記憶體，容器便會終止。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Memory` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--memory` 選項。您必須為單一工作指定至少 4 MiB 的記憶體。
**注意**  
若要最大化資源使用率，請為特定執行個體類型的任務排定記憶體的優先順序。如需詳細資訊，請參閱[運算資源記憶體管理](memory-management.md)。

   1. （選用） 對於**環境變數**，選擇**新增環境變數**，將環境變數新增為名稱/值對。這些變數會傳遞至容器。

   1. （選用） 對於**磁碟區掛載**：

      1. 選擇**新增磁碟區掛載**。

      1. 輸入**名稱**，然後在掛載磁碟區的容器中輸入**掛載路徑**。輸入 **SubPath** 以指定參考磁碟區內的子路徑，而不是其根路徑。

      1. 選擇**唯讀**以移除磁碟區的寫入許可。

      1. 選擇**新增磁碟區掛載**。

   1. （選用） 對於以**使用者身分執行**，輸入使用者 ID 以執行容器程序。
**注意**  
使用者 ID 必須存在於映像中，容器才能執行。

   1. （選用） 對於**以群組身分執行**，輸入群組 ID 以執行容器程序執行時間。
**注意**  
群組 ID 必須存在於映像中，容器才能執行。

   1. （選用） 若要在主機執行個體上提升任務容器的許可 （類似於`root`使用者），請將**特權**滑桿拖曳至右側。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Privileged` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--privileged` 選項。

   1. （選用） 開啟**唯讀根檔案系統**，移除根檔案系統的寫入存取權。

   1. （選用） 開啟**以非根使用者的身分執行**，以非根使用者的pod身分執行 中的容器。
**注意**  
如果已開啟**以非根身分執行**， 會在執行時間kubelet驗證映像，以確認映像未以 UID 0 執行。

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

1. 針對**任務定義檢閱**，檢閱組態步驟。如需變更，請選擇 **Edit** (編輯)。完成後，請選擇**建立任務定義**。

# 在 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)。

   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 個字元。它可以包含大小寫字母、數字、連字號 (-)、底線 (\$1)、冒號 (：)、斜線 (/) 和數字符號 (\$1)。此參數會映射至 [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/\$1cmd](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. 如果您只設定一個容器，則必須選擇**新增容器**並完成設定新容器。否則，請選擇**下一步**以檢閱。

# 建立多節點平行任務定義
<a name="create-multi-node-job-def"></a>

您必須先建立任務定義 AWS Batch，才能在 中執行任務。此程序在單節點和多節點平行任務之間略有不同。本主題特別介紹如何為 AWS Batch 多節點平行任務 （也稱為 *Gang 排程*) 建立任務定義。如需詳細資訊，請參閱[多節點平行任務](multi-node-parallel-jobs.md)。

**注意**  
AWS Fargate 不支援多節點平行任務。

**Topics**
+ [

# 教學課程：在 Amazon EC2 資源上建立多節點平行任務定義
](multi-node-job-def-ec2.md)

# 教學課程：在 Amazon EC2 資源上建立多節點平行任務定義
<a name="multi-node-job-def-ec2"></a>

在 Amazon Elastic Compute Cloud (Amazon EC2) 資源上建立多節點平行任務定義。

**注意**  
若要建立*單一節點*任務定義，請參閱 [在 Amazon EC2 資源上建立單一節點任務定義](create-job-definition-EC2.md)。

**若要在 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. 針對**啟用多節點平行**，開啟多節點平行。

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

1. （選用） 針對**執行逾時**，指定您希望任務嘗試執行的秒數上限。如果嘗試超過逾時持續時間，則會停止嘗試並移至 `FAILED` 狀態。如需詳細資訊，請參閱[任務逾時](job_timeouts.md)。

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

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

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

1. （選用） 展開**標籤**，然後選擇**新增標籤**以將標籤新增至資源。輸入索引鍵和選用值，然後選擇**新增標籤**。您也可以開啟**傳播標籤**，將標籤從任務和任務定義傳播到 Amazon ECS 任務。

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

1. 針對 **Number of nodes (節點數)**，請輸入要在您任務中使用的總節點數量。

1. 針對 **Main node (主要節點)**，請輸入要用於主要節點的節點索引。預設的主要節點索引為 `0`。

1. 針對**執行個體類型**，選擇執行個體類型。
**注意**  
您選擇的執行個體類型會套用至所有節點。

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

1. 在**節點範圍**區段中：

   1. 選取**新增節點範圍**。這會建立**節點範圍**區段。

   1. 針對 **Target nodes (目標節點)**，請使用 `range_start:range_end` 標記法指定您節點群組的範圍。

      您可以為您為任務指定的節點建立最多五個節點範圍。節點範圍會使用節點的索引值，且節點索引會從 0 開始。請確定最終節點群組的範圍結束索引值小於您指定的節點數量。例如，假設您指定了 10 個節點，而且您想要使用單一節點群組。然後，您的結束範圍為 9。

   1. 針對**映像**，選擇要用於任務的Docker映像。根據預設，Docker Hub 登錄檔中的映像為可用。您也可以用 `repository-url/image:tag` 指定其他儲存庫。名稱長度上限為 225 個字元。它可以包含大小寫字母、數字、連字號 (-)、底線 (\$1)、冒號 (：)、斜線 (/) 和數字符號 (\$1)。此參數會映射至 [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. 在**命令**中，將命令輸入 欄位做為其 **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/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)。
**注意**  
您可以在命令中使用預設值來取代參數和預留位置。如需詳細資訊，請參閱[參數](job_definition_parameters.md#parameters)。

   1. 在 **vCPU** 中，指定保留給容器的 vCPU 數量。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `CpuShares` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--cpu-shares` 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 vCPU。

   1. 在 **Memory** (記憶體) 中，指定提供給任務容器使用的記憶體硬性限制 (MiB)。如果容器嘗試使用超過此處指定的記憶體，容器便會終止。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Memory` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--memory` 選項。您必須為單一工作指定至少 4 MiB 的記憶體。
**注意**  
若要最大化資源使用率，您可以為特定執行個體類型提供盡可能多的記憶體。如需詳細資訊，請參閱[運算資源記憶體管理](memory-management.md)。

   1. （選用） 針對 ** GPUs 數量**，指定任務使用的 GPUs 數量。任務會在具有指定 GPU 數量的容器上執行，這些 GPUs 會固定到該容器。

   1. （選用） 對於**任務角色**，您可以指定 IAM 角色，為任務中的容器提供使用 AWS APIs許可。此功能使用 Amazon ECS IAM 角色執行任務功能。如需包含組態先決條件的詳細資訊，請參閱《*Amazon Elastic Container Service 開發人員指南*》中的[任務的 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。
**注意**  
對於在 Fargate 資源上執行的任務，需要任務角色。
**注意**  
這裡只會顯示具有 **Amazon Elastic Container Service 任務角色**信任關係的角色。如需為您的 AWS Batch 任務建立 IAM 角色的詳細資訊，請參閱《*Amazon Elastic Container Service 開發人員指南*》中的[為您的任務建立 IAM 角色和政策](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。

   1. （選用） 對於**執行角色**，指定 IAM 角色，授予 Amazon ECS 容器代理程式代表您進行 AWS API 呼叫的許可。此功能使用 Amazon ECS IAM 角色執行任務功能。如需詳細資訊，請參閱《[Amazon Elastic Container Service 開發人員指南》中的 Amazon ECS 任務執行 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)。 **

1. （選用） 展開**其他組態**：

   1. 針對**環境變數**，選擇**新增環境變數**，將環境變數新增為名稱/值對。這些變數會傳遞至容器。

   1. 對於**任務角色組態**，您可以指定 IAM 角色，為任務中的容器提供使用 AWS APIs許可。此功能使用 Amazon ECS IAM 角色執行任務功能。如需包含組態先決條件的詳細資訊，請參閱《*Amazon Elastic Container Service 開發人員指南*》中的[任務的 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。
**注意**  
對於在 Fargate 資源上執行的任務，需要任務角色。
**注意**  
這裡只會顯示具有 **Amazon Elastic Container Service 任務角色**信任關係的角色。如需如何為您的 AWS Batch 任務建立 IAM 角色的詳細資訊，請參閱《*Amazon Elastic Container Service 開發人員指南*》中的[為您的任務建立 IAM 角色和政策](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。

   1. 針對**執行角色**，指定 IAM 角色，授予 Amazon ECS 容器代理程式代表您進行 AWS API 呼叫的許可。此功能使用 Amazon ECS IAM 角色執行任務功能。如需詳細資訊，請參閱《[Amazon Elastic Container Service 開發人員指南》中的 Amazon ECS 任務執行 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)。 **

1. 在**安全組態**區段中：

   1. （選用） 若要在主機執行個體上為任務的容器提供更高的權限 （類似於`root`使用者），請開啟**特權**。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Privileged` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--privileged` 選項。

   1. （選用） 對於**使用者**，輸入要在容器內使用的使用者名稱。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `User` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--user` 選項。

   1. （選用） 針對**秘密**，選擇**新增秘密**，將秘密新增為名稱/值對。這些秘密會在容器中公開。如需詳細資訊，請參閱 [LogConfiguration：secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)。

1. 在 **Linux 組態**區段中：

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

   1. （選用） 開啟**啟用init程序**以在容器內執行`init`程序。此程序會轉送訊號並接收程序。

   1. 針對**共用記憶體大小**，輸入`/dev/shm`磁碟區的大小 （以 MiB 為單位）。

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

   1. 針對**交換輸入**介於 0 到 100 之間的值，表示容器的交換行為。如果您未指定值並啟用交換，則值預設為 60。如需詳細資訊，請參閱 [LinuxParameters：swappiness](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html#Batch-Type-LinuxParameters-swappiness)。

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

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

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

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

1. （選用） 對於**掛載點**，選擇**新增掛載點組態**以新增資料磁碟區的掛載點。您必須指定來源磁碟區和容器路徑。這些掛載點會傳遞至容器執行個體上的Docker協助程式。您也可以選擇將磁碟區設為**唯讀**。

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

1. （選用） 針對**磁碟區組態**，選擇**新增磁碟區**以建立要傳遞至容器的磁碟區清單。輸入磁碟區**的名稱**和**來源路徑**，然後選擇**新增磁碟區**。您也可以選擇開啟**啟用 EFS**。

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

1. 在**任務屬性**區段中：

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

   1. 
**重要**  
若要使用 **ECS 執行命令**，您的運算環境必須符合[多節點平行任務的運算環境考量](mnp-ce.md)。

      選擇**啟用 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. （選用） 在**記錄組態**區段中：

   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. 針對**任務定義檢閱**，檢閱組態步驟。如需變更，請選擇 **Edit** (編輯)。完成後，請選擇**建立任務定義**。

# 使用 ContainerProperties 的任務定義範本
<a name="job-definition-template"></a>

以下是包含單一容器的空任務定義範本。您可以使用此範本來建立任務定義，然後將其儲存至 檔案，並搭配 AWS CLI `--cli-input-json`選項使用。如需這些參數的詳細資訊，請參閱 [JobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_JobDefinition.html)。

**注意**  
您可以使用下列 AWS CLI 命令產生單一容器任務定義範本：  

```
$ aws batch register-job-definition --generate-cli-skeleton
```

```
{
    "jobDefinitionName": "",
    "type": "container",
    "parameters": {
        "KeyName": ""
    },
    "schedulingPriority": 0,
    "containerProperties": {
        "image": "",
        "vcpus": 0,
        "memory": 0,
        "command": [
            ""
        ],
        "jobRoleArn": "",
        "executionRoleArn": "",
        "volumes": [
            {
                "host": {
                    "sourcePath": ""
                },
                "name": "",
                "efsVolumeConfiguration": {
                    "fileSystemId": "",
                    "rootDirectory": "",
                    "transitEncryption": "ENABLED",
                    "transitEncryptionPort": 0,
                    "authorizationConfig": {
                        "accessPointId": "",
                        "iam": "DISABLED"
                    }
                }
            }
        ],
        "environment": [
            {
                "name": "",
                "value": ""
            }
        ],
        "mountPoints": [
            {
                "containerPath": "",
                "readOnly": true,
                "sourceVolume": ""
            }
        ],
        "readonlyRootFilesystem": true,
        "privileged": true,
        "ulimits": [
            {
                "hardLimit": 0,
                "name": "",
                "softLimit": 0
            }
        ],
        "user": "",
        "instanceType": "",
        "resourceRequirements": [
            {
                "value": "",
                "type": "MEMORY"
            }
        ],
        "linuxParameters": {
            "devices": [
                {
                    "hostPath": "",
                    "containerPath": "",
                    "permissions": [
                        "WRITE"
                    ]
                }
            ],
            "initProcessEnabled": true,
            "sharedMemorySize": 0,
            "tmpfs": [
                {
                    "containerPath": "",
                    "size": 0,
                    "mountOptions": [
                        ""
                    ]
                }
            ],
            "maxSwap": 0,
            "swappiness": 0
        },
        "logConfiguration": {
            "logDriver": "syslog",
            "options": {
                "KeyName": ""
            },
            "secretOptions": [
                {
                    "name": "",
                    "valueFrom": ""
                }
            ]
        },
        "secrets": [
            {
                "name": "",
                "valueFrom": ""
            }
        ],
        "networkConfiguration": {
            "assignPublicIp": "DISABLED"
        },
        "fargatePlatformConfiguration": {
            "platformVersion": ""
        }
    },
    "nodeProperties": {
        "numNodes": 0,
        "mainNode": 0,
        "nodeRangeProperties": [
            {
                "targetNodes": "",
                "container": {
                    "image": "",
                    "vcpus": 0,
                    "memory": 0,
                    "command": [
                        ""
                    ],
                    "jobRoleArn": "",
                    "executionRoleArn": "",
                    "volumes": [
                        {
                            "host": {
                                "sourcePath": ""
                            },
                            "name": "",
                            "efsVolumeConfiguration": {
                                "fileSystemId": "",
                                "rootDirectory": "",
                                "transitEncryption": "DISABLED",
                                "transitEncryptionPort": 0,
                                "authorizationConfig": {
                                    "accessPointId": "",
                                    "iam": "ENABLED"
                                }
                            }
                        }
                    ],
                    "environment": [
                        {
                            "name": "",
                            "value": ""
                        }
                    ],
                    "mountPoints": [
                        {
                            "containerPath": "",
                            "readOnly": true,
                            "sourceVolume": ""
                        }
                    ],
                    "readonlyRootFilesystem": true,
                    "privileged": true,
                    "ulimits": [
                        {
                            "hardLimit": 0,
                            "name": "",
                            "softLimit": 0
                        }
                    ],
                    "user": "",
                    "instanceType": "",
                    "resourceRequirements": [
                        {
                            "value": "",
                            "type": "MEMORY"
                        }
                    ],
                    "linuxParameters": {
                        "devices": [
                            {
                                "hostPath": "",
                                "containerPath": "",
                                "permissions": [
                                    "WRITE"
                                ]
                            }
                        ],
                        "initProcessEnabled": true,
                        "sharedMemorySize": 0,
                        "tmpfs": [
                            {
                                "containerPath": "",
                                "size": 0,
                                "mountOptions": [
                                    ""
                                ]
                            }
                        ],
                        "maxSwap": 0,
                        "swappiness": 0
                    },
                    "logConfiguration": {
                        "logDriver": "awslogs",
                        "options": {
                            "KeyName": ""
                        },
                        "secretOptions": [
                            {
                                "name": "",
                                "valueFrom": ""
                            }
                        ]
                    },
                    "secrets": [
                        {
                            "name": "",
                            "valueFrom": ""
                        }
                    ],
                    "networkConfiguration": {
                        "assignPublicIp": "DISABLED"
                    },
                    "fargatePlatformConfiguration": {
                        "platformVersion": ""
                    }
                }
            }
        ]
    },
    "retryStrategy": {
        "attempts": 0,
        "evaluateOnExit": [
            {
                "onStatusReason": "",
                "onReason": "",
                "onExitCode": "",
                "action": "RETRY"
            }
        ]
    },
    "propagateTags": true,
    "timeout": {
        "attemptDurationSeconds": 0
    },
    "tags": {
        "KeyName": ""
    },
    "platformCapabilities": [
        "EC2"
    ],
    "eksProperties": {
        "podProperties": {
            "serviceAccountName": "",
            "hostNetwork": true,
            "dnsPolicy": "",
            "containers": [
                {
                    "name": "",
                    "image": "",
                    "imagePullPolicy": "",
                    "command": [
                        ""
                    ],
                    "args": [
                        ""
                    ],
                    "env": [
                        {
                            "name": "",
                            "value": ""
                        }
                    ],
                    "resources": {
                        "limits": {
                            "KeyName": ""
                        },
                        "requests": {
                            "KeyName": ""
                        }
                    },
                    "volumeMounts": [
                        {
                            "name": "",
                            "mountPath": "",
                            "readOnly": true
                        }
                    ],
                    "securityContext": {
                        "runAsUser": 0,
                        "runAsGroup": 0,
                        "privileged": true,
                        "readOnlyRootFilesystem": true,
                        "runAsNonRoot": true
                    }
                }
            ],
            "volumes": [
                {
                    "name": "",
                    "hostPath": {
                        "path": ""
                    },
                    "emptyDir": {
                        "medium": "",
                        "sizeLimit": ""
                    },
                    "secret": {
                        "secretName": "",
                        "optional": true
                    }
                }
            ]
        }
    }
}
```

# ContainerProperties 的任務定義參數
<a name="job_definition_parameters"></a>

使用 的任務定義[https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html)分為幾個部分：
+ 任務定義名稱
+ 任務定義的類型
+ 參數替換預留位置預設值
+ 任務的容器屬性
+ 在 Amazon EKS 資源上執行之任務所需的任務定義 Amazon EKS 屬性
+ 多節點平行任務所需的節點屬性
+ 在 Fargate 資源上執行的任務所需的平台功能
+ 任務定義的預設標籤傳播詳細資訊
+ 任務定義的預設重試策略
+ 任務定義的預設排程優先順序
+ 任務定義的預設標籤
+ 任務定義的預設逾時

**Contents**
+ [

## 任務定義名稱
](#jobDefinitionName)
+ [

## 類型
](#type)
+ [

## 參數
](#parameters)
+ [

## 容器屬性
](#containerProperties)
+ [

## Amazon EKS 屬性
](#job-definition-parameters-eks-properties)
+ [

## 平台功能
](#job-definition-parameters-platform-capabilities)
+ [

## 傳播標籤
](#job-definition-parameters-propagate-tags)
+ [

## 節點屬性
](#nodeProperties)
+ [

## 重試策略
](#retryStrategy)
+ [

## 排程優先順序
](#job-definition-parameters-schedulingPriority)
+ [

## Tags (標籤)
](#job-definition-parameters-tags)
+ [

## 逾時
](#timeout)

## 任務定義名稱
<a name="jobDefinitionName"></a>

`jobDefinitionName`  
您必須在註冊任務定義時指定名稱。名稱長度上限為 128 個字元。可以包含大小寫字母、數字、連字號 (-) 和底線 (\$1)。以該名稱註冊的第一個任務定義會獲得 1 的修訂。後續使用該名稱註冊的任何任務定義，將取得遞增的修訂版號碼。  
類型：字串  
必要：是

## 類型
<a name="type"></a>

`type`  
註冊任務定義時，需指定任務類型。如果任務在 Fargate 資源上執行，`multinode`則不支援 。如需多節點平行任務的詳細資訊，請參閱「[建立多節點平行任務定義](create-multi-node-job-def.md)」。  
類型：字串  
有效值：`container` \$1 `multinode`  
必要：是

## 參數
<a name="parameters"></a>

`parameters`  
當您提交任務時，您可以指定取代預留位置的參數，或覆寫預設任務定義參數。任務提交要求中的參數，優先於任務定義中的預設值。這表示您可以針對使用相同格式的多個任務使用相同的任務定義。您也可以在提交時以程式設計方式變更命令中的值。  
類型：字串到字串映射  
必要：否  
註冊任務定義時，您可以在任務容器屬性的 `command` 欄位使用參數替換預留位置。語法如下。  

```
"command": [
    "ffmpeg",
    "-i",
    "Ref::inputfile",
    "-c",
    "Ref::codec",
    "-o",
    "Ref::outputfile"
]
```
在上述範例中，命令中有 `Ref::inputfile`、`Ref::codec` 和 `Ref::outputfile` 參數替換預留位置。您可以使用任務定義中的 `parameters` 物件來設定這些預留位置的預設值。例如，若要設定 `Ref::codec` 預留位置的預設值，您應在任務定義中指定下列各項：  

```
"parameters" : {"codec" : "mp4"}
```
提交此任務定義以執行時，容器 命令中的`Ref::codec`引數會取代為預設值 `mp4`。

## 容器屬性
<a name="containerProperties"></a>

當您註冊任務定義時，請指定在放置任務時，在容器執行個體上傳遞至 Docker 協助程式的容器屬性清單。任務定義允許使用以下的容器屬性。針對單節點任務，這些容器屬性會設定在任務定義層級。針對多節點平行任務，每個節點群組的容器屬性會設定在 [節點屬性](#nodeProperties) 層級。

`command`  
傳遞至容器的命令。此參數會映射至 [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/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)。  

```
"command": ["string", ...]
```
類型：字串陣列  
必要：否

`environment`  
傳遞至容器的環境變數。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Env` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--env` 選項。  
不建議您對敏感資訊 (例如憑證) 使用純文字環境變數。
環境變數開頭不得為 `AWS_BATCH`。此命名慣例會保留給 AWS Batch 服務所設定的變數。
類型：金鑰值對的陣列  
必要：否    
`name`  
環境變數的名稱。  
類型：字串  
必要：是，使用 `environment` 時。  
`value`  
環境變數的值。  
類型：字串  
必要：是，使用 `environment` 時。

```
"environment" : [
    { "name" : "envName1", "value" : "envValue1" },
    { "name" : "envName2", "value" : "envValue2" }
]
```

`executionRoleArn`  
註冊任務定義時，您可以指定 IAM 角色。此角色為 Amazon ECS 容器代理程式提供代表您呼叫其相關聯政策中指定之 API 動作的許可。在 Fargate 資源上執行的任務必須提供執行角色。如需詳細資訊，請參閱[AWS Batch IAM 執行角色](execution-IAM-role.md)。  
類型：字串  
必要：否

`fargatePlatformConfiguration`  
在 Fargate 資源上執行之任務的平台組態。在 EC2 資源上執行的任務不得指定此參數。  
類型：[FargatePlatformConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_FargatePlatformConfiguration.html) 物件  
必要：否    
`platformVersion`  
 AWS Fargate 平台版本用於 任務，或使用 AWS Fargate 平台`LATEST`的最新核准版本。  
類型：字串  
預設：`LATEST`  
必要：否

`image`  
用來啟動任務的映像。此字串會直接傳遞至 Docker 常駐程式。根據預設，Docker Hub 登錄檔中的映像為可用。您也可以用 `repository-url/image:tag` 指定其他儲存庫。允許最多 255 個字元 (大小寫)、數字、連字號、底線、等號、句號、正斜線、井號。此參數會映射至 [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`)。
類型：字串  
必要：是

`instanceType`  
用於多節點平行任務的執行個體類型。所有節點平行任務中的所有節點群組皆必須使用相同的執行個體類型。此參數不適用於單一節點容器任務或在 Fargate 資源上執行的任務。  
類型：字串  
必要：否

`jobRoleArn`  
註冊任務定義時，您可以指定 IAM 角色。角色提供任務容器權限，允許其代表您呼叫相關聯政策中指定的 API 動作。如需詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》**中的[任務 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。  
類型：字串  
必要：否

`linuxParameters`  
Linux 特定的修改，會套用到容器，例如用於裝置映射的詳細資訊。  

```
"linuxParameters": {
    "devices": [
        {
            "hostPath": "string",
            "containerPath": "string",
            "permissions": [
                "READ", "WRITE", "MKNOD"
            ]
        }
    ],
    "initProcessEnabled": true|false,
    "sharedMemorySize": 0,
    "tmpfs": [
        {
            "containerPath": "string",
            "size": integer,
            "mountOptions": [
                "string"
            ]
        }
    ],
    "maxSwap": integer,
    "swappiness": integer
}
```
類型：[LinuxParameters](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html) 物件  
必要：否    
`devices`  
映射到容器的裝置列表。此參數對應到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) (建立容器) 一節中的 `Devices`，以及 [Docker run](https://docs.docker.com/engine/reference/run/) 的 `--device` 選項。  
此參數不適用於在 Fargate 資源上執行的任務。
類型：[Device](https://docs.aws.amazon.com/batch/latest/APIReference/API_Device.html) 物件的陣列  
必要：否    
`hostPath`  
主機容器執行個體中可用裝置的路徑。  
類型：字串  
必要：是  
`containerPath`  
裝置在容器中公開的路徑。如果未指定，裝置會在與主機路徑相同的路徑中公開。  
類型：字串  
必要：否  
`permissions`  
容器中的裝置的許可。如果未指定，則許可會設為 `READ`、 `WRITE`和 `MKNOD`。  
類型：字串陣列  
必要：否  
有效值：`READ` \$1 `WRITE` \$1 `MKNOD`  
`initProcessEnabled`  
若為 true，請在容器內執行 `init` 處理程序，該處理程序可轉寄訊號及獲得處理程序。此參數會映射到 [docker run](https://docs.docker.com/engine/reference/run/) 的 `--init` 選項。在您的容器執行個體上，此參數需要 1.25 版或更新版本的 Docker Remote API。若要檢查容器執行個體的 Docker Remote API 版本，請登入容器執行個體，並執行下列命令：`sudo docker version | grep "Server API version"`  
類型：布林值  
必要：否  
`maxSwap`  
任務可以使用的交換記憶體總量 （以 MiB 為單位）。此參數將會轉換為 [docker run](https://docs.docker.com/engine/reference/run/) 的 `--memory-swap` 選項，其中值是容器記憶體與 `maxSwap` 值的總和。如需詳細資訊，請參閱 Docker 文件中的 [`--memory-swap` 詳細資訊](https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details)。  
如果將 `maxSwap` 值指定為 `0`，容器不會使用交換。接受的值為 `0` 或任何正整數。如果省略 `maxSwap` 參數，容器會使用其執行所在之容器執行個體的交換組態。必須設定 `maxSwap` 值，才能使用 `swappiness` 參數。  
此參數不適用於在 Fargate 資源上執行的任務。
類型：整數  
必要：否  
`sharedMemorySize`  
`/dev/shm` 磁碟區的大小值 (以 MiB 為單位)。此參數會映射到 [docker run](https://docs.docker.com/engine/reference/run/) 的 `--shm-size` 選項。  
此參數不適用於在 Fargate 資源上執行的任務。
類型：整數  
必要：否  
`swappiness`  
您可藉此調整容器的記憶體交換行為。除非絕對必要，否則 `swappiness`值`0`會導致交換不會發生。為 `100` 的 `swappiness` 值導致積極地交換頁面。接受的值為介於 `0` 與 `100` 之間的整數。如果未指定 `swappiness` 參數，則會使用預設值 `60`。如果未對 `maxSwap` 指定值，則會忽略此參數。如果 `maxSwap` 設定為 0，則容器不會使用交換。此參數會映射到 [docker run](https://docs.docker.com/engine/reference/run/) 的 `--memory-swappiness` 選項。  
當您使用每個容器交換組態時，請考量下列事項。  
+ 必須在容器執行個體上啟用和配置交換空間，供容器使用。
**注意**  
根據預設，Amazon ECS 最佳化 AMI 沒有啟用交換功能。您必須在執行個體上啟用交換，才能使用此功能。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[執行個體存放區交換磁碟區](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html)，或[如何使用交換檔案將記憶體配置為 Amazon EC2 執行個體中的交換空間？](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-memory-swap-file/)
+ 交換空間參數僅針對使用 EC2 資源的任務定義提供支援。
+ 如果從任務定義中省略 `maxSwap` 和 `swappiness` 參數，每個容器的預設 `swappiness` 值都為 60。總交換用量限制為容器記憶體保留的兩倍。
此參數不適用於在 Fargate 資源上執行的任務。
類型：整數  
必要：否  
`tmpfs`  
tmpfs 掛載的容器路徑、掛載選項和大小。  
類型：[Tmpfs](https://docs.aws.amazon.com/batch/latest/APIReference/API_Tmpfs.html) 物件的陣列  
此參數不適用於在 Fargate 資源上執行的任務。
必要：否    
`containerPath`  
掛載 tmpfs 磁碟區之容器中的絕對檔案路徑。  
類型：字串  
必要：是  
`mountOptions`  
tmpfs 磁碟區掛載選項的清單。  
有效值："`defaults`" \$1 "`ro`" \$1 "`rw`" \$1 `suid`"`nosuid`" \$1 `dev`"" \$1 "`nodev`" \$1 """ \$1 "`exec`" `noexec`\$1 "`async`"" \$1 `sync`""" \$1 "`dirsync`"" \$1 "`remount`"" `mand`\$1 "`nomand`" \$1 "`atime`"" \$1 "" \$1 "`nodiratime`"" \$1 `noatime``diratime`""" \$1 "`bind`"" \$1 """ `rbind``unbindable``runbindable``private`\$1`rprivate`"" \$1 """ \$1 "`shared`"" \$1 "`rshared``slave``rslave``relatime`"" \$1 "`norelatime`"" \$1 "`strictatime`"`nostrictatime``mode``uid``gid``nr_inodes``nr_blocks``mpol`  
類型：字串陣列  
必要：否  
`size`  
tmpfs 磁碟區大小 (以 MiB 為單位)。  
類型：整數  
必要：是

`logConfiguration`  
任務的日誌組態規格。  
此參數對應到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) (建立容器) 一節中的 `LogConfig`，以及 [Docker run](https://docs.docker.com/engine/reference/run/) 的 `--log-driver` 選項。根據預設，容器會和 Docker 常駐程式使用一樣的日誌記錄驅動程式。不過，容器可以使用與 Docker 協助程式不同的記錄驅動程式，方法是在容器定義中指定具有此參數的日誌驅動程式。若要為容器使用不同的記錄驅動程式，必須在容器執行個體或其他日誌伺服器上設定日誌系統，以提供遠端記錄選項。如需支援的不同日誌驅動程式選項的詳細資訊，請參閱 Docker 文件中的 [Configure logging drivers](https://docs.docker.com/engine/admin/logging/overview/) (設定日誌驅動程式)。  
AWS Batch 目前支援 Docker 協助程式可用的部分記錄驅動程式 （如 [LogConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html) 資料類型所示）。
在您的容器執行個體上，此參數需要 1.18 版或更新版本的 Docker Remote API。若要檢查容器執行個體的 Docker Remote API 版本，請登入容器執行個體，並執行下列命令：`sudo docker version | grep "Server API version"`  

```
"logConfiguration": {
    "devices": [
        {
            "logDriver": "string",
            "options": {
                "optionName1" : "optionValue1",
                "optionName2" : "optionValue2"
            }
            "secretOptions": [
              {
                  "name" : "secretOptionName1",
                  "valueFrom" : "secretOptionArn1"
              },
              {
                  "name" : "secretOptionName2",
                  "valueFrom" : "secretOptionArn2"
              }
            ]
        }
    ]
}
```
類型：[LogConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html) 物件  
必要：否    
`logDriver`  
用於任務的日誌驅動程式。根據預設， 會 AWS Batch 啟用`awslogs`日誌驅動程式。根據預設，針對此參數列出的有效值是 Amazon ECS 容器代理程式可與之通訊的日誌驅動程式。  
此參數對應到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) (建立容器) 一節中的 `LogConfig`，以及 [Docker run](https://docs.docker.com/engine/reference/run/) 的 `--log-driver` 選項。根據預設，任務會使用與 Docker 協助程式相同的記錄驅動程式。不過，任務可以使用與 Docker 協助程式不同的記錄驅動程式，方法是在任務定義中指定具有此參數的日誌驅動程式。如果您想要為任務指定另一個記錄驅動程式，則必須在運算環境中的容器執行個體上設定日誌系統。或者，在另一個日誌伺服器上進行設定，以提供遠端記錄選項。如需支援的不同日誌驅動程式選項的詳細資訊，請參閱 Docker 文件中的 [Configure logging drivers](https://docs.docker.com/engine/admin/logging/overview/) (設定日誌驅動程式)。  
AWS Batch 目前支援 Docker 協助程式可用的部分記錄驅動程式。未來的 Amazon ECS 容器代理程式版本可能會提供更多可用的其他日誌驅動程式。
支援的記錄驅動程式為 `awslogs`、`fluentd`、`gelf`、`json-file`、`journald`、`logentries`、`syslog` 和 `splunk`。  
在 Fargate 資源上執行的任務僅限於 `awslogs`和 `splunk` 日誌驅動程式。
在您的容器執行個體上，此參數需要 1.18 版或更新版本的 Docker Remote API。若要檢查容器執行個體的 Docker Remote API 版本，請登入容器執行個體，並執行下列命令：`sudo docker version | grep "Server API version"`  
在容器執行個體上執行的 Amazon ECS 容器代理程式必須使用 `ECS_AVAILABLE_LOGGING_DRIVERS`環境變數註冊該執行個體上可用的記錄驅動程式。否則，放置在該執行個體上的容器無法使用這些日誌組態選項。如需詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》中的 [Amazon ECS 容器代理程式組態](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html)。  
`awslogs`  
指定 Amazon CloudWatch Logs 記錄驅動程式。如需詳細資訊，請參閱 Docker 文件中的 [使用 awslogs 日誌驅動程式](using_awslogs.md)和 [Amazon CloudWatch Logs 記錄驅動程式](https://docs.docker.com/config/containers/logging/awslogs/)。  
`fluentd`  
指定 Fluentd 記錄驅動程式。如需包括用量和選項的詳細資訊，請參閱 Docker 文件中的 [Fluentd 記錄驅動程式](https://docs.docker.com/config/containers/logging/fluentd/)。  
`gelf`  
指定 Graylog 延伸格式 (GELF) 記錄驅動程式。如需包括用量和選項的詳細資訊，請參閱 Docker 文件中的 [Graylog 擴充格式記錄驅動程式](https://docs.docker.com/config/containers/logging/gelf/)。  
`journald`  
指定 journald 記錄驅動程式。如需包括用量和選項的詳細資訊，請參閱 Docker 文件中的[日誌記錄驅動程式](https://docs.docker.com/config/containers/logging/journald/)。  
`json-file`  
指定 JSON 檔案記錄驅動程式。如需包括用量和選項的詳細資訊，請參閱 Docker 文件中的 [JSON 檔案記錄驅動程式](https://docs.docker.com/config/containers/logging/json-file/)。  
`splunk`  
指定 Splunk 記錄驅動程式。如需包括用量和選項的詳細資訊，請參閱 Docker 文件中的 [Splunk 記錄驅動程式](https://docs.docker.com/config/containers/logging/splunk/)。  
`syslog`  
指定 syslog 記錄驅動程式。如需包括用量和選項的詳細資訊，請參閱 Docker 文件中的 [Syslog 記錄驅動程式](https://docs.docker.com/config/containers/logging/syslog/)。
類型：字串  
必要：是  
有效值：`awslogs` \$1 `fluentd` \$1 `gelf` \$1 `journald` \$1 `json-file` \$1 `splunk` \$1 `syslog`  
如果您有先前未列出的自訂驅動程式，想要使用 Amazon ECS 容器代理程式，您可以放棄 [ GitHub 上可用的](https://github.com/aws/amazon-ecs-agent) Amazon ECS 容器代理程式專案，並自訂它以使用該驅動程式。我們鼓勵您為想要進行的變更提交提取請求。不過，Amazon Web Services 目前不支援執行已修改本軟體複本的請求。  
`options`  
要傳送至任務日誌驅動程式的日誌組態選項。  
在您的容器執行個體上，此參數需要 1.19 版或更新版本的 Docker Remote API。  
類型：字串到字串映射  
必要：否  
`secretOptions`  
此物件代表要傳送至日誌組態的秘密。如需詳細資訊，請參閱[指定敏感資料](specifying-sensitive-data.md)。  
類型：物件陣列  
必要：否    
`name`  
要在任務中設定的日誌驅動程式選項名稱。  
類型：字串  
必要：是  
`valueFrom`  
要公開給容器日誌組態之秘密的 Amazon Resource Name (ARN)。支援的值為 Secrets Manager 秘密的完整 ARN 或 SSM 參數存放區中參數的完整 ARN。  
如果 SSM 參數存放區參數與您啟動 AWS 區域 的任務位於相同的 中，則您可以使用參數的完整 ARN 或名稱。如果參數存在於不同區域，則必須指定完整 ARN。
類型：字串  
必要：是

`memory`  
*此參數已棄用，請`resourceRequirements`改用 。*  
為任務預留的記憶體 MiB 數量。  
做為如何使用 的範例`resourceRequirements`，如果您的任務定義包含類似以下的語法。  

```
"containerProperties": {
  "memory": 512
}
```
使用 的同等語法`resourceRequirements`如下所示。  

```
"containerProperties": {
  "resourceRequirements": [
    {
      "type": "MEMORY",
      "value": "512"
    }
  ]
}
```
類型：整數  
必要：是

`mountPoints`  
容器中資料磁碟區的掛載點。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Volumes` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--volume` 選項。  

```
"mountPoints": [
                {
                  "sourceVolume": "string",
                  "containerPath": "string",
                  "readOnly": true|false
                }
              ]
```
類型：物件陣列  
必要：否    
`sourceVolume`  
要掛載的磁碟區名稱。  
類型：字串  
必要：是，使用 `mountPoints` 時。  
`containerPath`  
容器上要掛載主機磁碟區的路徑。  
類型：字串  
必要：是，使用 `mountPoints` 時。  
`readOnly`  
如果此數值為 `true`，容器擁有磁碟區的唯讀存取權。如果此值為 `false`，則容器可寫入磁碟區。  
類型：布林值  
必要：否  
預設：False

`networkConfiguration`  
在 Fargate 資源上執行之任務的網路組態。在 EC2 資源上執行的任務不得指定此參數。  

```
"networkConfiguration": { 
   "assignPublicIp": "string"
}
```
類型：物件陣列  
必要：否    
`assignPublicIp`  
指示任務是否有公有 IP 地址。如果任務需要傳出網路存取，這是必要的。  
類型：字串  
有效值：`ENABLED` \$1 `DISABLED`  
必要：否  
預設：`DISABLED`

`privileged`  
此參數為 true 時，容器便會取得主機容器執行個體的更高許可 (類似 `root` 使用者)。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Privileged` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--privileged` 選項。此參數不適用於在 Fargate 資源上執行的任務。請勿提供或指定為 false。  

```
"privileged": true|false
```
類型：布林值  
必要：否

`readonlyRootFilesystem`  
此參數為 true 時，容器會取得根檔案系統的唯讀存取權。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `ReadonlyRootfs` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--read-only` 選項。  

```
"readonlyRootFilesystem": true|false
```
類型：布林值  
必要：否

`resourceRequirements`  
指派給容器的資源類型和數量。支援的資源包括 `GPU` `MEMORY` 和 `VCPU`。  

```
"resourceRequirements" : [
  {
    "type": "GPU",
    "value": "number"
  }
]
```
類型：物件陣列  
必要：否    
`type`  
要指派給容器的資源類型。支援的資源包括 `GPU` `MEMORY` 和 `VCPU`。  
類型：字串  
必要：是，使用 `resourceRequirements` 時。  
`value`  
為容器預留的指定資源數量。這些值根據指定的 `type` 而有所差異。    
type="GPU"  
為容器保留的記實體 GPU 數量。為任務中所有容器預留的 GPUs 數量不能超過啟動任務的運算資源上可用的 GPUs 數量。  
type="MEMORY"  
提供給容器使用的記憶體硬性限制 (MiB)。如果您的容器嘗試使用超過此處指定的記憶體，容器便會終止。此參數對應到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) (建立容器) 一節中的 `Memory`，以及 [Docker run](https://docs.docker.com/engine/reference/run/) 的 `--memory` 選項。您必須為單一工作指定至少 4 MiB 的記憶體。這是必要的，但可以在多個地方為多節點平行 (MNP) 任務指定。必須至少為每個節點指定一次。此參數對應到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) (建立容器) 一節中的 `Memory`，以及 [Docker run](https://docs.docker.com/engine/reference/run/) 的 `--memory` 選項。  
如果您嘗試為特定執行個體類型提供盡可能多的記憶體，以最大化資源使用率，請參閱 [運算資源記憶體管理](memory-management.md)。
對於在 Fargate 資源上執行的任務， `value`必須符合其中一個支援的值。此外，`VCPU`這些值必須是該記憶體值支援的其中一個值。      
<a name="Fargate-memory-vcpu"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/batch/latest/userguide/job_definition_parameters.html)  
type="VCPU"  
為任務保留的 vCPU 數量。此參數對應到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) (建立容器) 一節中的 `CpuShares`，以及 [Docker run](https://docs.docker.com/engine/reference/run/) 的 `--cpu-shares` 選項。每個 vCPU 相當於 1,024 個 CPU 共用。對於在 EC2 資源上執行的任務，您必須至少指定一個 vCPU。這是必要項目，但可以在幾個地方指定。必須至少為每個節點指定一次。  
對於在 Fargate 資源上執行的任務， `value` 必須符合其中一個支援的值，且`MEMORY`值必須是該 VCPU 值支援的其中一個值。支援的值為 0.25、0.5、1、2、4、8 和 16。  
Fargate 隨需 vCPU 資源計數配額的預設值為 6 個 vCPU。如需 Fargate 配額的詳細資訊，請參閱《》中的 [AWS Fargate 配額](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html#service-quotas-fargate)*Amazon Web Services 一般參考*。
類型：字串  
必要：是，使用 `resourceRequirements` 時。

`secrets`  
公開為環境變數之任務的秘密。如需詳細資訊，請參閱[指定敏感資料](specifying-sensitive-data.md)。  

```
"secrets": [
    {
      "name": "secretName1",
      "valueFrom": "secretArn1"
    },
    {
      "name": "secretName2",
      "valueFrom": "secretArn2"
    }
    ...
]
```
類型：物件陣列  
必要：否    
`name`  
包含秘密的環境變數名稱。  
類型：字串  
必要：是，使用 `secrets` 時。  
  
`valueFrom`  
公開給容器的秘密。支援的值為 Secrets Manager 秘密的完整 Amazon Resource Name (ARN)，或 SSM 參數存放區中參數的完整 ARN。  
如果 SSM 參數存放區參數與您啟動 AWS 區域 的任務位於相同的 中，則您可以使用參數的完整 ARN 或名稱。如果參數存在於不同區域，則必須指定完整 ARN。
類型：字串  
必要：是，使用 `secrets` 時。

`ulimits`  
容器中要設定的 `ulimits` 值的清單。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Ulimits` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--ulimit` 選項。  

```
"ulimits": [
  {
    "name": string,
    "softLimit": integer,
    "hardLimit": integer
  }
  ...
]
```
類型：物件陣列  
必要：否    
`name`  
`ulimit` 的 `type`。  
類型：字串  
必要：是，使用 `ulimits` 時。  
  
`hardLimit`  
`ulimit` 類型的硬性限制。  
類型：整數  
必要：是，使用 `ulimits` 時。  
  
`softLimit`  
`ulimit` 類型的軟性限制。  
類型：整數  
必要：是，使用 `ulimits` 時。  


`user`  
要在容器內使用的使用者名稱。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `User` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--user` 選項。  

```
"user": "string"
```
類型：字串  
必要：否

`vcpus`  
*此參數已棄用，請`resourceRequirements`改用 。*  
為容器保留的 vCPU 數量。  
如果您的任務定義包含類似以下的行`resourceRequirements`，則做為如何使用 的範例：  

```
"containerProperties": {
  "vcpus": 2
}
```
使用 `resourceRequirements`的同等行如下所示。  

```
"containerProperties": {
  "resourceRequirements": [
    {
      "type": "VCPU",
      "value": "2"
    }
  ]
}
```
類型：整數  
必要：是

`volumes`  
註冊任務定義時，您可指定磁碟區清單，那些磁碟區會傳送到容器執行個體上的 Docker 協助程式。容器屬性允許使用以下參數：  

```
"volumes": [
  {
    "name": "string",
    "host": {
      "sourcePath": "string"
    },
    "efsVolumeConfiguration": {
      "authorizationConfig": {
        "accessPointId": "string",
        "iam": "string"
      },
      "fileSystemId": "string",
      "rootDirectory": "string",
      "transitEncryption": "string",
      "transitEncryptionPort": number
    }
  }
]
```  
`name`  
磁碟區名稱。可以包含最多可達 255 個字元 (大小寫)、數字、連字號和底線。此名稱是參考容器定義 `sourceVolume` 中的 `mountPoints` 參數。  
類型：字串  
必要：否  
`host`  
`host` 參數內容決定資料磁碟區是否在主機容器執行個體和儲存位置中保留。如果 `host` 參數是空的，則 Docker 協助程式會為您的資料磁碟區指派主機路徑。不過，資料不保證會在與其相關聯的容器停止執行後持續存在。  
此參數不適用於在 Fargate 資源上執行的任務。
類型：物件  
必要：否    
`sourcePath`  
提供給容器的主機容器執行個體上的路徑。如果此參數是空的，則 Docker 常駐程式會為您指派主機路徑。  
如果 `host` 參數包含 `sourcePath` 檔案位置，資料磁碟區將保留在主機容器執行個體上的指定位置，直到您手動將其刪除為止。如果 `sourcePath` 值不存在於主機容器執行個體上，Docker 常駐程式將建立該值。如果位置存在，將匯出來源路徑資料夾的內容。  
類型：字串  
必要：否  
`efsVolumeConfiguration`  
當您使用適用於任務儲存體的 Amazon Elastic File System 檔案系統時，會指定此參數。如需詳細資訊，請參閱[Amazon EFS 磁碟區](efs-volumes.md)。  
類型：物件  
必要：否    
`authorizationConfig`  
Amazon EFS 檔案系統的授權組態詳細資訊。  
類型：字串  
必要：否    
`accessPointId`  
要使用的 Amazon EFS 存取點 ID。如果指定存取點，則必須省略 中指定的根目錄值`EFSVolumeConfiguration`，或將 設定為 `/`。這會強制執行在 EFS 存取點上設定的路徑。如果使用存取點，則必須在 `EFSVolumeConfiguration` 中啟用傳輸加密。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》**中的[使用 Amazon EFS 存取點](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html)。  
類型：字串  
必要：否  
`iam`  
決定是否在掛載 Amazon EFS 檔案系統時使用 AWS Batch 任務定義中定義的任務 IAM 角色。如果已啟用，必須在 `EFSVolumeConfiguration` 中啟用傳輸加密。如果省略此參數，系統會使用 `DISABLED` 的預設值。如需詳細資訊，請參閱[使用 Amazon EFS 存取點](efs-volumes.md#efs-volume-accesspoints)。  
類型：字串  
有效值：`ENABLED` \$1 `DISABLED`  
必要：否  
`fileSystemId`  
要使用的 Amazon EFS 檔案系統識別碼。  
類型：字串  
必要：否  
`rootDirectory`  
在 Amazon EFS 檔案系統中的目錄，其將掛載作為主機內的根目錄。如果省略此參數，使用 Amazon EFS 磁碟區的根目錄。如果您指定 `/`，它具有與省略此參數相同的效果。長度上限為 4,096 個字元。  
如果在 中指定了 EFS 存取點`authorizationConfig`，則必須省略根目錄參數或將其設定為 `/`。這會強制執行在 Amazon EFS 存取點上設定的路徑。
類型：字串  
必要：否  
`transitEncryption`  
確定是否要對 Amazon ECS 主機和 Amazon EFS 伺服器之間 Amazon EFS 傳輸中的資料啟用加密功能。若使用 Amazon EFS IAM 授權，則必須啟用傳輸加密。如果省略此參數，系統會使用 `DISABLED` 的預設值。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》中的[加密傳輸中的資料](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)。  
類型：字串  
有效值：`ENABLED` \$1 `DISABLED`  
必要：否  
`transitEncryptionPort`  
在 Amazon ECS 主機和 Amazon EFS 伺服器之間傳送加密資料時所使用的連接埠。如果您未指定傳輸加密連接埠，它會使用 Amazon EFS 掛載協助程式使用的連接埠選擇策略。該值必須介於 0 到 65,535 之間。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》**中的 [EFS 掛載協助程式](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html)。  
類型：整數  
必要：否

## Amazon EKS 屬性
<a name="job-definition-parameters-eks-properties"></a>

有各種 Amazon ECS 型任務特定屬性的物件。這不得為 Amazon ECS 型任務定義指定。

`podProperties`  
任務 Kubernetes Pod 資源的屬性。  
類型：[EksPodProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html) 物件  
必要：否    
`containers`  
Amazon EKS Pod 上所使用容器的屬性。  
類型：[EksContainer](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainer.html) 物件  
必要：否    
`args`  
進入點的引數陣列。如果未指定，系統會使用容器映像的 `CMD`。這對應至 `args` 中 [Pod](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/) [進入點](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint)部分的成員Kubernetes。環境變數參考使用容器的環境擴展。  
如果沒有參考的環境變數，不會變更命令中的參考。例如，如果參考為 "`$(NAME1)`"，且沒有 `NAME1` 環境變數，命令字串會保持 "`$(NAME1)`"。`$$` 會替換為 `$`，且產生的字串不會擴展。例如，`$$(VAR_NAME)` 會以 `$(VAR_NAME)` 傳遞，無論是否有 `VAR_NAME` 環境變數。如需詳細資訊，請參閱 *Dockerfile 參考*中的 [CMD](https://docs.docker.com/engine/reference/builder/#cmd)，以及 *Kubernetes 文件*中的[定義 Pod 的命令和引數](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/)。  
類型：字串陣列  
必要：否  
`command`  
容器的進入點。這不是在 Shell 中執行。如果未指定，系統會使用容器映像的 `ENTRYPOINT`。環境變數參考使用容器的環境擴展。  
如果沒有參考的環境變數，不會變更命令中的參考。例如，如果參考為 "`$(NAME1)`"，且沒有 `NAME1` 環境變數，命令字串會保持 "`$(NAME1)`"。`$$` 會替換為 `$`，且產生的字串不會擴展。例如，`$$(VAR_NAME)` 會以 `$(VAR_NAME)` 傳遞，無論是否有 `VAR_NAME` 環境變數。無法更新進入點。如需詳細資訊，請參閱 *Dockerfile 參考*中的 [ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#entrypoint)，以及 *Kubernetes 文件*中的[定義容器和進入點的命令和引數](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/)。 [https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint)  
類型：字串陣列  
必要：否  
`env`  
傳遞至容器的環境變數。  
環境變數不得以 "`AWS_BATCH`" 開頭。此命名慣例會保留給 AWS Batch 設定的變數。
類型：[EksContainerEnvironmentVariable](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerEnvironmentVariable.html) 物件的陣列  
必要：否    
`name`  
環境變數的名稱。  
類型：字串  
必要：是  
`value`  
環境變數的值。  
類型：字串  
必要：否  
`image`  
用來啟動容器的 Docker 映像檔。  
類型：字串  
必要：是  
`imagePullPolicy`  
容器的映像提取政策。支援的值為 `Always`、`IfNotPresent` 和 `Never`。此參數預設為 `IfNotPresent`。但如果指定 `:latest` 標籤，預設為 `Always`。如需詳細資訊，請參閱 *Kubernetes 文件*中的[更新映像](https://kubernetes.io/docs/concepts/containers/images/#updating-images)。  
類型：字串  
必要：否  
`name`  
容器的名稱。如果未指定名稱，系統會使用預設名稱 "`Default`"。Pod 中的每個容器都必須有唯一名稱。  
類型：字串  
必要：否  
`resources`  
指派給容器的資源類型和數量。支援的資源包括 `memory` `cpu` 和 `nvidia.com/gpu`。如需詳細資訊，請參閱 *Kubernetes 文件*中的 [Pod 和容器的資源管理](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/)。  
類型：[EksContainerResourceRequirements](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerResourceRequirements.html) 物件  
必要：否    
`limits`  
為容器預留的資源類型和數量。這些值根據指定的 `name` 而有所差異。可以使用 `limits` 或 `requests` 物件請求資源。    
memory  
容器的記憶體硬性限制 (以 MiB 為單位)，使用整數，具有 "Mi" 字尾。如果您的容器嘗試使用超過指定的記憶體，容器便會終止。您必須為任務指定至少 4 MiB 的記憶體。可以在 `limits`、`requests` 或兩者中指定 `memory`。如果同時在這兩個位置指定 `memory`，則 `limits` 中指定的值必須等於 `requests` 中指定的值。  
若要將資源使用率最大化，請為您正在使用的特定執行個體類型的任務，提供盡可能多的記憶體。如要瞭解如何作業，請參閱[運算資源記憶體管理](memory-management.md)。  
cpu  
為容器預留的 CPU 數量。值必須是 `0.25` 的偶數倍數。可以在 `limits`、`requests` 或兩者中指定 `cpu`。如果同時在這兩個位置指定 `cpu`，則 `limits` 中指定的值至少須與 `requests` 中指定的值一樣大。  
nvidia.com/gpu  
為容器預留的 GPU 數量。值必須為整數。可以在 `limits`、`requests` 或兩者中指定 `memory`。如果同時在這兩個位置指定 `memory`，則 `limits` 中指定的值必須等於 `requests` 中指定的值。
類型：字串到字串映射  
值長度限制：長度下限為 1。長度上限為 256。  
必要：否  
`requests`  
為容器請求的資源類型和數量。這些值根據指定的 `name` 而有所差異。可以使用 `limits` 或 `requests` 物件請求資源。    
memory  
容器的記憶體硬性限制 (以 MiB 為單位)，使用整數，具有 "Mi" 字尾。如果您的容器嘗試使用超過指定的記憶體，容器便會終止。您必須為任務指定至少 4 MiB 的記憶體。可以在 `limits`、`requests` 或兩者中指定 `memory`。如果同時在兩者中指定 `memory`，則 `limits` 中指定的值必須等於 `requests` 中指定的值。  
如果您嘗試為特定執行個體類型提供盡可能多的記憶體，以最大化資源使用率，請參閱 [運算資源記憶體管理](memory-management.md)。  
cpu  
為容器預留的 CPU 數量。值必須是 `0.25` 的偶數倍數。可以在 `limits`、`requests` 或兩者中指定 `cpu`。如果同時在兩者中指定 `cpu`，則 `limits` 中指定的值至少須與 `requests` 中指定的值一樣大。  
nvidia.com/gpu  
為容器預留的 GPU 數量。值必須為整數。可以在 `limits`、`requests` 或兩者中指定 `nvidia.com/gpu`。如果同時在兩者中指定 `nvidia.com/gpu`，則 `limits` 中指定的值必須等於 `requests` 中指定的值。
類型：字串到字串映射  
值長度限制：長度下限為 1。長度上限為 256。  
必要：否  
`securityContext`  
任務的安全性內容。如需詳細資訊，請參閱 *Kubernetes 文件*中的[設定 Pod 或容器的安全內容](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)。  
類型：[EksContainerSecurityContext](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerSecurityContext.html) 物件  
必要：否    
`privileged`  
此參數為 `true` 時，容器便會取得主機容器執行個體的更高許可。許可層級類似於`root`使用者許可。預設值為 `false`。此參數會映射至 *Kubernetes 文件*`privileged`中[特權 Pod 安全政策中的政策](https://kubernetes.io/docs/concepts/security/pod-security-policy/#privileged)。  
類型：布林值  
必要：否  
`readOnlyRootFilesystem`  
此參數為 `true` 時，容器會取得根檔案系統的唯讀存取權。預設值為 `false`。此參數會映射至 *Kubernetes 文件*`ReadOnlyRootFilesystem`中[磁碟區和檔案系統 Pod 安全政策中的政策](https://kubernetes.io/docs/concepts/security/pod-security-policy/#volumes-and-file-systems)。  
類型：布林值  
必要：否  
`runAsGroup`  
指定此參數時，容器會以指定的群組 ID (`gid`) 執行。如果未指定此參數，預設值為映像中繼資料中指定的群組。此參數會映射至 *Kubernetes 文件*中使用者和群組 Pod 安全`RunAsGroup``MustRunAs`政策中的 和 政策。 [https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)  
類型：Long  
必要：否  
`runAsNonRoot`  
指定此參數時，容器會以 `uid` 非 0 的使用者身分執行。如果未指定此參數，系統會強制執行此規則。此參數會映射至 *Kubernetes 文件*中使用者和群組 Pod 安全`RunAsUser``MustRunAsNonRoot`政策中的 和 政策。 [https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)  
類型：Long  
必要：否  
`runAsUser`  
指定此參數時，容器會以指定的使用者 ID (`uid`) 執行。如果未指定此參數，預設值為映像中繼資料中指定的使用者。此參數會映射至 *Kubernetes 文件*中使用者和群組 Pod 安全`RunAsUser``MustRanAs`政策中的 和 政策。 [https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)  
類型：Long  
必要：否  
`volumeMounts`  
磁碟區會針對適用於 Amazon EKS 任務的容器掛載。如需 中磁碟區和磁碟區掛載的詳細資訊Kubernetes，請參閱 *Kubernetes 文件*中的[磁碟區](https://kubernetes.io/docs/concepts/storage/volumes/)。  
類型：[EksContainerVolumeMount](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerVolumeMount.html) 物件陣列  
必要：否    
`mountPath`  
掛載磁碟區之容器上的路徑。  
類型：字串  
必要：否  
`name`  
掛載的磁碟區名稱。這必須符合 Pod 中任一磁碟區的名稱。  
類型：字串  
必要：否  
`readOnly`  
如果此數值為 `true`，容器擁有磁碟區的唯讀存取權。否則，容器可以寫入磁碟區。預設值為 `false`。  
類型：布林值  
必要：否  
`dnsPolicy`  
Pod 的 DNS 政策。預設值為 `ClusterFirst`。如果未指定 `hostNetwork` 參數，預設值為 `ClusterFirstWithHostNet`。`ClusterFirst` 指示任何與設定之叢集網域字尾不相符的 DNS 查詢，都會轉寄至繼承自節點的上游名稱伺服器。如果 [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html) API 操作`dnsPolicy`中未指定 的值，則 `dnsPolicy` [DescribeJobDefinitions](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobDefinitions.html) 或 [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API 操作不會傳回 的值。視 `hostNetwork` 參數的值而定，Pod 規格設定會包含 `ClusterFirst` 或 `ClusterFirstWithHostNet`。如需詳細資訊，請參閱 *Kubernetes 文件*中的 [Pod 的 DNS 政策](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy)。  
有效值：`Default` \$1 `ClusterFirst` \$1 `ClusterFirstWithHostNet`  
類型：字串  
必要：否  
`hostNetwork`  
指示 Pod 是否使用主機的網路 IP 地址。預設值為 `true`。將此設定為`false`啟用 Kubernetes Pod 網路模型。大多數 AWS Batch 工作負載都是輸出限定的，不需要每個 Pod 傳入連線的 IP 配置額外負荷。如需詳細資訊，請參閱 *Kubernetes 文件*中的[主機命名空間](https://kubernetes.io/docs/concepts/security/pod-security-policy/#host-namespaces)和 [Pod 聯網](https://kubernetes.io/docs/concepts/workloads/pods/#pod-networking)。  
類型：布林值  
必要：否  
`serviceAccountName`  
用來執行 Pod 的服務帳戶名稱。如需詳細資訊，請參閱《Amazon EKS 使用者指南》中的[Kubernetes服務帳戶](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html)和[設定Kubernetes服務帳戶以擔任 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html)和在*Kubernetes文件中*[設定 Pod 的服務帳戶](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/)。 **  
類型：字串  
必要：否  
`volumes`  
為使用 Amazon EKS 資源的任務定義指定磁碟區。  
類型：[EksVolume](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksVolume.html) 物件的陣列  
必要：否    
emptyDir  
指定Kubernetes`emptyDir`磁碟區的組態。將 Pod 指派給節點時，會先建立 `emptyDir` 磁碟區。只要該 Pod 在該節點上執行，就會存在。`emptyDir` 磁碟區最初是空的。Pod 中的所有容器都可以讀取和寫入 `emptyDir` 磁碟區中的檔案。但 `emptyDir` 磁碟區可以掛載在每個容器中相同或不同路徑上。因任何原因將 Pod 從節點移除時，系統會永久刪除 `emptyDir` 中的資料。如需詳細資訊，請參閱 *Kubernetes 文件*中的 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)。  
類型：[EksEmptyDir](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksEmptyDir.html) 物件  
必要：否    
中型  
存放磁碟區的媒體。預設值為空白字串，這會使用節點的儲存空間。    
""  
**(預設)** 使用節點的磁碟儲存空間。  
"Memory"  
使用節點 RAM 支援的 `tmpfs` 磁碟區。節點重新開機時，磁碟區的內容會遺失，且磁碟區上的任何儲存空間都會計入容器的記憶體限制。
類型：字串  
必要：否  
sizeLimit  
磁碟區的大小上限。預設未定義大小上限。  
類型：字串  
長度限制：長度下限為 1。長度上限為 256。  
必要：否  
hostPath  
指定Kubernetes`hostPath`磁碟區的組態。`hostPath` 磁碟區會將現有檔案或目錄，從主機節點的檔案系統掛載到您的 Pod。如需詳細資訊，請參閱 *Kubernetes 文件*中的 [hostPath](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath)。  
類型：[EksHostPath](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksHostPath.html) 物件  
必要：否    
*path*  
要掛載至 Pod 上容器的主機檔案或目錄的路徑。  
類型：字串  
必要：否  
name  
磁碟區名稱。此名稱必須可當作 DNS 子網域名稱。如需詳細資訊，請參閱 *Kubernetes 文件*中的 [DNS 子網域名稱](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names)。  
類型：字串  
必要：是  
秘密  
指定Kubernetes`secret`磁碟區的組態。如需詳細資訊，請參閱 *Kubernetes 文件*中的[秘密](https://kubernetes.io/docs/concepts/storage/volumes/#secret)。  
類型：[EksSecret](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksSecret.html) 物件  
必要：否    
選擇性  
指定是否必須定義秘密或秘密的金鑰。  
類型：布林值  
必要：否  
secretName  
秘密的名稱。此名稱必須可當作 DNS 子網域名稱。如需詳細資訊，請參閱 *Kubernetes 文件*中的 [DNS 子網域名稱](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names)。  
類型：字串  
必要：是

## 平台功能
<a name="job-definition-parameters-platform-capabilities"></a>

`platformCapabilities`  
任務定義所需的平台功能。如果未指定任何值，則預設為 `EC2`。對於在 Fargate 資源上執行的任務，`FARGATE`會指定 。  
如果任務在 Amazon EKS 資源上執行，則不得指定 `platformCapabilities`。
類型：字串  
有效值：`EC2` \$1 `FARGATE`  
必要：否

## 傳播標籤
<a name="job-definition-parameters-propagate-tags"></a>

`propagateTags`  
指定是否要將標籤從任務或任務定義傳播到對應的 Amazon ECS 任務。如果沒有指定值，則不會傳播標籤。標籤只能在建立任務時傳播至任務。對於具有相同名稱的標籤，任務標籤優先於任務定義標籤。如果任務和任務定義的合併標籤總數超過 50，任務會移至 `FAILED` 狀態。  
如果任務在 Amazon EKS 資源上執行，則您不得指定 `propagateTags`。
類型：布林值  
必要：否

## 節點屬性
<a name="nodeProperties"></a>

`nodeProperties`  
註冊多節點平行任務定義時，您必須指定節點屬性的清單。這些節點屬性會定義要在任務中使用的節點數量、主節點索引，以及要使用的不同節點範圍。如果任務在 Fargate 資源上執行，則您無法指定 `nodeProperties`。請改用 `containerProperties`。任務定義允許使用以下的節點屬性。如需詳細資訊，請參閱[多節點平行任務](multi-node-parallel-jobs.md)。  
如果任務在 Amazon EKS 資源上執行，則不得指定 `nodeProperties`。
類型：[NodeProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeProperties.html) 物件  
必要：否    
`mainNode`  
為多節點平行任務指定主要節點的節點索引。此節點索引值必須小於節點的數量。  
類型：整數  
必要：是  
`numNodes`  
與多節點平行任務關聯的節點數量。  
類型：整數  
必要：是  
`nodeRangeProperties`  
與多節點平行任務關聯的節點範圍和其屬性清單。  
節點群組是共用相同容器屬性的相同任務節點群組。您可以使用 AWS Batch 為每個任務指定最多五個不同的節點群組。
類型：[NodeRangeProperty](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeRangeProperty.html) 物件陣列  
必要：是    
`targetNodes`  
使用節點索引值的節點範圍。`0:3` 的範圍表示節點具有 `0` 到 `3` 的索引值。如果省略開始範圍值 (`:n`)，則會使用 0 來開始範圍。如果省略了結束範圍值 (`n:`)，則會使用最高可能的節點索引來結束範圍。您的累積節點範圍必須將所有節點納入考量 (`0:n`)。您可以巢狀節點範圍，例如 `0:10`和 `4:5`。在這種情況下，`4:5`範圍屬性會覆寫`0:10`屬性。  
類型：字串  
必要：否  
`container`  
節點範圍的容器詳細資訊。如需詳細資訊，請參閱[容器屬性](#containerProperties)。  
類型：[ContainerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html) 物件   
必要：否

## 重試策略
<a name="retryStrategy"></a>

`retryStrategy`  
註冊任務定義，您可以選擇性指定任務失敗後要使用的重試策略，隨此任務定義提交。在 [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 操作期間指定的任何重試策略都會覆寫此處定義的重試策略。根據預設，每個任務將嘗試一次。如果您指定多個嘗試，則會在任務失敗時重試任務。失敗嘗試的範例包括任務傳回非零結束碼，或容器執行個體終止。如需詳細資訊，請參閱[自動化任務重試](job_retries.md)。  
類型：[RetryStrategy](https://docs.aws.amazon.com/batch/latest/APIReference/API_RetryStrategy.html) 物件  
必要：否    
`attempts`  
將任務移至 `RUNNABLE` 狀態的次數。您可以指定嘗試 1 至 10 次。如果 `attempts` 超過 1 次，任務失敗後將重試該次數，直到其狀態移至 `RUNNABLE`。  

```
"attempts": integer
```
類型：整數  
必要：否  
`evaluateOnExit`  
最多 5 個物件的陣列，指定任務重試或失敗的條件。如果指定此參數，則也必須指定 `attempts` 參數。如果已指定 `evaluateOnExit` ，但沒有項目相符，則會重試任務。  

```
"evaluateOnExit": [
   {
      "action": "string",
      "onExitCode": "string",
      "onReason": "string",
      "onStatusReason": "string"
   }
]
```
類型： [EvaluateOnExit](https://docs.aws.amazon.com/batch/latest/APIReference/API_EvaluateOnExit.html) 物件的陣列  
必要：否    
`action`  
指定符合所有指定條件 (`onStatusReason` `onReason` 和 `onExitCode`) 時要採取的動作。這些值不區分大小寫。  
類型：字串  
必要：是  
有效值：`RETRY` \$1 `EXIT`  
`onExitCode`  
包含 glob 模式，以比對針對任務`ExitCode`傳回之 的小數表示法。模式的長度上限為 512 個字元。它只能包含數字。它不能包含字母或特殊字元。可以選擇以星號 (\$1) 結束，以便只有字串的開頭需要完全相符。  
類型：字串  
必要：否  
`onReason`  
包含 glob 模式，以比對為任務傳回`Reason`的 。模式的長度上限為 512 個字元。它可以包含字母、數字、句點 (.)、冒號 (：) 和空格 （空格、標籤）。可以選擇以星號 (\$1) 結束，以便只有字串的開頭需要完全相符。  
類型：字串  
必要：否  
`onStatusReason`  
包含 glob 模式，以比對為任務傳回`StatusReason`的 。模式的長度上限為 512 個字元。它可以包含字母、數字、句點 (.)、冒號 (：) 和空格 （空格、標籤）。可以選擇以星號 (\$1) 結束，以便只有字串的開頭需要完全相符。  
類型：字串  
必要：否

## 排程優先順序
<a name="job-definition-parameters-schedulingPriority"></a>

`schedulingPriority`  
與此任務定義一起提交之任務的排程優先順序。這只會影響具有公平共用政策的任務佇列中的任務。排程優先順序較高的任務會排在排程優先順序較低的任務之前。  
支援的最小值為 0，支援的最大值為 9999。  
類型：整數  
必要：否

## Tags (標籤)
<a name="job-definition-parameters-tags"></a>

`tags`  
要與任務定義建立關聯的鍵值對標籤。如需詳細資訊，請參閱[標記您的 AWS Batch 資源](using-tags.md)。  
類型：字串到字串映射  
必要：否

## 逾時
<a name="timeout"></a>

`timeout`  
您可以設定任務的逾時持續時間，以便在任務執行時間超過此時間時 AWS Batch 終止任務。如需詳細資訊，請參閱[任務逾時](job_timeouts.md)。如果任務因逾時而終止，則不會重試。[SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 操作期間指定的任何逾時組態都會覆寫此處定義的逾時組態。如需詳細資訊，請參閱[任務逾時](job_timeouts.md)。  
類型：[JobTimeout](https://docs.aws.amazon.com/batch/latest/APIReference/API_JobTimeout.html) 物件  
必要：否    
`attemptDurationSeconds`  
 AWS Batch 終止未完成任務後的持續時間，以秒為單位 （從任務嘗試的`startedAt`時間戳記測量）。逾時最小值為 60 秒。  
若為陣列任務，逾時會套用至子任務，而不是父陣列任務。  
若為多節點平行 (MNP) 任務，逾時會套用至整個工作，而非個別節點。  
類型：整數  
必要：否

# 使用 EcsProperties 建立任務定義
<a name="multi-container-jobs"></a>

透過使用 AWS Batch 的任務定義[https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html)，您可以在個別容器中建立硬體、感應器、3D 環境和其他模擬的模型。您可以使用此功能以邏輯方式組織工作負載元件，並將其與主要應用程式分開。此功能可在 Amazon Elastic Container Service (Amazon ECS)、Amazon Elastic Kubernetes Service (Amazon EKS) 和 AWS Batch 上使用 AWS Fargate。

## `ContainerProperties` 與`EcsProperties`任務定義
<a name="containerpropertions-vs-ecsproperties"></a>

您可以選擇使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html)或 [https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html)任務定義做為您的使用案例指示。在高階，使用 執行 AWS Batch 中的任務`EcsProperties`類似於使用 執行中的任務`ContainerProperties`。

使用 的舊版任務定義結構`ContainerProperties`仍受支援。如果您目前有使用此結構的工作流程，您可以繼續執行它們。

主要差別在於有新物件新增至任務定義，以容納 `EcsProperties`型定義。

例如，在 Amazon ECS 和 Fargate `ContainerProperties`上使用 的任務定義具有下列結構：

```
{
   "containerProperties": {
     ...
     "image": "my_ecr_image1",
     ...
  },
...
}
```

在 Amazon ECS 和 Fargate `EcsProperties`上使用的任務定義具有下列結構：

```
{
  "ecsProperties": {
    "taskProperties": [{
      "containers": [
        { 
          ...
          "image": "my_ecr_image1",
          ...
        },
        { 
          ...
          "image": "my_ecr_image2",
          ...
        },
```

## AWS Batch APIs的一般變更
<a name="multi-container-general"></a>

以下進一步概述使用 `ContainerProperties`和 `EcsProperties` API 資料類型時的一些主要差異：
+ 在 中使用的許多參數都`ContainerProperties`會顯示在 中`TaskContainerProperties`。一些範例包括 、`command``image`、`secrets`、 `privileged`和 `users`。它們都可以在 [TaskContainerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html) 中找到。
+ 有些`TaskContainerProperties`參數在舊版結構中沒有功能同等項目。一些範例包括 、`dependsOn``essential`、`ipcMode`、 `name`和 `pidMode`。如需詳細資訊，請參閱 [EcsTaskDetails](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskDetails.html) 和 [TaskContainerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html)。

  此外，某些`ContainerProperties`參數在 `EcsProperties` 結構中沒有對等參數或應用程式。在 中[https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html#Batch-Type-EcsProperties-taskProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html#Batch-Type-EcsProperties-taskProperties)， `container` 已取代為 ，`containers`因此新物件最多可接受 10 個元素。如需詳細資訊，請參閱 [RegisterJobDefinition：containerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-containerProperties) 和 [EcsTaskProperties：containers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html)。
+ `taskRoleArn` 功能上等同於 `jobRoleArn`。如需詳細資訊，請參閱 [EcsTaskProperties：taskRoleArn](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html) 和 [ContainerProperties：jobRoleArn](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html)。
+ 您可以在 `EcsProperties`結構中包含一 (1) 到十 (10) 個容器。如需詳細資訊，請參閱 [EcsTaskProperties：containers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html)。
+ `taskProperties` 和 instanceTypes 物件是陣列，但目前只接受一個元素。例如，[EcsProperties：taskProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html) 和 [NodeRangeProperty：instanceTypes](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeRangeProperty.html)。

## Amazon ECS 的多容器任務定義
<a name="multi-container-ecs-updates"></a>

為了容納 Amazon ECS 的多容器結構，某些 API 資料類型不同。例如 
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-ecsProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-ecsProperties) 與單一容器定義`containerProperties`中的層級相同。如需詳細資訊，請參閱《 *AWS Batch API 參考指南*》中的 [EcsProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html)。
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html#Batch-Type-EcsProperties-taskProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html#Batch-Type-EcsProperties-taskProperties) 包含為 Amazon ECS 任務定義的屬性。如需詳細資訊，請參閱《 *AWS Batch API 參考指南*》中的 [EcsProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html)。
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html#Batch-Type-EcsTaskProperties-containers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html#Batch-Type-EcsTaskProperties-containers) 在單一容器定義`containerProperties`中包含與 類似的資訊。主要差別在於`containers`可讓您定義最多十個容器。如需詳細資訊，請參閱《 *AWS Batch API 參考指南*》中的 [ECSTaskProperties：containers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html)。
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-essential](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-essential) 參數指出容器如何影響任務。所有基本容器都必須成功完成 （以 0 結束），任務才能繼續。如果標示為基本的容器失敗 （結束為非 0)，則任務會失敗。

  預設值為 `true`，且至少有一個容器必須標記為 `essential`。如需詳細資訊，請參閱 [`essential` API 參考指南](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-essential)中的「*AWS Batch *」。
+ 使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-dependsOn](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-dependsOn) 參數，您可以定義容器相依性的清單。如需詳細資訊，請參閱 [`dependsOn` API 參考指南](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-dependsOn)中的「*AWS Batch *」。
**注意**  
`dependsOn` 清單的複雜性和相關聯的容器執行時間可能會影響任務的開始時間。如果相依性需要很長時間才能執行，任務將保持 `STARTING` 狀態，直到完成為止。

如需 `ecsProperties`和 結構的詳細資訊，請參閱 [ecsProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-ecsProperties) 的 [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#API_RegisterJobDefinition_RequestBody) 請求語法。

## Amazon EKS 的多容器任務定義
<a name="multi-container-eks-updates"></a>

為了容納 Amazon EKS 的多容器結構，某些 API 資料類型不同。例如 
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainer.html#Batch-Type-EksContainer-name](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainer.html#Batch-Type-EksContainer-name) 是容器的唯一識別符。單一容器不需要此物件，但在 Pod 中定義多個容器時需要此物件。如果`name`未針對單一容器定義 ，則會`default`套用預設名稱 。
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html#Batch-Type-EksPodProperties-initContainers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html#Batch-Type-EksPodProperties-initContainers) 在 [eksPodProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html) 資料類型中定義。它們會在應用程式容器之前執行，一律會執行到完成，而且必須在下一個容器啟動之前成功完成。

  這些容器已向 Amazon EKS Connector 代理程式註冊，並在 Amazon Elastic Kubernetes Service 後端資料存放區中保留註冊資訊。`initContainers` 物件最多可接受十 (10) 個元素。如需詳細資訊，請參閱 *Kubernetes 文件*中的[初始化容器](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)。
**注意**  
`initContainers` 物件可能會影響任務的開始時間。如果 `initContainers`需要很長時間才能執行，任務將保持 `STARTING` 狀態，直到完成為止。
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html#Batch-Type-EksPodProperties-shareProcessNamespace](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html#Batch-Type-EksPodProperties-shareProcessNamespace) 指出 Pod 中的容器是否可以共用相同的程序命名空間。預設值為 `false`。將此設定為 `true`，以啟用容器查看位於相同 Pod 中其他容器中的程序並發出訊號。
+ 每個容器都很重要。所有容器都必須成功完成 （以 0 結束），任務才能成功。如果一個容器失敗 （除了 0 之外結束），則任務會失敗。

如需 `eksProperties`和 結構的詳細資訊，請參閱 [eksProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-eksProperties) 的 [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#API_RegisterJobDefinition_RequestBody) 請求語法。

# 使用 EcsProperties 的 Reference： AWS Batch job 案例
<a name="multi-container-jobs-scenarios"></a>

為了說明如何根據您的需求`EcsProperties`來建構 使用 AWS Batch 的任務定義，本主題提供下列[https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html)承載。您可以將這些範例複製到檔案中，根據您的需求自訂範例，然後使用 AWS Command Line Interface (AWS CLI) 呼叫 `RegisterJobDefinition`。

## AWS Batch Amazon EC2 上的 Amazon ECS 任務
<a name="multi-container-scenario-on-ec2"></a>

以下是 Amazon Elastic Compute Cloud 上的 Amazon Elastic Container Service AWS Batch 任務範例：

```
{
    "jobDefinitionName": "multicontainer-ecs-ec2",
    "type": "container",
    "ecsProperties": {
        "taskProperties": [
          {
            "containers": [
              {
                "name": "c1",
                "essential": false,
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "2"
                  },
                  {
                    "type": "MEMORY",
                    "value": "4096"
                  }
                ]
              },
              {
                "name": "c2",
                "essential": false,
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "2"
                  },
                  {
                    "type": "MEMORY",
                    "value": "4096"
                  }
                ]
              },
              {
                "name": "c3",
                "essential": true,
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "firelensConfiguration": {
                  "type": "fluentbit",
                  "options": {
                    "enable-ecs-log-metadata": "true"
                  }
                 },
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "6"
                  },
                  {
                    "type": "MEMORY",
                    "value": "12288"
                  }
                ]
              }
            ]
          }
        ]
  }
}
```

## AWS Batch Fargate 上的 Amazon ECS 任務
<a name="multi-containers-ecs-on-fargate"></a>

以下是 上的 Amazon Elastic Container Service AWS Batch 任務範例 AWS Fargate：

```
{
    "jobDefinitionName": "multicontainer-ecs-fargate",
    "type": "container",
    "platformCapabilities": [
        "FARGATE"
    ],
    "ecsProperties": {
        "taskProperties": [
          {
            "containers": [
              {
                "name": "c1",
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "2"
                  },
                  {
                    "type": "MEMORY",
                    "value": "4096"
                  }
                ]
              },
              {
                "name": "c2",
                "essential": true,
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "6"
                  },
                  {
                    "type": "MEMORY",
                    "value": "12288"
                  }
                ]
              }
            ],
            "executionRoleArn": "arn:aws:iam::1112223333:role/ecsTaskExecutionRole"
          }
        ]
  }
}
```

## AWS Batch Amazon EKS 的任務
<a name="multi-containers-eks-example"></a>

以下是 Amazon Elastic Kubernetes Service AWS Batch 任務的範例：

```
{
  "jobDefinitionName": "multicontainer-eks",
  "type": "container",
  "eksProperties": {
    "podProperties": {
      "shareProcessNamespace": true,
      "initContainers": [
        {
          "name": "init-container",
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "echo"
          ],
          "args": [
            "hello world"
          ],
          "resources": {
            "requests": {
              "cpu": "1",
              "memory": "512Mi"
            }
          }
        },
        {
          "name": "init-container-2",
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "echo",
            "my second init container"
          ],
          "resources": {
            "requests": {
              "cpu": "1",
              "memory": "512Mi"
            }
          }
        }
      ],
      "containers": [
        {
          "name": "c1",
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "echo world"
         ],
          "resources": {
            "requests": {
              "cpu": "1",
              "memory": "512Mi"
            }
          }
        },
        {
          "name": "sleep-container",
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "sleep",
            "20"
          ],
          "resources": {
            "requests": {
              "cpu": "1",
              "memory": "512Mi"
            }
          }
        }
      ]
    }
  }
}
```

## 每個節點具有多個容器的 MNP AWS Batch 任務
<a name="multi-container-ecs-mnp"></a>

以下是每個節點具有多個容器的多節點平行 (MNP) AWS Batch 任務範例：

```
{
  "jobDefinitionName": "multicontainer-mnp",
  "type": "multinode",
  "nodeProperties": {
    "numNodes": 6,
    "mainNode": 0,
    "nodeRangeProperties": [
      {
        "targetNodes": "0:5",
        "ecsProperties": {
          "taskProperties": [
            {
              "containers": [
                {
                  "name": "range05-c1",
                  "command": [
                    "echo",
                    "hello world"
                  ],
                  "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                  "resourceRequirements": [
                    {
                      "type": "VCPU",
                      "value": "2"
                    },
                    {
                      "type": "MEMORY",
                      "value": "4096"
                    }
                  ]
                },
                {
                  "name": "range05-c2",
                  "command": [
                    "echo",
                    "hello world"
                  ],
                  "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                  "resourceRequirements": [
                    {
                      "type": "VCPU",
                      "value": "2"
                    },
                    {
                      "type": "MEMORY",
                      "value": "4096"
                    }
                  ]
                }
              ]
            }
          ]
        }
      }
    ]
  }
}
```

# 使用 awslogs 日誌驅動程式
<a name="using_awslogs"></a>

根據預設， 會 AWS Batch 啟用`awslogs`日誌驅動程式，將日誌資訊傳送至 CloudWatch Logs。您可以使用此功能，在一個方便的位置檢視與容器不同的日誌，並防止容器日誌佔用容器執行個體上的磁碟空間。本主題可協助您在任務定義中設定`awslogs`日誌驅動程式。

**注意**  
在 AWS Batch 主控台中，您可以在建立任務定義時，於**記錄組態**區段中設定`awslogs`日誌驅動程式。

**注意**  
您任務中的容器所記錄的資訊類型，主要取決於其`ENTRYPOINT`命令。根據預設，擷取的日誌會顯示您在本機執行容器時通常在互動式終端機中看到的命令輸出，也就是 `STDOUT`和 `STDERR` I/O 串流。`awslogs` 日誌驅動程式只會將這些日誌從 Docker 傳遞至 CloudWatch Logs。如需 Docker 日誌處理方式 (包括擷取不同檔案資料或串流的替代方法) 的詳細資訊，請參閱 Docker 文件中的[檢視容器或服務的日誌](https://docs.docker.com/config/containers/logging/)。

若要將系統日誌從容器執行個體傳送至 CloudWatch Logs，請參閱 [搭配 使用 CloudWatch Logs AWS Batch](using_cloudwatch_logs.md)。如需 CloudWatch Logs 的詳細資訊，請參閱 *《Amazon CloudWatch Logs 使用者指南》*中的[監控日誌檔案](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html)和 [CloudWatch Logs 配額](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)。

## AWS Batch JobDefiniton 資料類型中的 awslogs 日誌驅動程式選項
<a name="create_awslogs_logdriver_options"></a>

`awslogs` 日誌驅動程式支援 AWS Batch 任務定義中的下列選項。如需詳細資訊，請參閱 Docker 文件中的 [CloudWatch Logs 記錄驅動程式](https://docs.docker.com/config/containers/logging/awslogs/)。

`awslogs-region`  
必要：否  
指定`awslogs`日誌驅動程式應傳送 Docker 日誌的區域。根據預設，使用的 區域與任務的區域相同。您可以選擇從不同區域中的任務將所有日誌傳送到 CloudWatch Logs 中的單一區域。這樣做可讓它們從一個位置全部可見。或者，您可以依區域分隔它們，以取得更精細的方法。不過，當您選擇此選項時，請確定指定的日誌群組存在於您指定的區域中。

`awslogs-group`  
必要：選用  
使用 `awslogs-group`選項，您可以指定`awslogs`日誌驅動程式傳送其日誌串流的目標日誌群組。如果未指定，`aws/batch/job`則會使用 。

`awslogs-stream-prefix`  
必要：選用  
使用 `awslogs-stream-prefix`選項，您可以將日誌串流與指定的字首，以及容器所屬 AWS Batch 任務的 Amazon ECS 任務 ID 建立關聯。如果您使用此選項指定前綴，則日誌串流會使用下列格式：  

```
prefix-name/default/ecs-task-id
```

`awslogs-datetime-format`  
必要：否  
此選項會以 Python `strftime` 格式定義多行開始模式。日誌訊息包含符合模式的行，以及任何不符合模式的下列行。因此，符合的行是日誌訊息之間的分隔符號。  
使用此格式的一個使用案例範例是用於剖析輸出，例如堆疊傾印，在其他情形下這可能會記錄在多個項目中。正確的模式可允許將它擷取在單一項目中。  
如需詳細資訊，請參閱 [awslogs-datetime-format](https://docs.docker.com/config/containers/logging/awslogs/#awslogs-datetime-format)。  
如果 `awslogs-datetime-format` 和 `awslogs-multiline-pattern` 都設定，則一律以此選項優先。  
多行記錄會執行常規表達式剖析並比對所有日誌訊息。這可能會對記錄效能造成負面影響。

`awslogs-multiline-pattern`  
必要：否  
此選項使用規則表達式來定義多行開始模式。日誌訊息包含符合模式的行，以及任何不符合模式的下列行。因此，相符的行是日誌訊息之間的分隔符號。  
如需詳細資訊，請參閱 Docker 文件中的 [awslogs-multiline-pattern](https://docs.docker.com/config/containers/logging/awslogs/#awslogs-multiline-pattern)。  
如果同時設定 `awslogs-datetime-format`，會忽略此選項。  
多行記錄會執行常規表達式剖析並比對所有日誌訊息。這可能會對記錄效能造成負面影響。

`awslogs-create-group`  
必要：否  
指定您是否希望自動建立日誌群組。若未指定此選項，則預設為 `false`。  
不建議使用此選項。我們建議您在每個任務嘗試建立日誌群組時，事先使用 CloudWatch Logs [CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html) API 動作建立日誌群組，增加任務失敗的機會。
在您嘗試使用 之前，執行角色的 IAM 政策必須包含 `logs:CreateLogGroup`許可`awslogs-create-group`。

## 在任務定義中指定日誌組態
<a name="specify-log-config"></a>

根據預設， 會 AWS Batch 啟用`awslogs`日誌驅動程式。本節說明如何自訂任務的`awslogs`日誌組態。如需詳細資訊，請參閱[建立單一節點任務定義](create-job-definition.md)。

下列日誌組態 JSON 程式碼片段具有為每個任務指定的`logConfiguration`物件。一個用於將日誌傳送至名為 之日誌群組的 WordPress 任務`awslogs-wordpress`，另一個用於將日誌傳送至名為 之日誌群組的 MySQL 容器`awslogs-mysql`。兩個容器使用的日誌串流前綴皆為 `awslogs-example`。

```
"logConfiguration": {
    "logDriver": "awslogs",
    "options": {
        "awslogs-group": "awslogs-wordpress",
        "awslogs-stream-prefix": "awslogs-example"
    }
}
```

```
"logConfiguration": {
    "logDriver": "awslogs",
    "options": {
        "awslogs-group": "awslogs-mysql",
        "awslogs-stream-prefix": "awslogs-example"
    }
}
```

在 AWS Batch 主控台中，`wordpress`指定任務定義的日誌組態，如下圖所示。

![\[Log configuration interface showing awslogs driver with group and stream prefix options.\]](http://docs.aws.amazon.com/zh_tw/batch/latest/userguide/images/awslogs-console-config.png)


在任務定義日誌組態中向`awslogs`日誌驅動程式註冊任務定義後，您可以使用該任務定義提交任務，以開始將日誌傳送至 CloudWatch Logs。如需詳細資訊，請參閱[教學課程：提交任務](submit_job.md)。

# 指定敏感資料
<a name="specifying-sensitive-data"></a>

使用 時 AWS Batch，您可以將敏感資料存放在秘密或 AWS Systems Manager 參數存放區參數中 AWS Secrets Manager ，然後在任務定義中加以參考，藉此將敏感資料注入任務。

秘密可以透過以下方式公開至任務：
+ 若要將敏感資料插入容器做為環境變數，請使用 `secrets`任務定義參數。
+ 若要在任務的日誌組態中參考敏感資訊，請使用`secretOptions`任務定義參數。

**Topics**
+ [

# 使用 Secrets Manager 指定敏感資料
](specifying-sensitive-data-secrets.md)
+ [

# 使用 Systems Manager 參數存放區指定敏感資料
](specifying-sensitive-data-parameters.md)

# 使用 Secrets Manager 指定敏感資料
<a name="specifying-sensitive-data-secrets"></a>

使用 AWS Batch，您可以將敏感資料儲存在 AWS Secrets Manager 秘密中，然後在任務定義中參考它們，藉此將敏感資料注入任務。存放在 Secrets Manager 秘密中的敏感資料可以做為環境變數或日誌組態的一部分公開給任務。

當您將秘密做為環境變數插入時，可以指定 JSON 金鑰或要插入的秘密版本。此程序可協助您控制向任務公開的敏感資料。如需有關秘密版本控制的詳細資訊，請參閱《AWS Secrets Manager 使用者指南》**中的 [AWS Secrets Manager重要術語和概念](https://docs.aws.amazon.com/secretsmanager/latest/userguide/terms-concepts.html#term_secret)。

## 使用 Secrets Manager 指定敏感資料的考量事項
<a name="secrets-considerations"></a>

使用 Secrets Manager 為任務指定敏感資料時，應考慮下列事項。
+ 若要使用特定 JSON 金鑰或版本的秘密注入秘密，您運算環境中的容器執行個體必須安裝 1.37.0 版或更新版本的 Amazon ECS 容器代理程式。不過，我們建議您使用最新版的容器代理。如需有關檢查代理程式版本和更新至最新版本的資訊，請參閱[《Amazon Elastic Container Service 開發人員指南》中的更新 Amazon ECS 容器代理](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)程式。 **

  若要將秘密的完整內容插入為環境變數，或在日誌組態中插入秘密，您的容器執行個體必須具有 1.23.0 版或更新版本的容器代理程式。
+ 僅支援存放文字資料的秘密，這些秘密是使用 [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) API 的 `SecretString` 參數建立的。不支援存放二進位資料的秘密，這是使用 [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) API `SecretBinary` 參數建立的秘密。
+ 使用參考 Secrets Manager 秘密的任務定義來擷取任務的敏感資料時，如果您也使用介面 VPC 端點，則必須為 Secrets Manager 建立介面 VPC 端點。如需詳細資訊，請參閱 *《AWS Secrets Manager 使用者指南》*中的[搭配使用 Secrets Manager 與 VPC 端點](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)。
+ 當任務一開始啟動時，會將敏感資料注入您的任務。如果後續更新或輪換秘密，任務不會自動收到更新的值。您必須啟動新任務，以強制服務啟動具有更新秘密值的新任務。

## AWS Batch 秘密所需的 IAM 許可
<a name="secrets-iam"></a>

若要使用此功能，您必須擁有執行角色，並在任務定義中參考它。這可讓容器代理程式提取必要的 Secrets Manager 資源。如需詳細資訊，請參閱[AWS Batch IAM 執行角色](execution-IAM-role.md)。

若要讓您存取您建立的 Secrets Manager 秘密，請手動將下列許可新增為執行角色的內嵌政策。如需詳細資訊，請參閱 *IAM User Guide* 中的 [Adding and Removing IAM Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `secretsmanager:GetSecretValue` - 如果您要參考 Secrets Manager 秘密，則需要此項目。
+ `kms:Decrypt` - 只有在您的秘密使用自訂的 KMS 金鑰而非預設金鑰時，才需要此項目。您的自訂金鑰的 ARN 應該新增為資源。

下列內嵌政策範例新增必要許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:777777777777:secret:<secret_name>",
                "arn:aws:kms:us-east-2:777777777777:key/<key_id>"
            ]
        }
    ]
}
```

------

## 插入敏感資料作為環境變數
<a name="secrets-envvar"></a>

您可以在任務定義中指定下列項目：
+ 包含在任務中設定的環境變數名稱的`secrets`物件
+ Secrets Manager 秘密的 Amazon Resource Name (ARN)
+ 包含要呈現給任務之敏感資料的其他參數

下列範例示範了必須為 Secrets Manager 秘密指定的完整語法。

```
arn:aws:secretsmanager:region:aws_account_id:secret:secret-name:json-key:version-stage:version-id
```

以下部分說明其他參數。這些參數是選用的。不過，如果您不使用它們，則必須包含冒號`:`才能使用預設值。以下提供範例深入說明。

`json-key`  
使用您要設為環境變數值的值，來指定金鑰/值對中的金鑰名稱。僅支援 JSON 格式的值。如果您沒有指定 JSON 金鑰，則會使用秘密的完整內容。

`version-stage`  
指定您要使用之秘密版本的預備標籤。如果指定了版本預備標籤，就無法指定版本 ID。如果未指定版本階段，則預設會擷取具有 `AWSCURRENT` 階段標籤的秘密。  
預備標籤會用來在不同版本的秘密更新或輪換時加以追蹤。每個版本的秘密都有一或多個預備標籤和 ID。如需詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的 [AWS Secrets Manager 的關鍵術語和概念](https://docs.aws.amazon.com/secretsmanager/latest/userguide/terms-concepts.html#term_secret)。

`version-id`  
針對您要使用的秘密版本，指定其唯一識別符。如果指定了版本 ID，就無法指定版本預備標籤。如果未指定版本 ID，則預設會擷取具有 `AWSCURRENT` 階段標籤的秘密。  
版本 ID 會用來在不同版本的秘密更新或輪換時加以追蹤。每個版本的秘密都有 ID。如需詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的 [AWS Secrets Manager 的關鍵術語和概念](https://docs.aws.amazon.com/secretsmanager/latest/userguide/terms-concepts.html#term_secret)。

### 容器定義範例
<a name="secrets-examples"></a>

下列範例示範您可以在容器定義中參考 Secrets Manager 秘密的方法。

**Example 參考完整秘密**  
以下是任務定義的程式碼片段，顯示參考 Secrets Manager 秘密全文時的格式。  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
    }]
  }]
}
```

**Example 參考秘密中的特定金鑰**  
以下顯示來自 [ >get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) 命令的範例輸出，其中顯示秘密的內容，以及與其相關聯的版本預備標籤和版本 ID。  

```
{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "VersionId": "871d9eca-18aa-46a9-8785-981dd39ab30c",
    "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1581968848.921
}
```
在 ARN 結尾指定金鑰名稱，來在容器定義中參考上一個輸出的特定金鑰。  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::"
    }]
  }]
}
```

**Example 參考特定秘密版本**  
以下顯示來自 [ >describe-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html) 命令的範例輸出，其中顯示秘密的未加密內容，以及秘密所有版本的中繼資料。  

```
{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "Description": "Example of a secret containing application authorization data.",
    "RotationEnabled": false,
    "LastChangedDate": 1581968848.926,
    "LastAccessedDate": 1581897600.0,
    "Tags": [],
    "VersionIdsToStages": {
        "871d9eca-18aa-46a9-8785-981dd39ab30c": [
            "AWSCURRENT"
        ],
        "9d4cb84b-ad69-40c0-a0ab-cead36b967e8": [
            "AWSPREVIOUS"
        ]
    }
}
```
在 ARN 結尾指定金鑰名稱，來在容器定義中參考上一個輸出的特定版本預備標籤。  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::AWSPREVIOUS:"
    }]
  }]
}
```
在 ARN 結尾指定金鑰名稱，來在容器定義中參考上一個輸出的特定版本 ID。  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::9d4cb84b-ad69-40c0-a0ab-cead36b967e8"
    }]
  }]
}
```

**Example 參考秘密的特定金鑰和版本預備標籤**  
以下說明如何參考秘密中的特定金鑰和特定版本預備標籤。  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1:AWSPREVIOUS:"
    }]
  }]
}
```
若要指定特定的金鑰和版本 ID，請使用下列語法。  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::9d4cb84b-ad69-40c0-a0ab-cead36b967e8"
    }]
  }]
}
```

## 在日誌組態中注入敏感資料
<a name="secrets-logconfig"></a>

當您在任務定義`logConfiguration`中指定 時，您可以使用要在容器中設定的日誌驅動程式選項名稱`secretOptions`，以及包含要呈現給容器之敏感資料之 Secrets Manager 秘密的完整 ARN。

以下是任務定義的程式碼片段，顯示參考 Secrets Manager 秘密時的格式。

```
{
  "containerProperties": [{
    "logConfiguration": [{
      "logDriver": "splunk",
      "options": {
        "splunk-url": "https://cloud.splunk.com:8080"
      },
      "secretOptions": [{
        "name": "splunk-token",
        "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
      }]
    }]
  }]
}
```

## 建立 AWS Secrets Manager 秘密
<a name="secrets-create-secret"></a>

您可以使用 Secrets Manager 主控台為您的敏感資料建立秘密。如需詳細資訊，請參閱 *《AWS Secrets Manager 使用者指南》*中的[建立基本秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)。

**建立基本秘密**

使用 Secrets Manager 為您的敏感資料建立秘密。

1. 開啟位於的 Secrets Manager 主控台[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 選擇 **Store a new secret** (存放新機密)。

1. 針對 **Select secret type (選取秘密類型)**，選擇 **Other type of secrets (其他秘密類型)**。

1. 將自訂秘密詳細資訊指定為 **Key (金鑰)** 與 **Value (值)** 對。例如，您可以指定 `UserName` 的金鑰，然後提供適當的使用者名稱作為其值。新增名為 `Password` 的第二個金鑰，再輸入密碼文字作為其值。您也可以新增資料庫名稱、伺服器地址或 TCP 連接埠的項目。您可以新增任意數量的對組用以存放您需要的資訊。

   或者，您可以選擇 **Plaintext (純文字)** 標籤，然後以任何您喜歡的方式輸入秘密值。

1. 選擇您要用來加密秘密中受保護文字的 AWS KMS 加密金鑰。如果您未選擇一個金鑰，則 Secrets Manager 將查看帳戶是否有預設金鑰，若有便會使用該金鑰。如果預設金鑰不存在，Secrets Manager 將自動為您建立一個。您也可以選擇 **Add new key** (新增金鑰) 來建立專供此秘密使用的自訂 KMS 金鑰。若要建立自己的 KMS 金鑰，您必須擁有在帳戶中建立 KMS 金鑰的許可。

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

1. 針對 **Secret name (秘密名稱)**，請輸入可選的路徑與名稱，例如 **production/MyAwesomeAppSecret** 或 **development/TestSecret**，然後選擇 **Next (下一步)**。您也可以選擇性新增描述，協助您日後回憶起此秘密的用途。

   秘密名稱必須是 ASCII 字母、數字或下列任一字元：/\$1\$1=.@-

1. (選用) 在此階段，您可以為秘密設定輪換。針對此程序，維持 **Disable automatic rotation (停用自動輪換)**，然後選擇 **Next (下一步)**。

   如需有關如何在新的或現有的秘密上設定輪換的資訊，請參閱[輪換您的 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)。

1. 檢視您的設定，然後選擇 **Store secret** (存放秘密) 以儲存您在 Secrets Manager 中輸入作為新秘密的所有內容。

# 使用 Systems Manager 參數存放區指定敏感資料
<a name="specifying-sensitive-data-parameters"></a>

使用 時 AWS Batch，您可以將敏感資料儲存在參數存放區參數中 AWS Systems Manager ，然後在容器定義中參考，藉此將敏感資料注入容器。

**Topics**
+ [

## 使用 Systems Manager 參數存放區指定敏感資料的考量事項
](#secrets--parameterstore-considerations)
+ [

## AWS Batch 秘密所需的 IAM 許可
](#secrets-iam-parameters)
+ [

## 將敏感資料注入為環境變數
](#secrets-envvar-parameters)
+ [

## 在日誌組態中注入敏感資料
](#secrets-logconfig-parameters)
+ [

## 建立 AWS Systems Manager 參數存放區參數
](#secrets-create-parameter)

## 使用 Systems Manager 參數存放區指定敏感資料的考量事項
<a name="secrets--parameterstore-considerations"></a>

使用 Systems Manager 參數存放區參數來指定容器的敏感資料時，應考慮以下事項。
+ 此功能需要您的容器執行個體具有 1.23.0 版或更新版本的容器代理程式。不過，我們建議您使用最新版的容器代理。如需有關檢查代理程式版本和更新至最新版本的資訊，請參閱[《Amazon Elastic Container Service 開發人員指南》中的更新 Amazon ECS 容器代理](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)程式。 **
+ 最初啟動容器時，會將敏感資料注入您任務的容器中。如果後續更新或輪換秘密或參數存放區參數，則容器不會自動收到更新的值。您必須啟動新的任務，才能強制啟動具有更新秘密的新任務。

## AWS Batch 秘密所需的 IAM 許可
<a name="secrets-iam-parameters"></a>

若要使用此功能，您必須擁有執行角色，並在任務定義中參考它。這可讓 Amazon ECS 容器代理程式提取必要的 AWS Systems Manager 資源。如需詳細資訊，請參閱[AWS Batch IAM 執行角色](execution-IAM-role.md)。

若要讓您存取您建立的 AWS Systems Manager 參數存放區參數，請手動將下列許可新增為執行角色的內嵌政策。如需詳細資訊，請參閱 *IAM User Guide* 中的 [Adding and Removing IAM Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `ssm:GetParameters` - 如果您在任務定義中參考 Systems Manager 參數存放區參數，才需要此項目。
+ `secretsmanager:GetSecretValue` - 如果您直接參考 Secrets Manager 秘密，或者您的 Systems Manager 參數存放區參數參考任務定義中的 Secrets Manager 秘密，才需要此項目。
+ `kms:Decrypt` - 只有在您的秘密使用自訂 KMS 金鑰而非預設金鑰時，才需要此項目。您的自訂金鑰的 ARN 應該新增為資源。

下列內嵌政策範例新增必要許可：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters",
                "secretsmanager:GetSecretValue",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-2:999999999999:parameter/<parameter_name>",
                "arn:aws:secretsmanager:us-east-2:999999999999:secret:<secret_name>",
                "arn:aws:kms:us-east-2:999999999999:key/<key_id>"
            ]
        }
    ]
}
```

------

## 將敏感資料注入為環境變數
<a name="secrets-envvar-parameters"></a>

在您的容器定義內，將 `secrets` 指定為要在容器中設定的環境變數名稱，以及 Systems Manager 參數存放區參數 (含有要呈現給容器的敏感資料) 的完整 ARN。

以下是任務定義的程式碼片段，顯示參考 Systems Manager 參數存放區參數時的格式。如果 Systems Manager 參數存放區參數與您啟動的任務位於相同的區域中，則您可以使用參數的完整 ARN 或名稱。如果參數存在於不同區域，則必須指定完整 ARN。

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
    }]
  }]
}
```

## 在日誌組態中注入敏感資料
<a name="secrets-logconfig-parameters"></a>

在您的容器定義內，指定 `logConfiguration` 時，您可用要在容器中設定的日誌驅動程式選項名稱指定 `secretOptions`，以及 Systems Manager 參數存放區參數 (含有要呈現給容器的敏感資料) 的完整 ARN。

**重要**  
如果 Systems Manager 參數存放區參數與您啟動的任務位於相同的區域中，則您可以使用參數的完整 ARN 或名稱。如果參數存在於不同區域，則必須指定完整 ARN。

以下是任務定義的程式碼片段，顯示參考 Systems Manager 參數存放區參數時的格式。

```
{
  "containerProperties": [{
    "logConfiguration": [{
      "logDriver": "fluentd",
      "options": {
        "tag": "fluentd demo"
      },
      "secretOptions": [{
        "name": "fluentd-address",
        "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
      }]
    }]
  }]
}
```

## 建立 AWS Systems Manager 參數存放區參數
<a name="secrets-create-parameter"></a>

您可以使用 AWS Systems Manager 主控台為您的敏感資料建立 Systems Manager 參數存放區參數。如需詳細資訊，請參閱 *《AWS Systems Manager 使用者指南》*中的[演練：在命令中建立和使用參數 (主控台)](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-console.html)。

**建立參數存放區參數**

1. 在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 AWS Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Parameter Store (參數存放區)**、**Create parameter (建立參數)**。

1. 針對 **Name (名稱)**，輸入階層和參數名稱。例如，輸入 `test/database_password`。

1. 針對 **Description (描述)**，輸入選擇性描述。

1. 在 **Type (類型)** 中選擇 **String**、**StringList** 或 **SecureString**。
**注意**  
如果您選擇 **SecureString (SecureString)**，將會出現 **KMS Key ID (KMS 金鑰 ID)** 欄位。如果您不提供 KMS 金鑰 ID、KMS 金鑰 ARN、別名名稱或別名 ARN，系統會使用 `alias/aws/ssm`。這是 Systems Manager 的預設 KMS 金鑰。若要避免使用此金鑰，請選擇自訂金鑰。如需詳細資訊，請參閱 *《AWS Systems Manager 使用者指南》*中的[使用安全字串參數](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-about.html)。
當您在主控台使用 `key-id` 參數及自訂 KMS 金鑰別名名稱或別名 ARN 建立安全字串參數時，您必須在別名前面指定字首 `alias/`。以下是 ARN 範例：  

     ```
     arn:aws:kms:us-east-2:123456789012:alias/MyAliasName
     ```
下列是別名名稱範例：  

     ```
     alias/MyAliasName
     ```

1. 針對 **Value (值)**，輸入一個值。例如 `MyFirstParameter`。如果您選擇 **SecureString**，則會完全按照您輸入的方式遮罩該值。

1. 選擇 **Create parameter (建立參數)**。

# 任務的私有登錄檔身分驗證
<a name="private-registry"></a>

使用 之任務的私有登錄檔身分驗證 AWS Secrets Manager 可讓您安全地存放登入資料，然後在任務定義中參考登入資料。這可讓您參考存在於 外部私有登錄檔中的容器映像 AWS ，這些登錄檔需要在您的任務定義中進行身分驗證。Amazon EC2 執行個體和 Fargate 上託管的任務支援此功能。

**重要**  
如果您的任務定義參考存放在 Amazon ECR 中的映像，則此主題不適用。如需詳細資訊，請參閱 *Amazon Elastic Container Registry User Guide* 中的 [Using Amazon ECR Images with Amazon ECS](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html)。

對於在 Amazon EC2 執行個體上託管的任務，此功能需要版本 `1.19.0`或更新版本的容器代理程式。不過，我們建議您使用最新版的容器代理。如需有關如何檢查代理程式版本和更新至最新版本的資訊，請參閱[《Amazon Elastic Container Service 開發人員指南》中的更新 Amazon ECS 容器代理](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)程式。 **

對於在 Fargate 上託管的任務，此功能需要平台版本 `1.2.0` 或更新版本。如需詳細資訊，請參閱《*Amazon Elastic Container Service 開發人員指南*》中的 [AWS Fargate Linux 平台版本](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform-linux-fargate.html)。

在您的容器定義內，使用您所建立的秘密的詳細資訊來指定 `repositoryCredentials` 物件。您參考的秘密可以來自與使用它的任務不同的 AWS 區域 或不同的 帳戶。

**注意**  
使用 AWS Batch API AWS CLI或 AWS SDK 時，如果秘密與您啟動 AWS 區域 的任務位於相同的 中，您可以使用秘密的完整 ARN 或名稱。如果此秘密已存在於不同帳戶中，則必須指定秘密的完整 ARN。使用 時 AWS 管理主控台，一律必須指定秘密的完整 ARN。

以下是任務定義的程式碼片段，顯示所需的參數：

```
"containerProperties": [
  {
    "image": "private-repo/private-image",
    "repositoryCredentials": {
      "credentialsParameter": "arn:aws:secretsmanager:region:123456789012:secret:secret_name"
    }
  }
]
```

# 私有登錄檔身分驗證所需的 IAM 許可
<a name="private-auth-iam"></a>

需要執行角色才能使用此功能。這可讓容器代理程式提取容器映像。如需詳細資訊，請參閱[AWS Batch IAM 執行角色](execution-IAM-role.md)。

若要提供對您建立之秘密的存取權，請將下列許可新增為執行角色的內嵌政策。如需詳細資訊，請參閱[新增和移除 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `secretsmanager:GetSecretValue`
+ `kms:Decrypt` - 只有在您的金鑰使用自訂 KMS 金鑰而非預設金鑰時，才需要此項目。您的自訂金鑰的 Amazon Resource Name (ARN) 必須新增為資源。

下列為新增許可的內嵌政策範例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:secret_name",
                "arn:aws:kms:us-east-1:123456789012:key/key_id"
            ]
        }
    ]
}
```

------

# 教學課程：建立私有登錄檔身分驗證的秘密
<a name="private-auth-enable"></a>

完成下列步驟，以使用 為您的私有登錄檔登入資料建立秘密 AWS Secrets Manager。

**建立基本秘密**

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

1. 選擇**儲存新機密**。

1. 針對 **Select secret type (選取秘密類型)**，選擇 **Other type of secrets (其他秘密類型)**。

1. 選取 **Plaintext (純文字)**，然後使用下列格式輸入您的私有登錄登入資料：

   ```
   {
     "username" : "privateRegistryUsername",
     "password" : "privateRegistryPassword"
   }
   ```

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

1. 針對 **Secret name** (秘密名稱)，請輸入選用的路徑與名稱，例如 **production/MyAwesomeAppSecret** 或 **development/TestSecret**，然後選擇 **Next** (下一步)。您也可以選擇性新增描述，協助您日後回憶起此秘密的用途。

   秘密名稱必須是 ASCII 字母、數字或下列任一字元：`/_+=.@-`。

1. (選用) 在此階段，您可以為秘密設定輪換。針對此程序，維持 **Disable automatic rotation (停用自動輪換)**，然後選擇 **Next (下一步)**。

   如需如何在新的或現有的秘密上設定輪換的指示，請參閱[輪換您的 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)。

1. 檢閱您的設定，然後選擇 **Store secret** (存放秘密) 以儲存您在 Secrets Manager 中輸入作為新秘密的所有內容。

註冊任務定義並在**私有登錄**檔下，開啟**私有登錄檔身分驗證**。然後，在 **Secrets Manager ARN 或名稱**中，輸入密碼的 Amazon Resource Name (ARN)。如需詳細資訊，請參閱[私有登錄檔身分驗證所需的 IAM 許可](private-auth-iam.md)。

# Amazon EFS 磁碟區
<a name="efs-volumes"></a>

Amazon Elastic File System (Amazon EFS) 提供簡單、可擴展的檔案儲存，可與您的 AWS Batch 任務搭配使用。利用 Amazon EFS，儲存容量即可有彈性。當您新增和移除檔案時，它會自動擴展。您的應用程式可在需要時具備所需的儲存容量。

您可以使用 Amazon EFS 檔案系統搭配 AWS Batch 在容器執行個體機群之間匯出檔案系統資料。如此一來，您的任務就可以存取相同的持久性儲存。但您必須在 Docker 常駐程式啟動之前，先設定您的容器執行個體 AMI，以掛載 Amazon EFS 檔案系統。此外，您的任務定義必須參考容器執行個體上的磁碟區掛載，才能使用檔案系統。下列各節可協助您開始使用 Amazon EFS 搭配 AWS Batch。

## Amazon EFS 磁碟區考量事項
<a name="efs-volume-considerations"></a>

使用 Amazon EFS 磁碟區時應考慮以下事項：
+ 對於使用 EC2 資源的任務，Amazon EFS 檔案系統支援已新增為使用 `20191212` Amazon ECS 最佳化 AMI 版本搭配容器代理程式版本 1.35.0 的公開預覽。不過，Amazon EFS 檔案系統支援使用`20200319`容器代理程式 1.38.0 版的 Amazon ECS 最佳化 AMI 版本進入一般可用性，其中包含 Amazon EFS 存取點和 IAM 授權功能。我們建議您使用 Amazon ECS 最佳化 AMI 版本 `20200319` 或更新版本，以利用這些功能。如需詳細資訊，請參閱《[Amazon Elastic Container Service 開發人員指南》中的 Amazon ECS 最佳化 AMI 版本](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html)。 **
**注意**  
如果您建立自己的 AMI，則必須使用容器代理程式 1.38.0 或更新版本、1.38.0-1 `ecs-init`版或更新版本，並在 Amazon EC2 執行個體上執行下列命令。這是為了啟用 Amazon ECS 磁碟區外掛程式。這些命令取決於您是否使用 Amazon Linux 2 或 Amazon Linux 作為基礎映像。  

Amazon Linux 2  

  ```
  $ yum install amazon-efs-utils
  systemctl enable --now amazon-ecs-volume-plugin
  ```

Amazon Linux  

  ```
  $ yum install amazon-efs-utils
  sudo shutdown -r now
  ```
+ 對於使用 Fargate 資源的任務，使用平台版本 1.4.0 或更新版本時新增了 Amazon EFS 檔案系統支援。如需詳細資訊，請參閱《*Amazon Elastic Container Service 開發人員指南*》中的 [AWS Fargate 平台版本](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)。
+ 使用 Fargate 資源在任務中指定 Amazon EFS 磁碟區時，Fargate 會建立主管容器，負責管理 Amazon EFS 磁碟區。主管容器會使用少量任務的記憶體。查詢任務中繼資料第 4 版端點時，可看見監督容器。如需詳細資訊，請參閱 * AWS Fargate的 Amazon Elastic Container Service 使用者指南*中的[任務中繼資料端點版本 4](https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-metadata-endpoint-v4-fargate.html)。

## 使用 Amazon EFS 存取點
<a name="efs-volume-accesspoints"></a>

Amazon EFS 存取點是 EFS 檔案系統的應用程式特定進入點，可協助您管理共用資料集的應用程式存取。如需有關 Amazon EFS 存取點及如何控制對它們的存取的詳細資訊，請參閱《Amazon Elastic File System 使用者指南》中的[使用 Amazon EFS 存取點](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html)。

存取點可以針對透過存取點提出的所有檔案系統要求，強制執行使用者身分 (包括使用者的 POSIX 群組)。存取點也可以針對檔案系統強制執行不同的根目錄，讓用戶端只能存取指定目錄或其子目錄中的資料。

**注意**  
建立 EFS 存取點時，您可以在檔案系統上指定要做為根目錄的路徑。當您在 AWS Batch 任務定義中參考具有存取點 ID 的 EFS 檔案系統時，必須省略根目錄或將其設定為 `/` 這會強制執行在 EFS 存取點上設定的路徑。

您可以使用 AWS Batch 任務 IAM 角色來強制執行特定應用程式使用特定存取點。透過結合 IAM 政策與存取點，您可以輕鬆地為應用程式提供特定資料集的安全存取權。此功能使用 Amazon ECS IAM 角色執行任務功能。如需詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》**中的[任務 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。

## 在任務定義中指定 Amazon EFS 檔案系統
<a name="specify-efs-config"></a>

若要為您的容器使用 Amazon EFS 檔案系統磁碟區，您必須在任務定義中指定磁碟區和掛載點組態。下列任務定義 JSON 程式碼片段顯示容器的 `volumes`和 `mountPoints` 物件的語法：

```
{
    "containerProperties": [
        {
            "image": "amazonlinux:2",
            "command": [
                "ls",
                "-la",
                "/mount/efs"
            ],
            "mountPoints": [
                {
                    "sourceVolume": "myEfsVolume",
                    "containerPath": "/mount/efs",
                    "readOnly": true
                }
            ],
            "volumes": [
                {
                    "name": "myEfsVolume",
                    "efsVolumeConfiguration": {
                        "fileSystemId": "fs-12345678",
                        "rootDirectory": "/path/to/my/data",
                        "transitEncryption": "ENABLED",
                        "transitEncryptionPort": integer,
                        "authorizationConfig": {
                            "accessPointId": "fsap-1234567890abcdef1",
                            "iam": "ENABLED"
                        }
                    }
                }
            ]
        }
    ]
}
```

`efsVolumeConfiguration`  
類型：物件  
必要：否  
只有使用 Amazon EFS 磁碟區時才會指定此參數。    
`fileSystemId`  
類型：字串  
必要：是  
要使用的 Amazon EFS 檔案系統識別碼。  
`rootDirectory`  
類型：字串  
必要：否  
在 Amazon EFS 檔案系統中的目錄，其將掛載作為主機內的根目錄。如果省略此參數，使用 Amazon EFS 磁碟區的根目錄。指定 `/` 的效果與忽略此參數的效果相同。長度上限為 4，096 個字元。  
如果在 中指定了 EFS 存取點`authorizationConfig`，則必須省略根目錄參數，或將 設定為 `/`。這會強制執行在 EFS 存取點上設定的路徑。  
`transitEncryption`  
類型：字串  
有效值：`ENABLED` \$1 `DISABLED`  
必要：否  
決定是否為 AWS Batch 主機和 Amazon EFS 伺服器之間傳輸的 Amazon EFS 資料啟用加密。若使用 Amazon EFS IAM 授權，則必須啟用傳輸加密。如果省略此參數，系統會使用 `DISABLED` 的預設值。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》中的[加密傳輸中的資料](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)。  
`transitEncryptionPort`  
類型：整數  
必要：否  
在 AWS Batch 主機和 Amazon EFS 伺服器之間傳送加密資料時要使用的連接埠。如果您未指定傳輸加密連接埠，它會使用 Amazon EFS 掛載協助程式使用的連接埠選擇策略。該值必須介於 0 到 65,535 之間。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》**中的 [EFS 掛載協助程式](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html)。  
`authorizationConfig`  
類型：物件  
必要：否  
Amazon EFS 檔案系統的授權組態詳細資訊。    
`accessPointId`  
類型：字串  
必要：否  
要使用的存取點 ID。如果指定存取點，`efsVolumeConfiguration`則必須省略 中的根目錄值，或將 設定為 `/`。這會強制執行在 EFS 存取點上設定的路徑。如果使用存取點，則必須在 `EFSVolumeConfiguration` 中啟用傳輸加密。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》**中的[使用 Amazon EFS 存取點](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html)。  
`iam`  
類型：字串  
有效值：`ENABLED` \$1 `DISABLED`  
必要：否  
決定是否在掛載 Amazon EFS 檔案系統時使用 AWS Batch 任務定義中定義的任務 IAM 角色。如果已啟用，必須在 `EFSVolumeConfiguration` 中啟用傳輸加密。如果省略此參數，系統會使用 `DISABLED` 的預設值。如需 IAM 執行角色的詳細資訊，請參閱 [AWS Batch IAM 執行角色](execution-IAM-role.md)。

# 任務定義範例
<a name="example-job-definitions"></a>

下列主題中的任務定義範例說明如何使用常見的模式，例如環境變數、參數替換和磁碟區掛載。

**Topics**
+ [

# 環境變數
](example-use-envvars.md)
+ [

# 參數替換
](example-use-parameters.md)
+ [

# 測試 GPU 功能
](example-test-gpu.md)
+ [

# 多節點平行任務
](example-mnp-job-definition.md)

# 環境變數
<a name="example-use-envvars"></a>

下列範例任務定義使用環境變數來指定檔案類型和 Amazon S3 URL。此特定範例來自[建立簡單的「擷取和執行」 AWS Batch 任務](https://aws.amazon.com/blogs/compute/creating-a-simple-fetch-and-run-aws-batch-job/)運算部落格文章。部落格文章中描述的[https://github.com/awslabs/aws-batch-helpers/blob/master/fetch-and-run/fetch_and_run.sh](https://github.com/awslabs/aws-batch-helpers/blob/master/fetch-and-run/fetch_and_run.sh)指令碼使用這些環境變數從 S3 下載`myjob.sh`指令碼並宣告其檔案類型。

即使命令和環境變數在此範例中硬式編碼為任務定義，您也可以指定命令和環境變數覆寫，讓任務定義更多樣化。

```
{
    "jobDefinitionName": "fetch_and_run",
    "type": "container",
    "containerProperties": {
        "image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/fetch_and_run",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "2000"
            },
            {
                "type": "VCPU",
                "value": "2"
            }
        ],
        "command": [
            "myjob.sh",
            "60"
        ],
        "jobRoleArn": "arn:aws:iam::123456789012:role/AWSBatchS3ReadOnly",
        "environment": [
            {
                "name": "BATCH_FILE_S3_URL",
                "value": "s3://amzn-s3-demo-source-bucket/myjob.sh"
            },
            {
                "name": "BATCH_FILE_TYPE",
                "value": "script"
            }
        ],
        "user": "nobody"
    }
}
```

# 參數替換
<a name="example-use-parameters"></a>

以下任務定義範例說明，如何允許替換參數和設定預設值。

`Ref::` 區段中的 `command` 宣告用於設定的替換參數的預留位置。提交使用此任務定義的任務時，您要指定參數覆寫以填入這些值，例如 `inputfile` 和 `outputfile`。接下來的 `parameters`區段會設定 的預設值`codec`，但您可以視需要覆寫該參數。

如需詳細資訊，請參閱[參數](job_definition_parameters.md#parameters)。

```
{
    "jobDefinitionName": "ffmpeg_parameters",
    "type": "container",
    "parameters": {"codec": "mp4"},
    "containerProperties": {
        "image": "my_repo/ffmpeg",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "2000"
            },
            {
                "type": "VCPU",
                "value": "2"
            }
        ],
        "command": [
            "ffmpeg",
            "-i",
            "Ref::inputfile",
            "-c",
            "Ref::codec",
            "-o",
            "Ref::outputfile"
        ],
        "jobRoleArn": "arn:aws:iam::123456789012:role/ECSTask-S3FullAccess",
        "user": "nobody"
    }
}
```

# 測試 GPU 功能
<a name="example-test-gpu"></a>

以下工作定義範例測試 [使用 GPU 工作負載 AMI](batch-gpu-ami.md) 中所述的 GPU 工作負載 AMI 是否正確設定。此範例任務定義會從 GitHub 執行 TensorFlow 深度 MNIST 分類器[範例](https://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/examples/tutorials/mnist/mnist_deep.py)。

```
{
    "containerProperties": {
        "image": "tensorflow/tensorflow:1.8.0-devel-gpu",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "32000"
            },
            {
                "type": "VCPU",
                "value": "8"
            }
        ],
        "command": [
            "sh",
            "-c",
            "cd /tensorflow/tensorflow/examples/tutorials/mnist; python mnist_deep.py"
        ]
    },
    "type": "container",
    "jobDefinitionName": "tensorflow_mnist_deep"
}
```

您可以建立名為前述 JSON 文字的檔案，`tensorflow_mnist_deep.json`然後使用下列命令註冊 AWS Batch 任務定義：

```
aws batch register-job-definition --cli-input-json file://tensorflow_mnist_deep.json
```

# 多節點平行任務
<a name="example-mnp-job-definition"></a>

下列任務定義範例說明多節點平行任務。如需詳細資訊，請參閱*AWS 運算*部落格中的[在 中使用多節點平行任務建置緊密耦合的分子動態工作流程 AWS Batch](https://aws.amazon.com/blogs/compute/building-a-tightly-coupled-molecular-dynamics-workflow-with-multi-node-parallel-jobs-in-aws-batch/)。

```
{
  "jobDefinitionName": "gromacs-jobdef",
  "jobDefinitionArn": "arn:aws:batch:us-east-2:123456789012:job-definition/gromacs-jobdef:1",
  "revision": 6,
  "status": "ACTIVE",
  "type": "multinode",
  "parameters": {},
  "nodeProperties": {
    "numNodes": 2,
    "mainNode": 0,
    "nodeRangeProperties": [
      {
        "targetNodes": "0:1",
        "container": {
          "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/gromacs_mpi:latest",
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "24000"
              },
              {
                  "type": "VCPU",
                  "value": "8"
              }
          ],
          "command": [],
          "jobRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
          "ulimits": [],
          "instanceType": "p3.2xlarge"
        }
      }
    ]
  }
}
```