View a markdown version of this page

Amazon ECS 受管執行個體的 Amazon ECS 任務定義參數 - Amazon Elastic Container Service

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

Amazon ECS 受管執行個體的 Amazon ECS 任務定義參數

任務定義分為不同的部分:任務系列、 AWS Identity and Access Management (IAM) 任務角色、網路模式、容器定義、磁碟區和容量。任務定義中需要系列和容器定義。與此相對,任務角色、網路模式、磁碟區與容量則為選用項目。

您可以在 JSON 檔案中使用這些參數來設定任務定義。

以下是 Amazon ECS 受管執行個體每個任務定義參數的詳細描述。

系列

family

類型:字串

必要:是

當您註冊任務定義時,您會指定它的系列,這類似於任務定義以修訂版號碼指定的多個版本名稱。在特定系列註冊的第一個任務定義會得到修訂版 1,之後註冊的任何任務定義,則得到連續的修訂版號碼。

Capacity

在註冊任務定義時,您可以指定 Amazon ECS 驗證任務定義所依據的容量。如果任務定義不會依據指定的相容性進行驗證,則會傳回用戶端例外狀況。如需詳細資訊,請參閱 Amazon ECS 啟動類型。

任務定義允許使用以下參數。

requiresCompatibilities

類型:字串陣列

必要:否

有效值:MANAGED_INSTANCES

驗證任務定義所依據的容量。這會啟動檢查,確保任務定義中使用的所有參數都能滿足 Amazon ECS 受管執行個體的需求。

任務 角色

taskRoleArn

類型:字串

必要:否

當您註冊任務定義時,您可以為 IAM 角色提供任務角色,該角色可讓任務許可中的容器,代您呼叫其關聯政策中指定的 AWS API。如需詳細資訊,請參閱Amazon ECS 任務 IAM 角色。

任務執行 角色

executionRoleArn

類型:字串

必要:有條件

任務執行角色的 Amazon Resource Name (ARN),授予 Amazon ECS 容器代理程式代表您進行 AWS API 呼叫的許可。如需詳細資訊,請參閱Amazon ECS 任務執行 IAM 角色。

注意

視任務需求而定,任務執行 IAM 角色是必要的項目。私有 ECR 映像提取和使用awslogs日誌驅動程式需要 角色。

網路模式

networkMode

類型:字串

必要:否

預設:awsvpc

用於任務中容器的聯網模式。對於在 Amazon ECS 受管執行個體上託管的 Amazon ECS 任務,有效值為 awsvpc 與 host。如果未指定網路模式,預設網路模式為 awsvpc。

如果網路模式為 host,任務會略過網路隔離,而容器會直接使用主機的網路堆疊。

重要

執行使用 host 網路模式的任務時,為了獲得更好的安全性,不要使用根使用者 (UID 0) 執行容器。作為最佳安全實務,請一律使用非根使用者。

如果網路模式是 awsvpc,則任務會配置一個彈性網路介面,而當您使用此任務定義建立服務或執行任務時,您必須指定 NetworkConfiguration。如需詳細資訊,請參閱Amazon ECS 受管執行個體的 Amazon ECS 任務聯網。

host 和 awsvpc 網路模式為容器提供最高聯網效能,因為它們使用的是 Amazon EC2 網路堆疊。使用 host 和 awsvpc 網路模式,公開的容器連接埠會直接映射到對應的主機連接埠 (適用於 host 網路模式) 或已連接的彈性網路介面連接埠 (適用於 awsvpc 網路模式)。因此,您無法使用動態主機連接埠對應。

執行時間平台

operatingSystemFamily

類型:字串

必要:否

預設:LINUX

在註冊任務定義時,您會指定作業系統系列。

此欄位的有效值為 LINUX。

服務中使用的所有任務定義都必須與此參數具有相同的值。

如果任務定義為服務的一部分,此值必須與服務 platformFamily 值相符。

cpuArchitecture

類型:字串

必要:有條件

在註冊任務定義時,您會指定 CPU 架構。有效值為 X86_64 和 ARM64。

如果您未指定值,Amazon ECS 會根據容量提供者組態嘗試將任務放置在可用的 CPU 架構上。為了確保任務放置在特定的 CPU 架構上,請在任務定義cpuArchitecture中指定 的值。

服務中使用的所有任務定義都必須與此參數具有相同的值。

如需 ARM64 的相關資訊,請參閱 64 位元 ARM 工作負載的 Amazon ECS 任務定義。

任務大小

當您註冊任務定義時,您可以指定任務使用的 CPU 和記憶體總計。這和容器定義層級的 cpu 和 memory 值是分開的。對於在 Amazon EC2 執行個體上託管的任務,這些欄位是選用欄位。

注意

Windows 容器會忽略任務層級的 CPU 和記憶體參數。我們建議為 Windows 容器指定容器層級的資源。

cpu

類型:字串

必要:有條件

針對任務呈現的 CPU 單位硬性限制。您可以在 JSON 檔案中將 CPU 值指定為以 CPU 為單位或虛擬 CPU (vCPU) 為單位的字串。例如,可指定 1024 個 CPU 單位作為 CPU 值,也可指定 1 vCPU 個 vCPU 作為 CPU 值。註冊任務定義時,vCPU 值會轉換為整數,指出 CPU 單位。

此欄位為選用欄位。如果您的叢集沒有任何已註冊的容器執行個體具有可用的請求 CPU 單位,則任務會失敗。支援的值介於 0.125 個 vCPU 與 10 個 vCPU 之間。

memory

類型:字串

必要:有條件

要分配給任務的記憶體硬性限制。您可以在任務定義中將記憶體值指定為以 MiB 或 GB 為單位的字串。例如,可指定 3072 MiB 作為記憶體值,也可指定 3 GB GB 作為記憶體值。註冊任務定義時,GB 值會轉換為整數,指出 MiB。

此欄位為選填,且可以使用任何值。如果指定任務層級的記憶體值,則容器層級的記憶體值是選用的。如果您的叢集沒有任何一個已註冊的容器執行個體具有可用的請求記憶體,則任務會失敗。您可以盡可能為特定執行個體類型的任務提供最多的記憶體,以將資源使用率最大化。如需詳細資訊,請參閱保留 Amazon ECS Linux 容器執行個體記憶體。

其他任務定義參數

在 Amazon ECS 主控台中使用 Configure via JSON (透過 JSON 進行設定) 選項註冊任務定義時,可以使用下列任務定義參數。如需詳細資訊,請參閱使用主控台建立 Amazon ECS 任務定義。

暫時性儲存

ephemeralStorage
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:EphemeralStorage 物件

必要:否

為任務配置的暫時性儲存量 (以 GB 為單位)。對於託管於 AWS Fargate的任務,此參數可用來擴充可用的暫時性儲存總量 (超過預設數量)。如需詳細資訊,請參閱搭配 Amazon ECS 使用綁定掛載。

IPC 模式

ipcMode

類型:字串

必要:否

要用於任務中容器的 IPC 資源命名空間。有效值為 host、task 或 none。如果已指定 host,則任務內對相同容器執行個體指定 host IPC 模式的所有容器,會與主機 Amazon EC2 執行個體共用相同的 IPC 資源。如果已指定 task,則指定任務內的所有容器會共用相同的 IPC 資源。如果已指定 none,則任務內的容器內的 IPC 資源為私有,並且不會與任務中或容器執行個體上的其他容器共用。如果未指定任何值,則 IPC 資源命名空間共用取決於容器執行期組態。

PID 模式

pidMode

類型:字串

必要:否

要用於任務中容器的程序命名空間。有效值為 host 或 task。如果已指定 host,則任務內對同一容器執行個體指定 host PID 模式的所有容器,會與主機 Amazon EC2 執行個體共用相同的程序命名空間。如果已指定 task,則指定任務內的所有容器會共用相同的程序命名空間。如果未指定任何值,預設值會是私有命名空間。

如果是使用 host PID 模式,這會提高將不需要的程序命名空間公開的風險。

代理組態

proxyConfiguration
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:ProxyConfiguration 物件

必要:否

App Mesh 代理的組態詳細資訊。

Tags (標籤)

您套用至任務定義的中繼資料,可用於協助您對任務定義進行分類與整理。每個標籤皆包含索引鍵與選用值。您可以兩個都定義。

以下基本限制適用於 標籤:

  • 每個資源的標籤數上限 - 50

  • 針對每一個資源,每個標籤鍵必須是唯一的,且每個標籤鍵只能有一個值。

  • 索引鍵長度上限 - 128 個 UTF-8 Unicode 字元

  • 值的長度上限 - 256 個 UTF-8 Unicode 字元

  • 如果您的標記結構描述是跨多項服務和資源使用,請記得其他服務可能會有字元使用限制。通常允許的字元為:以 UTF-8 表示的字母、數字和空格,以及下列字元:+ - = . _ : / @。

  • 標籤鍵與值皆區分大小寫。

  • 請不要使用 aws:、 AWS:或任何大寫或小寫的組合,例如保留供 AWS 使用的索引鍵或值的字首。您不可編輯或刪除具此字首的標籤金鑰或值。具此字首的標籤,不算在受資源限制的標籤計數內。

key

類型:字串

必要:否

組成標籤的鍵值組的一部分。索引鍵是一般標籤,作用就像更特定標籤值的類別。

value

類型:字串

必要:否

組成標籤的鍵值組的選用部分。值就像標籤類別 (索引鍵) 內的描述項。

Elastic Inference 加速器 (已棄用)

注意

Amazon Elastic Inference (EI) 服務已全面終止,不再向客戶提供。

inferenceAccelerator
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:InferenceAccelerator 物件

必要:否

要用於任務中容器的 Elastic Inference 加速器。

置放限制條件

placementConstraints

類型:TaskDefinitionPlacementConstraint 物件陣列

必要:否

要針對任務使用的置放限制條件物件陣列。每項任務您最多可以指定 10 項限制條件 (此限制包含任務定義中的限制條件以及執行時間指定的限制條件)。

Amazon ECS 支援在 Amazon ECS 受管執行個體上執行之任務的 distinctInstace 與 memberOf 置放限制條件。使用 memberOf 置放限制條件的任務支援下列屬性:

  • ecs.subnet-id

  • ecs.availability-zone

  • ecs.cpu-architecture

  • ecs.instance-type

如需有關置放限制條件的詳細資訊,請參閱定義 Amazon ECS 用於任務的容器執行個體。

磁碟區

註冊任務定義時,您可以選擇為您的任務指定磁碟區清單。此設定讓您可以在任務中使用資料磁碟區。

如需有關磁碟區類型與其他參數的詳細資訊,請參閱 Amazon ECS 任務的儲存選項。

name

類型:字串

必要:是

磁碟區名稱。可以包含最多 255 個字母 (大小寫)、數字和連字號。此名稱是參考容器定義 sourceVolume 中的 mountPoints 參數。

host

類型:HostVolumeProperties 物件

必要:否

此參數會在您使用綁定掛載主機磁碟區時指定。host 參數的內容決定繫結掛載主機磁碟區是否保留在主機容器執行個體上以及其存放位置。如果 host 參數是空的,則系統會為您的資料磁碟區指派主機路徑。不過,在與其相關聯的容器停止執行後,不保證保留資料。

sourcePath

類型:字串

必要:否

使用 host 參數時,請指定 sourcePath來宣告提供給容器之主機執行個體上的路徑。如果此參數為空,則系統會為您指派主機路徑。如果 host 參數包含sourcePath檔案位置,則資料磁碟區會保留在主機執行個體上的指定位置,直到您手動刪除為止。如果該sourcePath值不存在於主機執行個體上,系統會建立該值。如果位置存在,將匯出來源路徑資料夾的內容。

在 Amazon ECS 受管執行個體上,部分主機檔案系統為唯讀。必須sourcePath指向可寫入的目錄,例如 /var或 /tmp。如需詳細資訊,請參閱搭配 Amazon ECS 使用綁定掛載。

dockerVolumeConfiguration
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:DockerVolumeConfiguration 物件

必要:否

此參數會在您使用 Docker 磁碟區時指定。

efsVolumeConfiguration

類型:EFSVolumeConfiguration 物件

必要:否

此參數會在您使用適用於任務儲存體的 Amazon EFS 檔案系統時指定。

fsxWindowsFileServerVolumeConfiguration
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:FSxWindowsFileServerVolumeConfiguration 物件

必要:否

此參數會在您為任務儲存使用 Amazon FSx for Windows File Server 檔案系統時指定。

configuredAtLaunch

類型:布林值

必要:否

指示是否應在啟動時設定磁碟區。此參數用於為獨立任務或作為服務一部分建立的任務建立 Amazon EBS 磁碟區。每個任務定義修訂版只能在磁碟區組態中於啟動時設定一個磁碟區。

容器定義

註冊任務定義時,您必須指定容器定義清單,以傳遞到容器執行個體上的 Docker 常駐程式。容器定義允許使用以下參數。

名稱

name

類型:字串

必要:是

容器的名稱。最多允許 255 個字母 (大寫和小寫)、數字、連字號和底線。如果您在任務定義中連結多個容器,則一個容器的 name 可以輸入另一個容器的 links。這是為了連結容器。

影像

image

類型:字串

必要:是

用來啟動容器的映像。此字串會直接傳遞至 Docker 常駐程式。根據預設,Docker Hub 登錄檔中的映像為可用。您也可以使用 repository-url/image:tag 或 repository-url/image@digest 指定其他存放庫。允許最多 255 個字元 (大小寫)、數字、連字號、底線、等號、句號、正斜線、井號。此參數映射至 docker create-container 命令Image中的 ,以及 Docker run 命令的 IMAGE 參數。

  • 當新的任務啟動時,Amazon ECS 容器代理會提取最新版本的指定映像和標籤,以供容器使用。但是,儲存庫映像後續的更新將不會散佈到已在執行中的任務。

  • 當您未在任務定義中的映像路徑中指定標籤或摘要時,Amazon ECS 容器代理程式會使用latest標籤來提取指定的映像。

  • 儲存庫映像的後續更新不會傳播至已執行的任務。

  • 支援私有登錄檔中的映像。如需詳細資訊,請參閱在 Amazon ECS 中使用非AWS 容器映像。

  • 可使用完整的 registry/repository:tag 或 registry/repository@digest 命名慣例來指定 Amazon ECR 儲存庫中的映像 (例如 aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest 或 aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app@sha256:94afd1f2e64d908bc90dbca0035a5b567EXAMPLE)。

  • Docker Hub 上官方儲存庫中的映像,使用的是單一名稱 (例如,ubuntu 或 mongo)。

  • Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如,amazon/amazon-ecs-agent)。

  • 其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如,quay.io/assemblyline/ubuntu)。

versionConsistency

類型:字串

有效值:enabled|disabled

必要:否

指定 Amazon ECS 是否會將容器定義中提供的容器映像標籤解析為映像摘要。此行為預設為 enabled。如果將容器的值設定為 disabled,Amazon ECS 不會將容器映像標籤解析為摘要,但會使用容器定義中指定的原始映像 URI 進行部署。如需有關容器映像解析的詳細資訊,請參閱容器映像解析。

記憶體

memory

類型:整數

必要:否

提供給容器使用的記憶體數量 (MiB)。如果您的容器嘗試使用超過此處指定的記憶體,容器便會終止。為任務中所有容器預留的記憶體總量必須低於任務 memory 值 (如果已指定一個)。此參數會映射至 docker create-container 命令中的 Memory,以及 docker run 的 --memory 選項。

Docker 20.10.0 或更新版本的常駐程式會為容器保留最低 6 MiB 的記憶體。因此,不要為容器指定少於 6 MiB 的記憶體。

Docker 19.03.13-ce 或更舊版本的常駐程式會為容器保留最低 4 MiB 的記憶體。因此,不要為容器指定少於 4 MiB 的記憶體。

注意

若您嘗試盡可能為特定執行個體類型的任務提供最多的記憶體,以將資源使用率最大化,請參閱「保留 Amazon ECS Linux 容器執行個體記憶體」。

memoryReservation

類型:整數

必要:否

為容器保留的記憶體軟性限制 (MiB)。當系統記憶體爭用時,Docker 會嘗試將容器記憶體保持在此軟性限制。但是,您的容器可以在需要時使用更多記憶體。容器可以使用最多達到以 memory 參數指定的硬性限制 (如適用),或容器執行個體上的所有可用記憶體,以先達到者為準。此參數會映射至 docker create-container 命令中的 MemoryReservation,以及 docker run 的 --memory-reservation 選項。

如果未指定任務層級的記憶體值,您必須為容器定義中的 memory 或 memoryReservation 之一或兩者指定非零整數。若您同時指定兩者,memory 必須大於 memoryReservation。如果指定 memoryReservation,則會從放置容器的容器執行個體可用記憶體資源中減去該值。否則,即使用 memory 的值。

例如,若您的容器通常會使用 128 MiB 的記憶體,但會偶爾短期爆量到 256 MiB 的記憶體。您可以將 memoryReservation 設為 128 MiB,並將 memory 硬性限制設為 300 MiB。此組態讓容器只從容器執行個體的剩餘資源中保留 128 MiB 的記憶體。同時,其還允許容器在需要時使用更多的記憶體資源。

Docker 20.10.0 或更新版本的常駐程式會為容器保留最低 6 MiB 的記憶體。因此,不要為容器指定少於 6 MiB 的記憶體。

Docker 19.03.13-ce 或更舊版本的常駐程式會為容器保留最低 4 MiB 的記憶體。因此,不要為容器指定少於 4 MiB 的記憶體。

注意

若您嘗試盡可能為特定執行個體類型的任務提供最多的記憶體,以將資源使用率最大化,請參閱「保留 Amazon ECS Linux 容器執行個體記憶體」。

CPU

cpu

類型:整數

必要:否

為容器預留的 cpu 單位數。此參數會映射至 docker create-container 命令中的 CpuShares,以及 docker run 的 --cpu-shares 選項。

對於使用 EC2 容量提供者的任務,此欄位為可選項,唯一要求是任務內為所有容器預留的 CPU 總量必須低於任務層級的 cpu 值。

注意

您可以透過將 Amazon EC2 執行個體詳細資訊頁面上為執行個體類型列出的 vCPU 乘上 1,024,來判斷每個 EC2 執行個體類型可用的 CPU 單位數。

Linux 容器會按照與其配置數量相同的比例,與容器執行個體上的其他容器共用未配置的 CPU 單位。例如,若您在單一核心執行個體類型上執行單一容器任務,為該容器指定 512 個 CPU 單位,並且該任務是容器執行個體上唯一執行中的任務,該容器便可在任何指定時間內使用完整的 1,024 個 CPU 單位。但是,若您在該容器執行個體上啟動相同任務的另一個複本,可保證每個任務都可以在需要時取得至少 512 個 CPU 單位。此外,每個容器都可在其他容器沒有使用時浮動到更高的 CPU 用量。若兩個任務都一直維持在 100% 作用中的狀態,兩者能夠取得的單位數便會限制在 512 個 CPU 單位。

在 Linux 容器執行個體上,容器執行個體的 Docker 常駐程式會使用 CPU 值計算執行中容器的相對 CPU 共用比例。如需詳細資訊,請參閱 Docker 文件中的 CPU share constraint。Linux 核心允許的最低有效 CPU 共用值為 2。但是,CPU 參數並非必要項目,且您可以在容器定義中使用低於 2 的 CPU 值。針對低於 2 的 CPU 值 (包含 null),行為會隨您的 Amazon ECS 容器代理版本而異:

  • 代理程式版本小於或等於 1.1.0:Null 和零 CPU 值會以 0 傳遞給 Docker,然後 Docker 將之轉換為 1,024 個 CPU 共用。CPU 值若為 1,則會以 1 傳遞給 Docker,接著 Linux 核心便會轉換成兩個 CPU 共用。

  • 代理程式版本大於或等於 1.2.0:Null、零和 1 的 CPU 值,會以 2 傳遞至 Docker。

在 Windows 容器執行個體上,CPU 限制會強制為絕對限制或配額。Windows 容器只能存取任務定義的描述中所指定之 CPU 數量。將空或零的 CPU 值以 0 的形式傳遞給 Docker,Windows 會將此值解釋為一個 CPU 的 1%。

連接埠映射

portMappings

類型:物件陣列

必要:否

連接埠映射會將容器的網路連接埠對外公開,讓用戶端可以存取您的應用程式。這也適用於同一任務中的容器間通訊。

針對使用 awsvpc 網路模式的任務定義,只指定 containerPort。一律略過 hostPort,且容器連接埠會自動映射至主機上的隨機高連接埠號碼。

此參數的大部分欄位 (包括 containerPort、hostPort、protocol) 會映射至 docker create-container 命令中的 PortBindings,以及 docker run 的 --publish 選項。若任務定義的網路模式設定為 host,則主機連接埠必須為未定義,或符合連接埠映射中的容器連接埠。

注意

任務達到 RUNNING 狀態後,手動和自動主機及容器連接埠指派會顯示在下列位置:

  • 主控台:選取任務的容器說明的 Network Bindings (網路繫結) 區段。

  • AWS CLI:describe-tasks 命令輸出的 networkBindings 區段。

  • API:DescribeTasks 的回應。

  • 中繼資料:任務中繼資料端點。

appProtocol

類型:字串

必要:否

用於連接埠映射的應用程式通訊協定。此參數僅適用於 Service Connect。建議您將此參數設定為與您應用程式使用的通訊協定一致。如果您設定此參數,Amazon ECS 會將通訊協定專屬連線處理新增至 Service Connect Proxy。如果您設定此參數,Amazon ECS 會在 Amazon ECS 主控台和 CloudWatch 中新增通訊協定專屬遙測。

如果您沒有為此參數設定值,系統會使用 TCP。不過,Amazon ECS 不會針對 TCP 新增通訊協定特定遙測。

如需詳細資訊,請參閱使用 Service Connect 以利用簡稱連線 Amazon ECS 服務。

有效的通訊協定值:"HTTP" | "HTTP2" | "GRPC"

containerPort

類型:整數

必要:是 (當使用 portMappings 時)

容器上的連接埠號碼,該號碼繫結到使用者指定或自動指派的主機連接埠。

對於使用 awsvpc 網路模式的任務,您可以透過 containerPort 指定公開的連接埠。

containerPortRange

類型:字串

必要:否

綁定到動態映射主機連接埠範圍之容器上的連接埠號碼範圍。

您只能使用 register-task-definition API 來設定此參數。此選項可在 portMappings 參數中使用。如需詳細資訊,請參閱在 參考資料AWS Command Line Interface 中的 register-task-definition。

指定 containerPortRange 時,以下規則適用:

  • 您必須使用 awsvpc 網路模式。

  • 容器執行個體必須至少具有 1.67.0 版的容器代理程式以及至少 1.67.0-1 版的 ecs-init 套件。

  • 每個容器最多可以指定 100 個連接埠範圍。

  • 您不會指定 hostPortRange。hostPortRange 的值設定如下:

    • 對於具有 awsvpc 網路模式的任務中的容器,hostPort 會設定為與 containerPort 相同的值。這是靜態映射策略。

  • containerPortRange 有效值介於 1 到 65535。

  • 一個連接埠只能包含在每個容器的一個連接埠映射中。

  • 您無法指定重疊的連接埠範圍。

  • 範圍中的第一個連接埠必須小於範圍中的最後一個連接埠。

  • Docker 當您有大量連接埠時, 建議您關閉Docker協助程式組態檔案中的 Docker-proxy。

    如需詳細資訊,請參閱 GitHub 上的 Issue #11185。

    如需有關如何在 Docker 常駐程式組態檔案中關閉 Docker 代理的詳細資訊,請參閱《Amazon ECS 開發人員指南》中的 Docker 常駐程式。

您可以呼叫 DescribeTasks 來檢視 hostPortRange,此即綁定到容器連接埠的主機連接埠。

連接埠範圍未包含在傳送到 EventBridge 的 Amazon ECS 任務事件中。如需詳細資訊,請參閱使用 EventBridge 自動化因應 Amazon ECS 錯誤。

hostPortRange

類型:字串

必要:否

與網路繫結搭配使用之主機上的連接埠號碼範圍。這由 Docker 指派,並由 Amazon ECS 代理程式交付。

hostPort

類型:整數

必要:否

要為您的容器保留之容器執行個體上的連接埠號碼。

hostPort 可維持空白,或與 containerPort 的值相同。

Docker 1.6.0 版和更新版本的預設暫時性連接埠範圍列在 /proc/sys/net/ipv4/ip_local_port_range 下的執行個體上。如果此核心參數不可用,會使用預設的 49153–65535 暫時性連接埠範圍。請勿嘗試在暫時性連接埠範圍中指定主機連接埠。這是因為其已保留以便自動指派。一般而言,低於 32768 的連接埠便會位於暫時性連接埠範圍之外。

SSH 的預設保留連接埠為 22,Docker 連接埠為 2375 和 2376,Amazon ECS 容器代理程式連接埠則為 51678-51680。任何使用者先前為執行中任務指定的主機連接埠也會在執行任務時保留。在任務停止後,便會釋放主機連接埠。目前預留的連接埠會顯示在 describe-container-instances 輸出的 remainingResources 中。容器執行個體一次最多可預留 100 個連接埠,包括預設的預留連接埠。自動指派的連接埠不計入 100 個預留連接埠的限制。

name

類型:字串

必要:否,需要在服務中設定 Service Connect 與 VPC Lattice

用於連接埠映射的名稱。此參數僅適用於 Service Connect 與 VPC Lattice。此參數是您在服務的 Service Connect 與 VPC Lattice 組態中使用的名稱。

如需詳細資訊,請參閱使用 Service Connect 以利用簡稱連線 Amazon ECS 服務。

下列範例中同時使用了 Service Connect 與 VPC Lattice 的必要欄位。

"portMappings": [ { "name": string, "containerPort": integer } ]
protocol

類型:字串

必要:否

用於連接埠映射的協定。有效值為 tcp 和 udp。預設值為 tcp。

重要

Service Connect 僅支援 tcp。請記住,如果未設定此欄位,則會隱含 tcp。

若您指定主機連接埠,請使用以下語法。

"portMappings": [ { "containerPort": integer, "hostPort": integer } ... ]

若您希望取得自動指派的主機連接埠,請使用以下語法。

"portMappings": [ { "containerPort": integer } ... ]

私有儲存庫憑證

repositoryCredentials

類型:RepositoryCredentials 物件

必要:否

私有登錄檔身分驗證的儲存庫憑證。

如需詳細資訊,請參閱在 Amazon ECS 中使用非AWS 容器映像。

credentialsParameter

類型:字串

必要:是 (當使用 repositoryCredentials 時)

包含私有儲存庫憑證密碼的 Amazon Resource Name (ARN)。

如需詳細資訊,請參閱在 Amazon ECS 中使用非AWS 容器映像。

注意

當您使用 Amazon ECS API AWS CLI或 AWS SDKs時,如果秘密與您啟動的任務位於相同的區域中,您可以使用完整的 ARN 或秘密的名稱。使用 時 AWS 管理主控台,您必須指定秘密的完整 ARN。

以下是任務定義的程式碼片段,其會顯示所需的參數:

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

主要

essential

類型:布林值

必要:否

若容器的 essential 參數標記為 true,並且該容器因為任何理由失敗或停止,則所有為任務之一部分的其他容器都會停止。若容器的 essential 參數標記為 false,則其失敗將不會影響任務中其餘的容器。若省略此參數,則容器會假設為「基本」。

所有任務都必須至少有一個基本容器。若您的應用程式由多個容器組成,將一般用途用的容器分組成元件,並將不同的元件分成多個任務定義。如需詳細資訊,請參閱架構您的 Amazon ECS 應用程式。

進入點

entryPoint

類型:字串陣列

必要:否

傳遞至容器的進入點。此參數會映射至 docker create-container 命令中的 Entrypoint,以及 docker run 的 --entrypoint 選項。

"entryPoint": ["string", ...]

命令

command

類型:字串陣列

必要:否

傳遞至容器的命令。此參數會映射至 docker create-container 命令中的 Cmd,以及 docker run 的 COMMAND 參數。如果有多個引數,每個引數在陣列中都是分開的字串。

"command": ["string", ...]

工作目錄

workingDirectory

類型:字串

必要:否

容器內要執行命令的工作目錄。此參數會映射至 docker create-container 命令中的 WorkingDir,以及 docker run 的 --workdir 選項。

進階容器定義參數

下列進階容器定義參數為 Docker 執行命令提供擴充功能,用於在 Amazon ECS 容器執行個體上啟動容器。

重新啟動政策

restartPolicy

容器重新啟動政策及相關組態參數。在為容器設定重新啟動政策後,Amazon ECS 可以重新啟動容器,無需取代任務。如需詳細資訊,請參閱使用容器重新啟動政策在 Amazon ECS 任務中重新啟動個別容器。

enabled

類型:布林值

必要:是

指定是否已為容器啟用重新啟動政策。

ignoredExitCodes

類型:Integer array

必要:否

Amazon ECS 會略過且不嘗試重新啟動的結束代碼清單。最多可以指定 50 個容器結束代碼。Amazon ECS 預設不會略過任何結束代碼。

restartAttemptPeriod

類型:整數

必要:否

容器必須執行一段時間 (以秒為單位) 後,才能嘗試重新啟動。容器每 restartAttemptPeriod 秒只能重新啟動一次。如果容器未能執行達此時長即提前結束,則不會重新啟動。restartAttemptPeriod 最少可設定 60 秒,restartAttemptPeriod 最多可設定 1800 秒。容器預設必須執行 300 秒後才能重新啟動。

運作狀態檢查

healthCheck

用於容器的容器運作狀態檢查命令和相關的設定參數。如需詳細資訊,請參閱使用容器運作狀態檢查來判斷 Amazon ECS 任務運作狀態。

command

表示容器執行的命令的字串陣列,用於確定運作狀態是否良好。此字串陣列的開頭可以是 CMD,如此能直接執行命令引數;或是 CMD-SHELL,藉以使用容器預設的 shell 來執行命令。如果均尚未指定,則使用 CMD。

在 中註冊任務定義時 AWS 管理主控台,請使用逗號分隔的命令清單。這些命令會在建立任務定義後轉換為字串。以下為運作狀態檢查的範例輸入。

CMD-SHELL, curl -f http://localhost/ || exit 1

使用 JSON AWS 管理主控台 面板 AWS CLI、 或 APIs 註冊任務定義時,請將命令清單括在括號中。以下為運作狀態檢查的範例輸入。

[ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]

結束代碼 0 (沒有 stderr 輸出) 表示成功,而任何非零的結束代碼則表示失敗。

interval

每個運作狀態檢查的時間間隔 (以秒為單位)。您可以指定 5 至 300 秒之間的值。預設值為 30 秒。

timeout

判定為失敗之前,等待運作狀態檢查成功執行的時間 (以秒為單位)。您可以指定 2 至 60 秒之間的值。預設值為 5 秒。

retries

容器運作狀態判定為不良之前,重試失敗的運作狀態檢查的次數上限。您可以指定 1 至 10 次嘗試。預設值為重試三次。

startPeriod

選用的寬限期,讓容器有時間引導,不將失敗的運作狀態檢查計入重試次數上限。您可以指定介於 0 到 300 秒之間的值。預設情況下,startPeriod 是停用的。

如果運作狀態檢查在 startPeriod 內成功,則代表容器運作狀態良好,之後的任何故障都會計入,累積至重試次數上限。

Environment

cpu

類型:整數

必要:否

Amazon ECS 容器代理程式保留給容器的 cpu 數量。在 Linux 上,此參數會映射至 Create a container 區段中的 CpuShares。

對於在 Amazon ECS 受管執行個體上執行的任務,此欄位為選用項目。為任務中所有容器預訂的 CPU 總量必須低於任務階層的 cpu 值。

Linux 容器會按照與其配置數量相同的比例,與容器執行個體上的其他容器共用未配置的 CPU 單位。例如,若您在單一核心執行個體類型上執行單一容器任務,為該容器指定 512 個 CPU 單位。此外,該任務是在容器執行個體上運行的唯一任務。在此範例中,該容器便可在任何指定的時間內使用完整 1,024 個 CPU 單位。但是,假設您在該容器執行個體上啟動相同任務的另一個複本。每個任務都可以保證在需要的時候取得最少 512 個 CPU 單位。同樣,如果其他容器沒有使用剩餘的 CPU,每個容器都可以浮動到更高的 CPU 用量。但若兩個任務都一直維持在 100% 作用中的狀態,兩者能夠取得的單位數便會限制在 512 個 CPU 單位。

在 Linux 容器執行個體上,容器執行個體的 Docker 常駐程式會使用 CPU 值計算執行中容器的相對 CPU 共用比例。Linux 核心允許的有效 CPU 共用值,最小為 2,最大為 262144。但是,CPU 參數並非必要項目,且您可以在容器定義中使用小於 2 且大於 262144 的 CPU 值。針對小於 2 且大於 262144 的 CPU 值 (包含 null),行為會隨您的 Amazon ECS 容器代理程式版本而異:

如需其他範例,請參閱 Amazon ECS 如何管理 CPU 和記憶體資源。

gpu

類型:ResourceRequirement 物件

必要:否

Amazon ECS 容器代理程式保留給容器的實體 GPUs 數量。您可以指定整數值、分數 GPUs 的十進位值,或 ALL。當您指定 時ALL,容器執行個體上的所有 GPUs 都會配置給容器。當您指定十進位值 (例如 0.125、 或 0.5) 時0.25,Amazon ECS 會將任務放置在提供請求 GPU 容量的小數 GPU 執行個體 (G6f) 上。為任務中所有容器保留的 GPU 數量不得超過任務啟動所在之容器執行個體上可用的 GPU 數量。如需詳細資訊,請參閱GPU 工作負載的 Amazon ECS 任務定義。

Neuron device

類型:ResourceRequirement 物件

必要:否

Amazon ECS 容器代理程式為容器保留的 Neuron 裝置。唯一支援的值是 ALL,這可讓容器專屬存取執行個體上的所有 Neuron 裝置。如需詳細資訊,請參閱AWS Neuron 機器學習工作負載的 Amazon ECS 任務定義。

Elastic Inference accelerator
注意

在 Amazon ECS 受管執行個體上託管的容器不支援此參數。

類型:ResourceRequirement 物件

必要:否

對於 InferenceAccelerator 類型,value 符合任務定義中指定之 InferenceAccelerator 的 deviceName。如需詳細資訊,請參閱Elastic Inference 加速器名稱 (已棄用)。

essential

類型:布林值

必要:否

假設容器的 essential 參數標記為 true,並且該容器因為任何理由失敗或停止。然後,會停止屬於該任務一部分的所有其他容器。若容器的 essential 參數標記為 false,則其失敗將不會影響任務中其餘的容器。若省略此參數,則容器會假設為「基本」。

所有任務都必須至少有一個基本容器。假設您有一個由多個容器組成的應用程式。然後,將用於一般用途的容器分組為元件,並把不同的元件分到多個任務定義。如需詳細資訊,請參閱架構您的 Amazon ECS 應用程式。

"essential": true|false
entryPoint
重要

舊版的 Amazon ECS 容器代理程式無法正確處理 entryPoint 參數。若您在使用 entryPoint 時發生任何問題,請更新您的容器代理,或改將您的命令和引數作為 command 陣列項目輸入。

類型:字串陣列

必要:否

傳遞至容器的進入點。

"entryPoint": ["string", ...]
command

類型:字串陣列

必要:否

傳遞至容器的命令。此參數會映射至 create-container 命令中的 Cmd,以及 docker run 的 COMMAND 參數。如果有多個引數,確保每個引數在陣列中是分開的字串。

"command": ["string", ...]
workingDirectory

類型:字串

必要:否

容器內要執行命令的工作目錄。此參數會映射到 Docker Remote API 的建立容器區段中的 WorkingDir 以及 docker run 的 --workdir 選項。

"workingDirectory": "string"
environmentFiles

類型:物件陣列

必要:否

內含要傳遞至容器之環境變數的檔案清單。此參數會映射至 Docker run 命令的 --env-file選項。

您最多可以指定 10 個環境檔案。檔案副檔名必須是 .env。環境檔案中的每一行都包含 VARIABLE=VALUE 格式的環境變數。以 # 開頭的行會被視為註解,而忽略。

如果在容器定義中指定了個別環境變數,它們的優先順序高於環境檔案中包含的變數。如果指定了內含相同變數的多個環境檔案,則處理順序為由上而下。建議您使用唯一的變數名稱。如需詳細資訊,請參閱將個別環境變數傳遞至 Amazon ECS 容器。

value

類型:字串

必要:是

包含環境變數檔案的 Amazon S3 物件的 Amazon Resource Name (ARN)。

type

類型:字串

必要:是

要使用的檔案類型。唯一支援的值為 s3。

environment

類型:物件陣列

必要:否

傳遞至容器的環境變數。此參數會映射至 docker create-container 命令中的 Env 參數,以及 docker run 命令的 --env 選項。

重要

不建議使用使用純文字環境變數儲存敏感資訊 (例如憑證)。

name

類型:字串

必要:是 (當使用 environment 時)

環境變數的名稱。

value

類型:字串

必要:是 (當使用 environment 時)

環境變數的值。

"environment" : [ { "name" : "string", "value" : "string" }, { "name" : "string", "value" : "string" } ]
secrets

類型:物件陣列

必要:否

代表公開到容器之秘密的物件。如需詳細資訊,請參閱將敏感資料傳遞至 Amazon ECS 容器。

name

類型:字串

必要:是

要設定為容器上環境變數的值。

valueFrom

類型:字串

必要:是

公開給容器的秘密。支援的值為 AWS Secrets Manager 秘密的完整 Amazon Resource Name (ARN) 或 AWS Systems Manager 參數存放區中參數的完整 ARN。

注意

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

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

安全

privileged

類型:布林值

必要:否

此參數為 true 時,容器便會取得主機容器執行個體的更高許可 (類似 root 使用者)。此參數會映射至 docker create-container 命令中的 Privileged,以及 docker run 的 --privileged 選項。

user

類型:字串

必要:否

要在容器內使用的使用者。此參數會映射至 docker create-container 命令中的 User,以及 docker run 的 --user 選項。

重要

使用 host 網路模式執行任務時,請勿使用根使用者 (UID 0) 執行容器。建議使用非根使用者以提高安全性。

您可以使用下列格式指定 user。如果指定 UID 或 GID,您必須使用正整數指定它。

  • user

  • user:group

  • uid

  • uid:gid

  • user:gid

  • uid:group

readonlyRootFilesystem

類型:布林值

必要:否

此參數為 true 時,容器會取得根檔案系統的唯讀存取權。此參數會映射至 docker create-container 命令中的 ReadonlyRootfs,以及 docker run 的 --read-only 選項。

dockerSecurityOptions
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:字串陣列

必要:否

提供 SELinux 和 AppArmor 多層級安全系統自訂標籤的字串清單。此欄位對使用 Fargate 的任務中的容器無效。

ulimits

類型:Ulimit 物件陣列

必要:否

容器中要設定的 ulimits 清單。如果在任務定義中指定 ulimit 值,該值會覆寫 Docker 設定的預設值。此參數會映射至 docker create-container 命令中的 Ulimits,以及 docker run 的 --ulimit 選項。有效命名值會顯示在 Ulimit 資料類型中。

在 Fargate 上託管的 Amazon ECS 任務會使用作業系統設定的預設資源限制值,但是 Fargate 會覆寫的 nofile 資源限制參數除外。nofile 資源限制會對容器可使用的開放檔案數量設限。預設的 nofile 軟性限制為 1024,預設的硬性限制為 65535。

此參數需要容器執行個體上的 Docker Remote API 1.18 版或更新版本。若要檢查容器執行個體的 Docker Remote API 版本,請登入容器執行個體,並執行下列命令:sudo docker version --format '{{.Server.APIVersion}}'

dockerLabels

類型:字串到字串映射

必要:否

要新增到容器的標籤索引鍵/值映射。此參數會映射至 docker create-container 命令中的 Labels,以及 docker run 的 --label 選項。

此參數需要容器執行個體上的 Docker Remote API 1.18 版或更新版本。

"dockerLabels": {"string": "string" ...}

網路設定

disableNetworking
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:布林值

必要:否

當此參數為 true 時,聯網便會在容器中關閉。

預設值為 false。

"disableNetworking": true|false
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:字串陣列

必要:否

link 參數可讓容器彼此通訊,而無需連接埠映射。只有在任務定義的網路模式設定為 bridge 時才支援此參數。name:internalName 建構模組與 Docker 連結中的 name:alias 類似。最多可輸入 255 個字母 (大小寫)、數字、連字號與底線。

重要

在相同容器執行個體上配置的容器可和彼此通訊,而無需連結或主機連接埠映射。容器執行個體上的網路隔離是由安全群組和 VPC 設定所控制。

"links": ["name:internalName", ...]
hostname
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:字串

必要:否

您容器要使用的主機名稱。此參數會映射至 docker create-container 中的 Hostname,以及 docker run 的 --hostname 選項。

"hostname": "string"
dnsServers
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:字串陣列

必要:否

提供給容器的 DNS 伺服器清單。

"dnsServers": ["string", ...]
extraHosts
注意

使用 awsvpc 網路模式的任務不支援此參數。

類型:物件陣列

必要:否

要附加到容器上 /etc/hosts 檔案的主機名稱和 IP 地址映射清單。

此參數會映射至 docker create-container 命令中的 ExtraHosts,以及 docker run 的 --add-host 選項。

"extraHosts": [ { "hostname": "string", "ipAddress": "string" } ... ]
hostname

類型:字串

必要:是 (當使用 extraHosts 時)

要在 /etc/hosts 項目中使用的主機名稱。

ipAddress

類型:字串

必要:是 (當使用 extraHosts 時)

要在 /etc/hosts 項目中使用的 IP 地址。

儲存與記錄

readonlyRootFilesystem

類型:布林值

必要:否

此參數為 true 時,容器會取得根檔案系統的唯讀存取權。此參數會映射至 docker create-container 命令中的 ReadonlyRootfs,以及 docker run 的 --read-only 選項。

預設值為 false。

"readonlyRootFilesystem": true|false
mountPoints

類型:物件陣列

必要:否

容器中資料磁碟區的掛載點。此參數會映射至 Docker API 中 create-container 的 Volumes,以及 docker run 的 --volume 選項。

Windows 容器可在 $env:ProgramData 所在的相同磁碟上掛載整個目錄。Windows 容器無法在不同的磁碟機上掛載目錄,且掛載點不能跨磁碟機使用。您必須指定掛載點,將 Amazon EBS 磁碟區直接連接至 Amazon ECS 任務。

sourceVolume

類型:字串

必要:是 (當使用 mountPoints 時)

要掛載的磁碟區名稱。

containerPath

類型:字串

必要:是 (當使用 mountPoints 時)

掛載磁碟區之容器中的路徑。

readOnly

類型:布林值

必要:否

如果此數值為 true,容器擁有磁碟區的唯讀存取權。如果此值為 false,則容器可寫入磁碟區。預設值為 false。

對於在執行 Windows 作業系統之 EC2 執行個體上執行的任務,將該值保留為預設值 false。

volumesFrom

類型:物件陣列

必要:否

要從其他容器掛載的資料磁碟區。此參數會映射至 docker create-container 命令中的 VolumesFrom,以及 docker run 的 --volumes-from 選項。

sourceContainer

類型:字串

必要:是 (當使用 volumesFrom 時)

要從其中掛載磁碟區的容器名稱。

readOnly

類型:布林值

必要:否

如果此數值為 true,容器擁有磁碟區的唯讀存取權。如果此值為 false,則容器可寫入磁碟區。預設值為 false。

"volumesFrom": [ { "sourceContainer": "string", "readOnly": true|false } ]
logConfiguration

類型:LogConfiguration 物件

必要:否

容器的日誌組態規格。

例如,使用日誌組態的任務定義,請參閱Amazon ECS 任務定義範例。

此參數會映射至 docker create-container 命令中的 LogConfig,以及 docker run 的 --log-driver 選項。根據預設,容器會和 Docker 常駐程式使用一樣的日誌記錄驅動程式。不過,容器可以在容器定義中使用此參數指定日誌驅動程式,和 Docker 常駐程式使用不同的日誌驅動程式。若要讓容器使用不同的日誌驅動程式,必須在容器執行個體上適當設定日誌系統 (或在不同的日誌伺服器上使用遠端記錄選項)。

指定容器的日誌組態時,請考量下列事項:

  • Amazon ECS 支援 Docker 常駐程式可用的日誌驅動程式子集。

  • 在您的容器執行個體上,此參數需要 1.18 版或更新版本的 Docker Remote API。

"logConfiguration": { "logDriver": "awslogs",""splunk", "awsfirelens", "options": {"string": "string" ...}, "secretOptions": [{ "name": "string", "valueFrom": "string" }] }
logDriver

類型:字串

有效值:"awslogs","splunk","awsfirelens"

必要:是 (當使用 logConfiguration 時)

容器要使用的日誌驅動程式。根據預設,先前列出的有效值是 Amazon ECS 容器代理程式可用來通訊的日誌驅動程式。

支援的日誌驅動程式為 awslogs、splunk 與 awsfirelens。

如需有關如何在任務定義中使用 awslogs 日誌驅動程式將您的容器日誌傳送到 CloudWatch Logs 的詳細資訊,請參閱將 Amazon ECS 日誌傳送至 CloudWatch。

如需有關使用 awsfirelens 日誌驅動程式的詳細資訊,請參閱將 Amazon ECS 日誌傳送至 AWS 服務或 AWS Partner。

注意

如果您有未列出的自訂驅動程式,您可以分支 GitHub 上可取得的 Amazon ECS 容器代理程式專案,並自訂以搭配此驅動程式一起使用。我們鼓勵您為想要進行的變更提交提取請求。但是,我們目前不支援執行此軟體經修改的複本。

此參數需要容器執行個體上的 Docker Remote API 1.18 版或更新版本。

options

類型:字串到字串映射

必要:否

要傳送到日誌驅動程式的索引鍵/值映射組態選項。

可供指定的選項視日誌驅動程式而定。使用 awslogs 路由器將日誌路由至 Amazon CloudWatch 時,可指定的部分選項包括:

awslogs-create-group

必要:否

指定您是否希望自動建立日誌群組。若未指定此選項,則預設為 false。

注意

在您嘗試使用 awslogs-create-group 之前,您的 IAM 政策必須包含 logs:CreateLogGroup 許可。

awslogs-region

必要:是

指定 AWS 區域 awslogs日誌驅動程式要傳送 Docker 日誌的 。您可以選擇將所有的日誌從不同區域中的叢集傳送至 CloudWatch Logs 中的單一區域。如此一來,日誌全都顯示在單一位置中。或者,您可以依照區域分隔日誌,以獲得更高的精細程度。請確定指定的日誌群組存在於您使用此選項指定的區域。

awslogs-group

必要:是

請務必指定 awslogs 日誌驅動程式傳送其日誌串流的日誌群組。

awslogs-stream-prefix

必要:是

使用 awslogs-stream-prefix 選項將日誌串流與指定字首、容器名稱以及容器所屬 Amazon ECS 任務的 ID 建立關聯。如果您使用此選項指定前綴,則日誌串流會使用下列格式。

prefix-name/container-name/ecs-task-id

如果您未使用此選項指定字首,則該日誌串流會以容器執行個體上 Docker 常駐程式指派的容器 ID 命名。因為只使用 Docker 容器 ID (僅容器執行個體提供) 很難對日誌回溯追蹤到傳送該日誌的容器,所以建議您使用此選項指定前綴。

對於 Amazon ECS 服務,您可以使用服務名稱作為前綴。藉此這可讓您對日誌串流回溯追蹤到容器所屬的服務、傳送該日誌之容器的名稱,以及容器所屬任務的 ID。

您必須指定日誌的串流字首,才可在使用 Amazon ECS 主控台時,讓日誌顯示在 Log (日誌) 窗格中。

awslogs-datetime-format

必要:否

此選項會以 Python strftime 格式定義多行開始模式。日誌訊息由符合模式的一行以及不符合模式的任何後續行所組成。符合的行是日誌訊息之間的分隔符號。

使用此格式的一個使用案例範例是用於剖析輸出,例如堆疊傾印,在其他情形下這可能會記錄在多個項目中。正確的模式可允許將它擷取在單一項目中。

如需詳細資訊,請參閱 awslogs-datetime-format。

無法同時設定 awslogs-datetime-format 和 awslogs-multiline-pattern 選項。

注意

多行記錄會執行常規運算式剖析並比對所有日誌訊息。這可能會對記錄效能造成負面影響。

awslogs-multiline-pattern

必要:否

此選項定義使用常規運算式的多行開始模式。日誌訊息由符合模式的一行以及不符合模式的任何後續行所組成。符合的行是日誌訊息之間的分隔符號。

如需詳細資訊,請參閱 awslogs-multiline-pattern。

如果同時設定 awslogs-datetime-format,會忽略此選項。

無法同時設定 awslogs-datetime-format 和 awslogs-multiline-pattern 選項。

注意

多行記錄會執行常規運算式剖析並比對所有日誌訊息。這可能會對記錄效能造成負面影響。

mode

必要:否

有效值:non-blocking | blocking

此選項定義從容器到 awslogs 日誌驅動程式的日誌訊息傳送模式。當從容器的日誌流程中斷時,您選擇的傳送模式會影響應用程式可用性。

如果使用 blocking 模式,且 CloudWatch 的日誌流程中斷,則從容器程式碼寫入 stdout 與 stderr 串流的呼叫將會封鎖。應用程式的日誌記錄執行緒將因此封鎖。這可能會導致應用程式沒有回應,並導致容器運作狀態檢查失敗。

如果您使用 non-blocking 模式,則容器的日誌將儲存在使用 max-buffer-size 選項設定的記憶體內中間緩衝區中。這可以防止當日誌無法傳送至 CloudWatch 時應用程式發生無回應的狀況。如果您想要確保服務的可用性且可以接受一些日誌遺失,我們建議您使用此模式。如需詳細資訊,請參閱 Preventing log loss with non-blocking mode in the awslogs container log driver。

max-buffer-size

必要:否

預設值:1m

使用 non-blocking 模式時,max-buffer-size 日誌選項會控制用於中繼訊息儲存的緩衝區大小。請務必根據您的應用程式指定適當的緩衝區大小。當緩衝區填滿時,無法儲存進一步的日誌。無法儲存的日誌將會遺失。

要使用 splunk 日誌路由器路由日誌,需指定 splunk-token 與 splunk-url。

當您使用awsfirelens日誌路由器將日誌路由到 AWS 服務 或 AWS Partner Network 目的地以進行日誌儲存和分析時,您可以設定 log-driver-buffer-limit選項來限制記憶體中緩衝的事件數量,然後再傳送至日誌路由器容器。由於高輸送量可能會導致 Docker 內部緩衝區的記憶體不足,因此這可協助解決潛在的日誌受損問題。如需詳細資訊,請參閱為高輸送量設定 Amazon ECS 日誌。

使用 awsfirelens 路由日誌時,可指定的其他選項取決於目的地。當您將日誌匯出至 Amazon Data Firehose 時,您可以使用 指定 AWS 區域 ,region並使用 指定日誌串流的名稱delivery_stream。

在將日誌匯出至 Amazon Kinesis Data Streams 時,可透過 region 指定 AWS 區域 ,透過 stream 指定日誌串流名稱。

在將日誌匯出至 Amazon OpenSearch Service 時,可指定多個選項,例如 Name、Host (不含通訊協定的 OpenSearch Service 端點) Port、Index、Type、Aws_auth、Aws_region、Suppress_Type_Name 與 tls。

在將日誌匯出至 Amazon S3 時,可透過 bucket 選項指定儲存貯體。您也可以指定 region、total_file_size、upload_timeout 與 use_put_object 作為選項。

在您的容器執行個體上,此參數需要 1.19 版或更新版本的 Docker Remote API。

secretOptions

類型:物件陣列

必要:否

此物件代表要傳送至日誌組態的秘密。日誌組態中使用的秘密可能包括身分驗證權杖、憑證或加密金鑰。如需詳細資訊,請參閱將敏感資料傳遞至 Amazon ECS 容器。

name

類型:字串

必要:是

要設定為容器上環境變數的值。

valueFrom

類型:字串

必要:是

公開到容器日誌組態的秘密。

"logConfiguration": { "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080", "splunk-token": "...", "tag": "...", ... }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "/ecs/logconfig/splunkcred" }] }
firelensConfiguration

類型:FirelensConfiguration 物件

必要:否

容器的 FireLens 組態。這是用來指定及設定容器日誌的日誌路由器。如需詳細資訊,請參閱將 Amazon ECS 日誌傳送至 AWS 服務或 AWS Partner。

{ "firelensConfiguration": { "type": "fluentd", "options": { "KeyName": "" } } }
options

類型:字串到字串映射

必要:否

設定日誌路由器時要使用的索引鍵/值映射選項。此欄位是選用欄位,可用於指定自訂組態檔案,或者將額外的中繼資料 (例如任務、任務定義、叢集和容器執行個體詳細資訊) 新增到日誌事件。如果已指定,則要使用的語法為 "options":{"enable-ecs-log-metadata":"true|false","config-file-type:"s3|file","config-file-value":"arn:aws:s3:::amzn-s3-demo-bucket/fluent.conf|filepath"}。如需詳細資訊,請參閱Amazon ECS 任務定義範例:將日誌路由至 FireLens。

type

類型:字串

必要:是

要使用的日誌路由器。有效值為 fluentd 或 fluentbit。

資源需求

resourceRequirements

類型:ResourceRequirement 物件陣列

必要:否

要指派給容器的每個資源的類型和數量。支援的資源是 GPUs 和 Neuron 裝置。

type

類型:字串

必要:是

要指派給容器的資源類型。支援的值為 GPU 和 NeuronDevice。

value

類型:字串

必要:是

所指定資源類型的值。

如果使用 GPU 類型,值是 Amazon ECS 容器代理程式將為容器預留的實體 GPUs 數目。您可以指定完整 GPUs 的整數值、G6f 0.125執行個體上分數 GPUs 的十進位值 (0.25、 或 0.5),或ALL將容器執行個體上的所有 GPUs 配置給容器。為任務中所有容器保留的 GPU 數量不可超過任務啟動所在之容器執行個體上可用的 GPU 數量。

GPU 不適用於在 Fargate 上執行的任務。

如果使用 NeuronDevice類型,則唯一支援的值為 ALL。指定 ALL 時,容器會取得執行個體上所有 Neuron 裝置的專屬存取權。

Neuron 裝置不適用於在 Fargate 上執行的任務。

容器逾時

startTimeout

類型:整數

必要:否

範例值:120

解析容器的相依性時在放棄之前等待的持續時間 (以秒為單位)。

例如,您在任務定義中指定兩個容器,其中的 containerA 對達到 COMPLETE、SUCCESS 或 HEALTHY 狀態的 containerB 有相依性。如果為 containerB 指定 startTimeout 值,但在該時間內沒有達到所需狀態,則 containerA 不會啟動。

注意

如果容器不符合相依性限制或在符合限制之前逾時,Amazon ECS 不會讓相依容器進入下一個狀態。

最大值為 600 秒 (10 分鐘)。

stopTimeout

類型:整數

必要:否

範例值:120

當容器本身未正常結束時,強制終止容器之前的等待期間 (以秒為單位)。

如果未指定參數,則會使用預設值 30 秒。最大值為 86400 秒 (24 小時)。

容器相依性

dependsOn

類型:ContainerDependency 物件陣列

必要:否

針對容器啟動和關閉而定義的相依性。容器可以包含多個相依性。針對容器啟動而定義相依性時,它會保留給容器關閉。如需範例,請參閱 容器相依性。

注意

如果容器不符合相依性限制或在符合限制之前逾時,Amazon ECS 不會讓相依容器進入下一個狀態。

此參數要求任務或服務使用平台版本 1.3.0 或更新版本 (Linux) 或 1.0.0 (Windows)。

"dependsOn": [ { "containerName": "string", "condition": "string" } ]
containerName

類型:字串

必要:是

必須符合指定條件的容器名稱。

condition

類型:字串

必要:是

容器的相依性條件。以下是可用的條件及其行為:

  • START - 此條件會模擬連結和磁碟區目前的行為。該條件可驗證相依容器先啟動後,才允許其他容器啟動。

  • COMPLETE - 此條件驗證相依容器執行到完成 (結束) 後,才允許其他容器啟動。這適合用於只是執行指令碼,然後就退出的非必要容器。無法在基本容器上設定此條件。

  • SUCCESS - 此條件與 COMPLETE 相同,但還要求容器必須以 zero 狀態結束。無法在基本容器上設定此條件。

  • HEALTHY - 此條件會在驗證相依容器傳遞了其容器運作狀態檢查後,才允許其他容器啟動。這會要求相依容器在任務定義中設定運作狀態檢查。此條件只會在任務啟動時確認。

系統控制

systemControls

類型:SystemControl 物件

必要:否

要在容器中設定的命名空間核心參數清單。此參數會映射至 docker create-container 命令中的 Sysctls,以及 docker run 的 --sysctl 選項。例如,您可以規劃 net.ipv4.tcp_keepalive_time 設定以維持壽命較長的連線。

不建議您指定單一任務中多個容器的網路相關 systemControls 參數,而單一任務也使用 awsvpc 或 host 網路模式。執行此操作的缺點如下:

  • 如果設定任何容器的 systemControls,該設定會套用至任務中的所有容器。如果您針對單一任務中的多個容器設定不同的 systemControls,則最後啟動的容器會判斷哪些 systemControls 生效。

如果您為任務中的容器設定要使用的 IPC 資源命名空間,以下各項條件套用到您的系統控制。如需詳細資訊,請參閱IPC 模式。

  • 針對使用 host IPC 模式的任務,不支援 IPC 命名空間 systemControls。

  • 針對使用 task IPC 模式的任務,IPC 命名空間 systemControls 值套用到任務內的所有容器。

"systemControls": [ { "namespace":"string", "value":"string" } ]
namespace

類型:字串

必要:否

要設定 value 的命名空間核心參數。

有效的 IPC 命名空間值:"kernel.msgmax" | "kernel.msgmnb" | "kernel.msgmni" | "kernel.sem" | "kernel.shmall" | "kernel.shmmax" | "kernel.shmmni" | "kernel.shm_rmid_forced",以及開頭為 "fs.mqueue.*" 的 Sysctls

有效的網路命名空間值:以 "net.*" 開頭的 Sysctls。在 Fargate 上,僅接受容器內既有的具命名空間的 Sysctls。

Fargate 支援所有這些值。

value

類型:字串

必要:否

namespace 中所指定命名空間核心參數的值。

互動性

interactive

類型:布林值

必要:否

此參數為 true 時,您可部署需要配置 stdin 或 tty 的容器化應用程式。此參數會映射至 docker create-container 命令中的 OpenStdin,以及 docker run 的 --interactive 選項。

預設值為 false。

虛擬終端機

pseudoTerminal

類型:布林值

必要:否

當此參數為 true 時,會配置 TTY。此參數會映射至 docker create-container 命令中的 Tty,以及 docker run 的 --tty 選項。

預設值為 false。

Linux 參數

linuxParameters

類型:LinuxParameters 物件

必要:否

套用到容器的 Linux 特定修改項目,例如 Linux 核心功能。

capabilities

類型:KernelCapabilities 物件

必要:否

新增至 Docker 或從其提供的預設組態中卸除的容器 Linux 功能。

devices

類型:Device 物件的陣列

必要:否

任何要公開給容器的主機裝置。此參數會映射至 docker create-container 命令中的 Devices,以及 docker run 的 --device 選項。

initProcessEnabled

類型:布林值

必要:否

在容器內執行 init 處理序,該處理序可轉寄訊號及獲得處理序。此參數會對應 docker run 的 --init 選項。

maxSwap
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:整數

必要:否

容器可以使用的交換記憶體總量 (以 MiB 為單位)。此參數將會轉換為 docker run 的 --memory-swap 選項,其中值是容器記憶體與 maxSwap 值的總和。

swappiness
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:整數

必要:否

這可讓您調整容器的記憶體交換行為。swappiness 值若為 0 將導致交換不會發生,除非絕對需要。swappiness 值若為 100 將導致非常積極地交換頁面。有效的值為介於 0 與 100 之間的整數。如果未指定 swappiness 參數,則會使用預設值 60。如果未對 maxSwap 指定值,則會忽略此參數。此參數會對應 docker run 的 --memory-swappiness 選項。

sharedMemorySize
注意

在 Amazon ECS 受管執行個體上執行的任務不支援此參數。

類型:整數

必要:否

/dev/shm 磁碟區大小 (以 MiB 為單位)。此參數會對應 docker run 的 --shm-size 選項。

tmpfs

類型:Tmpfs 物件的陣列

必要:否

tmpfs 掛載的容器路徑、掛載選項和大小 (以 MiB 為單位)。此參數會對應 docker run 的 --tmpfs 選項。