

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

# 為 Amazon ECS 規劃 AWS Fargate 架構
<a name="AWS_Fargate"></a>

AWS Fargate 是一項技術，可以與 Amazon ECS 搭配使用以執行[容器](https://aws.amazon.com/containers/)，而不需管理 Amazon EC2 執行個體的伺服器或叢集。有了 AWS Fargate，就不再需要佈建、設定或擴展虛擬機器的叢集來執行容器。這樣一來即無須選擇伺服器類型、決定何時擴展叢集，或最佳化叢集壓縮。

當您使用 Fargate 執行任務與服務時，將會在容器中封裝應用程式、指定 CPU 與記憶體需求、定義聯網與 IAM 政策，以及啟動應用程式。每個 Fargate 任務都有自己的隔離界限，並且不會與另一個任務共用基礎核心、CPU 資源、記憶體資源或彈性網路界面。您可以將 `requiresCompatibilities` 任務定義參數設定為 `FARGATE`，以設定 Fargate 的任務定義。如需詳細資訊，請參閱[Capacity](task_definition_parameters.md#requires_compatibilities)。

Fargate 提供多種平台版本，包括 Amazon Linux 2 (平台版本 1.3.0)、Bottlerocket 作業系統 (平台版本 1.4.0) 以及 Microsoft Windows 2019 Server Full 與 Core 版本。除非另有說明，否則相關資訊適用於所有 Fargate 平台。

如需在 Fargate 上支援 Linux 容器的區域的資訊，請參閱[AWS Fargate 上的 Linux 容器](AWS_Fargate-Regions.md#linux-regions)。

如需在 Fargate 上支援 Windows 容器的區域的資訊，請參閱[AWS Fargate 上的 Windows 容器](AWS_Fargate-Regions.md#windows-regions)。

## 逐步解說
<a name="fargate-walkthrough"></a>

如需有關如何開始使用主控台的資訊，請參閱：
+ [了解如何為 Fargate 建立 Amazon ECS Linux 任務](getting-started-fargate.md)
+ [了解如何為 Fargate 建立 Amazon ECS Windows 任務](Windows_fargate-getting_started.md)

如需如何開始使用 的資訊 AWS CLI，請參閱：
+ [使用 為 Fargate 建立 Amazon ECS Linux 任務 AWS CLI](ECS_AWSCLI_Fargate.md)
+ [使用 為 Fargate 建立 Amazon ECS Windows 任務 AWS CLI](ECS_AWSCLI_Fargate_windows.md)

## 容量提供者
<a name="fargate-spot"></a>

可用的容量提供者如下：
+ Fargate
+ Fargate Spot – 能以折扣價 (與 AWS Fargate 價格相比) 執行可容忍中斷的 Amazon ECS 任務。Fargate Spot 在備用運算容量上執行任務。當 AWS 需要恢復容量時，您的任務會受到兩分鐘警告而中斷。如需詳細資訊，請參閱[Fargate 的 Amazon ECS 叢集](fargate-capacity-providers.md)。

## 任務定義
<a name="fargate-task-defintion"></a>

Fargate 任務不支援所有可用的 Amazon ECS 任務定義參數。有些參數完全不予以支援，而其他參數對 Fargate 任務會有不同的行為。如需詳細資訊，請參閱[任務 CPU 和記憶體](fargate-tasks-services.md#fargate-tasks-size)。

## 平台版本
<a name="fargate-platform-versions"></a>

AWS Fargate 平台版本用於參考 Fargate 任務基礎設施的特定執行期環境。其結合了核心與容器執行時間版本。在執行任務或建立服務以維護許多相同的任務時，請選取平台版本。

為因應執行時間環境演進 (例如是否有核心或作業系統的更新、新功能、錯誤修正或安全性更新)，我們會不時發行新的平台版本修訂版。建立新的平台版本修訂版即可更新 Fargate 平台版本。每項任務在其生命週期期間都只會在一個平台版本修訂版上執行。如果想要使用最新的平台版本修訂版，必須啟動新任務。在 Fargate 上執行的新任務一律會在平台版本的最新修訂版上執行，以確保任務一律在已修補的安全基礎設施上啟動。

如果發現影響現有平台版本的安全問題， 會 AWS 建立新的平台版本修補修訂，並淘汰在易受攻擊修訂上執行的任務。在某些案例中，您可能會收到通知，告知您在 Fargate 上的任務已排程淘汰。如需詳細資訊，請參閱[Amazon ECS 上 AWS Fargate 的任務淘汰和維護](task-maintenance.md)。

如需更多資訊，請參閱[適用於 Amazon ECS 的 Fargate 平台版本](platform-fargate.md)。

## 服務負載平衡
<a name="fargate-tasks-services-load-balancing"></a>

AWS Fargate 上的 Amazon ECS 服務可以選擇性地設定為使用 Elastic Load Balancing，將您服務中任務的流量平均分配。

AWS Fargate 上的 Amazon ECS 服務，支援 Application Load Balancer、Network Load Balancer 與 Gateway Load Balancer 負載平衡器類型。Application Load Balancer 用於路由 HTTP/HTTPS (或 Layer 7) 流量。Network Load Balancer 用於路由 TCP 或 UDP (或 Layer 4) 流量。如需詳細資訊，請參閱[使用負載平衡分佈 Amazon ECS 服務流量](service-load-balancing.md)。

當您為這些服務建立目標群組時，必須選擇 `ip` 作為目標類型，而不是選擇 `instance`。因為採用 `awsvpc` 網路模式的任務是與彈性網路界面相關聯，而非與 Amazon EC2 執行個體相關聯。如需詳細資訊，請參閱[使用負載平衡分佈 Amazon ECS 服務流量](service-load-balancing.md)。

當使用平台版本 1.4 或更高版本時，只支援使用 Network Load Balancer 將 UDP 流量路由到 AWS Fargate 上的 Amazon ECS 任務。

## 用量指標
<a name="fargate-usage-metrics"></a>

您可以使用 CloudWatch 用量指標來提供您帳戶的資源用量可見度。使用這些指標，以 CloudWatch 圖表和儀表板視覺化目前的服務使用狀況。

AWS Fargate 用量指標對應至 AWS 服務配額。您可以設定警示，在您的用量接近服務配額時發出警示。如需有關 AWS Fargate 服務配額的詳細資訊，請參閱 *Amazon Web Services 一般參考* 中的 [Amazon ECS endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html)。

如需 AWS Fargate 用量指標的詳細資訊，請參閱[AWS Fargate用量指標](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/monitoring-fargate-usage.html)。

# Amazon ECS 中 Fargate 適用時機安全考量
<a name="security-fargate-ec2"></a>

 建議需要為任務實現嚴格隔離的客戶採用 Fargate。Fargate 會在硬體虛擬化環境中執行每個任務。此舉可確保這些容器化工作負載，不會與其他任務共用網路介面、Fargate 暫時性儲存、CPU 或記憶體。如需詳細資訊，請參閱 [的安全概觀 AWS Fargate](https://d1.awsstatic.com/whitepapers/AWS_Fargate_Security_Overview_Whitepaper.pdf)。

# Amazon ECS 中的 Fargate 安全最佳實務
<a name="security-fargate"></a>

建議您在使用 AWS Fargate時考量下列最佳實務。如需其他指引，請參閱 [的安全概觀 AWS Fargate](https://d1.awsstatic.com/whitepapers/AWS_Fargate_Security_Overview_Whitepaper.pdf)。

## 使用 AWS KMS 加密 Fargate 的暫時性儲存
<a name="security-fargate-ephemeral-storage-encryption"></a>

您應該讓 AWS KMS 或您自己的客戶受管金鑰加密暫時性儲存。對於使用平台版本 `1.4.0` 或更新版本，且託管於 Fargate 上的任務，每個任務都會配置至少 20 GiB 的暫時性儲存。如需詳細資訊，請參閱[客戶自管金鑰 (CMK)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-storage-encryption.html)。您可以增加暫時性儲存的總量，最多可達 200 GiB，方法是在任務定義中指定 `ephemeralStorage` 參數。對於 2020 年 5 月 28 日當日或之後啟動的此類任務，其暫時性儲存空間均採用 AES-256 加密演算法，並透過 Fargate 託管的加密金鑰進行加密。

如需詳細資訊，請參閱 [Amazon ECS 任務的儲存選項](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html)。

**範例：在 Fargate 平台版本 1.4.0 上啟動具有暫時性儲存加密功能的任務**

以下命令將在 Fargate 平台版本 1.4 上啟動任務。由於此任務是作為叢集的組成部分啟動，因此任務會使用自動加密的 20 GiB 暫時性儲存。

```
aws ecs run-task --cluster clustername \
  --task-definition taskdefinition:version \
  --count 1
  --launch-type "FARGATE" \
  --platform-version 1.4.0 \
  --network-configuration "awsvpcConfiguration={subnets=[subnetid],securityGroups=[securitygroupid]}" \ 
  --region region
```

## Fargate 核心系統呼叫追蹤的 SYS\$1PTRACE 功能
<a name="security-fargate-syscall-tracing"></a>

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

在 Fargate 上啟動的任務僅支援新增 `SYS_PTRACE` 核心功能。

下列影片說明如何透過 Sysdig [Falco](https://github.com/falcosecurity/falco) 專案使用此功能。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/OYGKjmFeLqI/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/OYGKjmFeLqI)


在上一個影片中討論的程式碼可以在 GitHub [這裡](https://github.com/paavan98pm/ecs-fargate-pv1.4-falco)找到。

## 搭配 Fargate 執行時期監控使用 Amazon GuardDuty
<a name="fargate-runtime-monitoring"></a>

Amazon GuardDuty 是一種威脅偵測服務，可協助保護您 AWS 環境中的帳戶、容器、工作負載和資料。GuardDuty 使用機器學習 (ML) 模型，以及異常和威脅偵測功能，持續監控不同的日誌來源和執行時期活動，以識別環境中的潛在安全風險和惡意活動和排定其優先順序。

GuardDuty 中的執行期監控透過持續監控 AWS 日誌和聯網活動來識別惡意或未經授權的行為，來保護在 Fargate 上執行的工作負載。執行時期監控使用輕量且全受管的 GuardDuty 安全代理程式，可分析主機上的行為，例如檔案存取、程序執行與網路連線。這涵蓋的問題包括：提升權限、使用暴露的憑證、與惡意 IP 位址或網域通訊，以及 Amazon EC2 執行個體與容器工作負載上出現惡意軟體。如需詳細資訊，請參閱 *GuardDuty User Guide* 中的 [GuardDuty Runtime Monitoring](https://docs.aws.amazon.com/guardduty/latest/ug/runtime-monitoring.html)。

# 為 Amazon ECS 選用 Fargate 的安全考量
<a name="fargate-security-considerations"></a>

每項任務都有專用的基礎架構容量，因為 Fargate 會在隔離的虛擬環境中執行每個工作負載。在 Fargate 上執行的工作負載不會與其他任務共用網路介面、暫時性儲存、CPU 或記憶體。您可以在任務中執行多個容器，包括應用程式容器和附屬容器，或者僅是附屬。*附屬*是在 Amazon ECS 任務中與應用程式容器一起執行的容器。當應用程式容器執行核心應用程式程式碼時，在附屬中執行的程序可以增強應用程式。附屬可協助您將應用程式功能隔離到專用容器中，讓您更輕鬆地更新應用程式的各個部分。

屬於相同任務的容器會共用 Fargate 啟動類型的資源，因為這些容器將一律在相同的主機上執行並共用運算資源。這些容器也共用 Fargate 提供的暫時性儲存。任務中的 Linux 容器會共用網路命名空間，包括 IP 地址和網路連接埠。在任務內部，屬於任務的容器可以透過本機主機進行相互通訊。

Fargate 中的執行期環境可防止您使用 EC2 執行個體支援的某些控制器功能。架構在 Fargate 上執行的工作負載時，請考量下列事項：
+ 沒有特殊權限的容器或存取 - Fargate 目前無法提供特殊權限的容器或存取等功能。這將影響使用案例，例如在 Docker 中執行 Docker。
+  對 Linux 功能的有限存取 - 在 Fargate 上執行容器的環境已被鎖定。其他 Linux 功能 (例如：CAP\$1SYS\$1ADMIN 和 CAP\$1NET\$1ADMIN) 受到限制，以防止權限提升。Fargate 支援將 [CAP\$1SYS\$1PSTRACE](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#other_task_definition_params) Linux 功能新增至任務中，以允許在任務中部署的可觀測性和安全工具來監控容器化應用程式。
+ 無法存取基礎主機 - 客戶和 AWS 運算子都無法連線到執行客戶工作負載的主機。您可以使用 ECS Exec 執行命令，或為在 Fargate 上執行的容器取得 Shell。您可以使用 ECS Exec 來協助收集診斷資訊以進行偵錯。Fargate 也可防止容器存取底層主機的資源，例如檔案系統、裝置、聯網與容器執行期。
+ 聯網 - 您可以使用安全群組與網路 ACL 來控制傳入和傳出流量。Fargate 任務會從 VPC 中設定的子網路接收 IP 地址。

# 適用於 Amazon ECS 的 Fargate 平台版本
<a name="platform-fargate"></a>

AWS Fargate 平台版本用於參考 Fargate 任務基礎設施的特定執行期環境。其結合了核心與容器執行時間版本。在執行任務或建立服務以維護許多相同的任務時，請選取平台版本。

為因應執行時間環境演進 (例如是否有核心或作業系統的更新、新功能、錯誤修正或安全性更新)，我們會不時發行新的平台版本修訂版。建立新的平台版本修訂版即可更新 Fargate 平台版本。每項任務在其生命週期期間都只會在一個平台版本修訂版上執行。如果想要使用最新的平台版本修訂版，必須啟動新任務。在 Fargate 上執行的新任務一律會在平台版本的最新修訂版上執行，以確保任務一律在已修補的安全基礎設施上啟動。

如果發現影響現有平台版本的安全問題， 會 AWS 建立新的平台版本修補修訂，並淘汰在易受攻擊修訂上執行的任務。在某些案例中，您可能會收到通知，告知您在 Fargate 上的任務已排程淘汰。如需詳細資訊，請參閱[Amazon ECS 上 AWS Fargate 的任務淘汰和維護](task-maintenance.md)。

您可於執行任務或部署服務時指定平台版本。

指定平台版本時，應考慮以下項目：
+ 您可以指定特定版本編號，例如 `1.4.0` 或 `LATEST`。

  **LATEST** Linux 平台版本為 `1.4.0`。

  **LATEST** Windows 平台版本為 `1.0.0`。
+ 如果要更新服務的平台版本，請建立部署。例如，假設您有在 Linux 平台版本 `1.3.0` 上執行任務的服務。若要變更服務以在 Linux 平台版本 `1.4.0` 上執行任務，您可以更新服務並指定新的平台版本。您的任務會透過最新的平台版本和最新的平台版本修訂版重新部署。如需有關部署的詳細資訊，請參閱 [Amazon ECS 服務](ecs_services.md)。
+ 當您沒有更新平台版本便擴展服務規模時，這些任務所獲得的平台版本，即為服務目前部署上指定的版本。例如，假設您有在 Linux 平台版本 `1.3.0` 上執行任務的服務。如果增加所需的服務數量，服務排程器會使用平台版本 `1.3.0` 的最新平台版本修訂版來啟動新任務。
+ 新任務一律會在平台版本的最新修訂版上執行。這可確保任務一律位於安全且經修補的基礎結構上。
+ Fargate 上 Linux 容器和 Windows 容器的平台版本編號各自獨立。例如，Fargate 上 Windows 容器的平台版本 `1.0.0` 中使用的行為、功能和軟體與 Fargate 上 Linux 容器的平台版本 `1.0.0` 無法相比。
+ 以下內容適用於 Fargate Windows 平台版本。

  Microsoft Windows Server 容器映像必須在特定版本的 Windows Server 中建立。執行任務或建立符合 Windows Server 容器映像的服務時，必須在 `platformFamily` 中選取相同版本的 Windows Server。此外，您可以在任務定義中提供相符的 `operatingSystemFamily`，以防止任務在錯誤的 Windows 版本上執行。如需詳細資訊，請參閱 Microsoft Learn 網站上的[比對容器主機版本與容器映像版本](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility#matching-container-host-version-with-container-image-versions)。

# 在 Amazon ECS 上遷移至 Linux 平台版本 1.4.0
<a name="platform-version-migration"></a>

將 Fargate 任務上的 Amazon ECS 從平台版本 `1.0.0`、`1.1.0`、`1.2.0` 或 `1.3.0` 遷移至平台版本 `1.4.0` 時，應考慮以下項目。最佳實務是，在遷移任務之前確認任務在平台版本 `1.4.0` 上正常運作。
+ 進出任務的網路流量行為已更新。自平台版本 1.4.0 起，所有在 Fargate 上執行的 Amazon ECS 任務會配置單一彈性網路介面 (也稱為任務 ENI)，且所有網路流量均透過該 ENI 在 VPC 內傳輸。您可以透過 VPC 流程日誌查看流量詳情。如需更多資訊，請參閱[Fargate 的 Amazon ECS 任務聯網選項](fargate-task-networking.md)。
+ 如果使用的是介面 VPC 端點，建議考量以下事項。
  + 若容器映像透過 Amazon ECR 託管，您需要下列端點。如需詳細資訊，請參閱 *Amazon Elastic Container Registry User Guide* 中的 [Amazon ECR interface VPC endpoints (AWS PrivateLink)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html)。
    + **com.amazonaws.*region*.ecr.dkr** Amazon ECR VPC 端點
    + **com.amazonaws.*region*.ecr.api** Amazon ECR VPC 端點
    +  Amazon S3 閘道端點
  + 當任務定義引用 Secrets Manager 秘密來擷取容器的敏感資料時，您必須建立 Secrets Manager 的介面 VPC 端點。如需詳細資訊，請參閱 *《AWS Secrets Manager 使用者指南》*中的[搭配使用 Secrets Manager 與 VPC 端點](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)。
  + 當任務定義引用 Systems Manager Parameter Store 參數來擷取容器的敏感資料時，您必須建立 Systems Manager 的介面 VPC 端點。如需詳細資訊，請參閱 *AWS Systems Manager User Guide* 中的 [Improve the security of EC2 instances by using VPC endpoints for Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-create-vpc.html)。
  + 與任務相關聯的彈性網路介面 (ENI) 的安全群組需要具有安全群組規則，以允許任務與 VPC 端點之間的流量。

# Fargate Linux 平台版本變更日誌
<a name="platform-versions-changelog"></a>

以下是可用的 Linux 平台版本。如需平台版本取代的相關資訊，請參閱[AWS Fargate Linux 平台版本棄用](platform-versions-retired.md)。

## 1.4.0
<a name="platform-version-1-4"></a>

以下是平台版本 `1.4.0` 的變更日誌。
+ 從 2020 年 11 月 5 日開始，在 Fargate 上啟動的使用平台版本 `1.4.0` 的任何新 Amazon ECS 任務都將能夠使用以下功能：
  + 當您使用 Secrets Manager 來存放敏感資料時，您可以將特定的 JSON 金鑰或特定版本的秘密作為環境變數插入在日誌組態中。如需詳細資訊，請參閱[將敏感資料傳遞至 Amazon ECS 容器](specifying-sensitive-data.md)。
  + 使用 `environmentFiles` 容器定義參數，指定大量環境變數。如需詳細資訊，請參閱[將個別環境變數傳遞至 Amazon ECS 容器](taskdef-envfiles.md)。
  + 在 VPC 中執行的任務以及為 IPv6 啟用的子網路將被指派一個私有 IPv4 地址和一個 IPv6 地址。如需詳細資訊，請參閱 [Fargate 的 Amazon ECS 任務聯網選項](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-networking.html)。
  + 任務中繼資料端點版本 4 提供有關任務和容器的其他中繼資料，包括任務啟動類型、容器的 Amazon Resource Name (ARN)，以及使用的日誌驅動程式和日誌驅動程式選項。查詢 `/stats` 端點時，您還會收到容器的網路速度統計資訊。如需詳細資訊，請參閱[任務中繼資料端點第 4 版](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v4-fargate.html)。
+ 從 2020 年 7 月 30 日開始，在 Fargate 上啟動的使用平台版本 `1.4.0` 的任何新 Amazon ECS 任務將能夠使用 Network Load Balancer 將 UDP 流量路由到 Fargate 任務上的 Amazon ECS。如需詳細資訊，請參閱[使用負載平衡分佈 Amazon ECS 服務流量](service-load-balancing.md)。
+ 從 2020 年 5 月 28 日開始，在 Fargate 上使用平台版本啟動的任何新 Amazon ECS 任務`1.4.0`都會使用 AWS 擁有的加密金鑰，以 AES-256 加密演算法加密其暫時性儲存。如需詳細資訊，請參閱[Amazon ECS 的 Fargate 任務暫時性儲存](fargate-task-storage.md)及[Amazon ECS 任務的儲存選項](using_data_volumes.md)。
+ 新增了對使用 Amazon EFS 檔案系統磁碟區的支援，以便實現持久性任務儲存。如需詳細資訊，請參閱[將 Amazon EFS 磁碟區與 Amazon ECS 搭配使用](efs-volumes.md)。
+ 暫時任務儲存已增加到每個任務至少 20 GB。如需詳細資訊，請參閱[Amazon ECS 的 Fargate 任務暫時性儲存](fargate-task-storage.md)。
+ 進出任務的網路流量行為已更新。從平台版本 1.4.0 開始，所有 Fargate 任務會收到單一彈性網路界面 (也稱為任務 ENI)，所有網路流量都會流經 VPC 中的 ENI，而且您可以透過 VPC 流程日誌查看。如需有關 Amazon EC2 啟動類型聯網的詳細資訊，請參閱 [EC2 的 Amazon ECS 任務聯網選項](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)。如需有關 Fargate 聯網的詳細資訊，請參閱 [Fargate 的 Amazon ECS 任務聯網選項](fargate-task-networking.md)。
+ 任務 ENI 新增 Jumbo Frame 的支援。網路界面皆以最大傳輸單位 (MTU) 來設定，這是適合單一框架的最大酬載大小。MTU 越大，單一框架能容納的應用程式酬載越多，可降低每個框架的額外負荷並提高效率。當任務和目的地之間的網路路徑支援 Jumbo Frame (例如，VPC 中剩餘的所有流量) 時，支援 Jumbo Frame 會降低額外負荷。
+ CloudWatch Container Insights 將包含 Fargate 任務的網路效能指標。如需詳細資訊，請參閱[使用具有增強可觀測性的 Container Insights 監控 Amazon ECS](cloudwatch-container-insights.md)。
+ 已新增任務中繼資料端點第 4 版的支援，該端點為您的 Fargate 任務提供額外的資訊，包括任務的網路統計資料，以及執行中任務所在的可用區域。如需詳細資訊，請參閱[Amazon ECS 任務中繼資料端點第 4 版](task-metadata-endpoint-v4.md)及[Fargate 上任務的 Amazon ECS 任務中繼資料端點第 4 版](task-metadata-endpoint-v4-fargate.md)。
+ 在容器定義中，新增對 `SYS_PTRACE` Linux 參數的支援。如需詳細資訊，請參閱[Linux 參數](task_definition_parameters.md#container_definition_linuxparameters)。
+ Fargate 容器代理會取代所有 Fargate 任務的 Amazon ECS 容器代理的使用。此變更通常不會對您的任務執行方式產生影響。
+ 容器執行時間目前使用 Containerd，而非 Docker。此變更很可能不會對您的任務執行方式產生影響。您會注意到，容器執行時間產生的一些錯誤訊息會從提及 Docker 變成為較為一般的錯誤。如需詳細資訊，請參閱 [Amazon ECS 已停止任務錯誤訊息](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/stopped-task-error-codes.html)。
+ 以 Amazon Linux 2 為基礎。

# AWS Fargate Linux 平台版本棄用
<a name="platform-versions-retired"></a>

**重要**  
 我們將在 2026 年 6 月 30 日結束對 Fargate 中 PV 1.3.0 的支援。從 2026 年 6 月 15 日開始，我們會將平台版本 1.3.0 設為已淘汰。屆時，您將無法啟動新任務或建立使用平台版本 1.3.0 設定的新服務，但現有任務仍可持續執行。在 2026 年 6 月 30 日，我們將終止使用平台 1.3.0 版設定的所有剩餘執行中任務。  
如需有關如何遷移至平台版本 1.4 的資訊，請參閱[在 Amazon ECS 上遷移至 Linux 平台版本 1.4.0](platform-version-migration.md)。

下表列出 AWS Fargate 已棄用或已排程棄用的 Linux 平台版本。這些平台版本在其公佈的取代日期前都會保持可用。

對已排定取代的每個平台版本提供*強制更新日期*。在強制更新日期當天，任何使用 `LATEST` 平台版本 (已排定取代的平台版本) 的服務都將使用強制新部署選項進行更新。使用強制新部署選項更新服務時，在排定取代的平台版本上執行的所有任務都會停止，並且會使用 `LATEST` 標籤當時指示的平台版本啟動新任務。已設定明確平台版本的獨立任務或服務不受強制更新日期的影響。

如需有關如何遷移至最新平台版本的資訊，請參閱[在 Amazon ECS 上遷移至 Linux 平台版本 1.4.0](platform-version-migration.md)。

平台版本達到*棄用日期*後，平台版本將不再適用於新任務或服務。任何明確使用過時平台版本的獨立任務或服務，都會繼續使用該平台版本，直到任務停止為止。在取代日期之後，已被取代的平台版本將不再收到任何安全性更新或錯誤修正。


| 平台版本 | 強制更新日期 | 取代日期 | 
| --- | --- | --- | 
|  1.0.0  |  2020 年 10 月 26 日  |  2020 年 12 月 14 日  | 
|  1.1.0  |  2020 年 10 月 26 日  |  2020 年 12 月 14 日  | 
|  1.2.0  |  2020 年 10 月 26 日  |  2020 年 12 月 14 日  | 
| 1.3.0 |  | 2026 年 6 月 15 日 | 

如需目前平台版本的相關詳細資訊，請參閱[適用於 Amazon ECS 的 Fargate 平台版本](platform-fargate.md)。

## 已棄用的 Fargate Linux 版本變更日誌
<a name="deprecated-version-changelog"></a>

### 1.3.0
<a name="platform-version-1-3"></a>

以下是平台版本 `1.3.0` 的變更日誌。
+ 從 2019 年 9 月 30 日開始，啟動的任何新 Fargate 任務都支援 `awsfirelens` 日誌驅動程式。將 FireLens for Amazon ECS 設定為使用任務定義參數，將日誌路由到 AWS 服務或 AWS 合作夥伴網路 (APN) 目的地，以進行日誌儲存和分析。如需詳細資訊，請參閱[將 Amazon ECS 日誌傳送至 AWS 服務或 AWS Partner](using_firelens.md)。
+ 增加了對 Fargate 任務的任務回收機制，此過程將重新整理屬於 Amazon ECS 服務的各項任務。如需詳細資訊，[請參閱 Amazon ECS 上 AWS Fargate 的任務淘汰和維護](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-maintenance.html)。
+ 從 2019 年 3 月 27 日開始，啟動的任何新的 Fargate 任務可以使用額外的任務定義參數，來定義代理組態、容器啟動和關機的相依性，以及每一容器的啟動和停止逾時值。如需詳細資訊，請參閱[代理組態](task_definition_parameters.md#proxyConfiguration)、[容器相依性](task_definition_parameters.md#container_definition_dependson)及[容器逾時](task_definition_parameters.md#container_definition_timeout)。
+ 從 2019 年 4 月 2 日開始，啟動的任何新 Fargate 任務都支援將敏感資料注入您的容器，方法是將敏感資料存放在 AWS Secrets Manager 秘密或 AWS Systems Manager 參數存放區參數中，然後在您的容器定義中參考它們。如需詳細資訊，請參閱[將敏感資料傳遞至 Amazon ECS 容器](specifying-sensitive-data.md)。
+ 從 2019 年 5 月 1 日開始，啟動的任何新 Fargate 任務支援使用 `secretOptions` 容器定義參數，以參考容器日誌組態中的敏感資料。如需詳細資訊，請參閱[將敏感資料傳遞至 Amazon ECS 容器](specifying-sensitive-data.md)。
+ 從 2019 年 5 月 1 日開始，啟動的任何新 Fargate 任務除了支援 `awslogs` 日誌驅動程式外，還支援 `splunk` 日誌驅動程式。如需詳細資訊，請參閱[儲存與記錄](task_definition_parameters.md#container_definition_storage)。
+ 從 2019 年 7 月 9 日開始，啟動的任何新 Fargate 任務都支援 CloudWatch Container Insights。如需詳細資訊，請參閱[使用具有增強可觀測性的 Container Insights 監控 Amazon ECS](cloudwatch-container-insights.md)。
+ 從 2019 年 12 月 3 日開始，支援 Fargate Spot 容量提供者。如需詳細資訊，請參閱[Fargate 的 Amazon ECS 叢集](fargate-capacity-providers.md)。
+ 以 Amazon Linux 2 為基礎。

### 1.2.0
<a name="platform-version-1-2"></a>

以下是平台版本 `1.2.0` 的變更日誌。

**注意**  
平台版本 `1.2.0` 已無法使用。如需平台版本取代的相關資訊，請參閱[AWS Fargate Linux 平台版本棄用](#platform-versions-retired)。
+ 新增使用 的私有登錄檔身分驗證支援 AWS Secrets Manager。如需詳細資訊，請參閱[在 Amazon ECS 中使用非AWS 容器映像](private-auth.md)。

### 1.1.0
<a name="platform-version-1-1"></a>

以下是平台版本 `1.1.0` 的變更日誌。

**注意**  
平台版本 `1.1.0` 已無法使用。如需平台版本取代的相關資訊，請參閱[AWS Fargate Linux 平台版本棄用](#platform-versions-retired)。
+ 新增對 Amazon ECS 任務中繼資料端點的支援。如需詳細資訊，請參閱[Fargate 上任務可用的 Amazon ECS 任務中繼資料](fargate-metadata.md)。
+ 在容器定義中，新增對 Docker 運作狀態檢查的支援。如需詳細資訊，請參閱[運作狀態檢查](task_definition_parameters.md#container_definition_healthcheck)。
+ 新增對 Amazon ECS 服務探索的支援。如需詳細資訊，請參閱[使用服務探索以利用 DNS 名稱連接 Amazon ECS 服務](service-discovery.md)。

### 1.0.0
<a name="platform-version-1-0"></a>

以下是平台版本 `1.0.0` 的變更日誌。

**注意**  
平台版本 `1.0.0` 已無法使用。如需平台版本取代的相關資訊，請參閱[AWS Fargate Linux 平台版本棄用](#platform-versions-retired)。
+ 以 Amazon Linux 2017.09 為基礎。
+ 初始版本。

# Fargate Windows 平台版本變更日誌
<a name="platform-windows-fargate"></a>

以下是可用於 Windows 容器的平台版本。

## 1.0.0
<a name="platform-version-w1-0"></a>

以下是平台版本 `1.0.0` 的變更日誌。
+ 下列 Microsoft Windows Server 作業系統上支援的初始版本：
  + Windows Server 2019 Full
  + Windows Server 2019 Core
  + Windows Server 2022 Full
  + Windows Server 2022 Core

# 為 Amazon ECS 選用 Fargate Windows 容器的安全考量
<a name="windows-considerations"></a>

以下是您在 AWS Fargate 上執行 Windows 容器時需要知道的差異和考量事項。

如需在 Linux 與 Windows 容器上執行任務，必須為每個作業系統建立獨立的任務定義。

AWS 會處理作業系統授權管理，因此您不需要任何其他 Microsoft Windows Server 授權。

 AWS Fargate 上的 Windows 容器支援下列作業系統：
+ Windows Server 2019 Full
+ Windows Server 2019 Core
+ Windows Server 2022 Full
+ Windows Server 2022 Core

 AWS Fargate 上的 Windows 容器支援 awslogs 驅動程式。如需詳細資訊，請參閱[將 Amazon ECS 日誌傳送至 CloudWatch](using_awslogs.md)。

Fargate 上的 Windows 容器不支援下列功能：
+ Amazon FSx
+ ENI 中繼
+ Windows 容器的 gMSA
+ 適用於任務的 App Mesh 服務和代理整合
+ 適用於任務的 Firelens 日誌路由器整合
+ EFS 磁碟區
+ EBS 磁碟區
+ 下列任務定義參數：
  + `maxSwap`
  + `swappiness`
  + `environmentFiles`
+ Fargate Spot 容量提供者
+ 映像磁碟區

  Dockerfile `volume` 選項會遭到忽略。而是在任務定義中使用綁定掛載。如需詳細資訊，請參閱[搭配 Amazon ECS 使用綁定掛載](bind-mounts.md)。
+ Windows 容器會忽略任務層級的 CPU 與記憶體參數。我們建議為 Windows 容器指定容器層級的資源。
+ 任務的記憶體
+ 容器上的記憶體保留量
+ 容器上的重新啟動政策
+ 您無法更新服務的平台系列。

# Amazon ECS 的 Fargate 容器映像上 Linux 容器的提取行為
<a name="fargate-pull-behavior"></a>

每個 Fargate 任務均執行於專屬的一次性、單租用戶執行個體上。在 Fargate 上執行 Linux 容器時，系統不會快取執行個體上的容器映像或容器映像層。因此，對於任務中定義的每個容器映像，每個 Fargate 任務皆需從容器映像登錄檔中完整提取整個映像。提取映像所需的時間與啟動 Fargate 任務所需的時間直接相關。

請考量下列事項，以最佳化映像提取時間。

**容器映像就近存取**  
若要縮短下載容器映像所需的時間，應將資料存放位置盡可能靠近運算資源。透過網際網路或跨 提取容器映像 AWS 區域 可能會影響下載時間。建議將容器映像存放在將執行任務的同一區域中。如果將容器映像儲存於 Amazon ECR 中，可使用 VPC 介面端點進一步縮短映像提取時間。如需詳細資訊，請參閱 *Amazon ECR User Guide* 中的 [Amazon ECR interface VPC endpoints (AWS PrivateLink)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html)。

**容器映像大小縮減**  
容器映像的大小會直接影響下載時間。縮減容器映像的大小或容器映像層的數量，可以縮短下載映像所需的時間。輕量型基礎映像 (例如，精簡版 Amazon Linux 2023 容器映像) 的體積，可能遠小於基於傳統作業系統的基礎映像。如需有關精簡映像的詳細資訊，請參閱 *Amazon Linux 2023 User Guide* 中的 [AL2023 Minimal container image](https://docs.aws.amazon.com/linux/al2023/ug/minimal-container.html)。

**替代壓縮演算法**  
容器映像層在推送至容器映像登錄檔時，通常會經過壓縮處理。壓縮容器映像層可減少需透過網路傳輸的資料量，以及儲存在容器映像檔登錄中的資料量。當容器映像層經由容器執行時期下載至執行個體後，該層會進行解壓縮。所使用的壓縮演算法以及執行時期可用的 vCPU 數量，皆會影響容器映像解壓縮所需的時間。在 Fargate 上，您可以透過增加任務大小或採用效能更佳的 zstd 壓縮演算法來縮短解壓縮時間。如需詳細資訊，請參閱 GitHub 上的 [zstd](https://github.com/facebook/zstd)。如需如何實作 Fargate 映像的資訊，請參閱[使用 zstd 壓縮容器映像縮短 AWS Fargate 啟動時間](https://aws.amazon.com/blogs/containers/reducing-aws-fargate-startup-times-with-zstd-compressed-container-images/)。

**延遲載入容器映像**  
對於大型容器映像 (> 250 MB)，最好是延遲載入容器映像，而不是下載所有容器映像。在 Fargate 上，您可以使用 Seekable OCI (SOCI) 從容器映像登錄檔延遲載入容器映像。如需詳細資訊，請參閱 GitHub 上的 [soci-snapshotter](https://github.com/awslabs/soci-snapshotter)，以及[使用 Seekable OCI (SOCI) 延遲載入容器映像](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-tasks-services.html#fargate-tasks-soci-images)。

# Amazon ECS 的 Fargate 容器映像上 Windows 容器的提取行為
<a name="fargate-windows-behavior"></a>

Fargate Windows 會快取 Microsoft 提供的最新一個月與上一個月的伺服器核心基礎映像。這些映像對應每個修補程式星期二更新的 KB/建置編號。例如，Microsoft 於 2024 年 4 月 9 日針對 Windows Server 2019 發布了 KB5036896 (17763.5696)。2024 年 3 月 12 日發布的前月 KB 修補程式為 KB5035849 (17763.5576)。因此，針對平台 `WINDOWS_SERVER_2019_CORE` 與 `WINDOWS_SERVER_2019_FULL`，下列容器映像已快取：
+ `mcr.microsoft.com/windows/servercore:ltsc2019`
+ ` mcr.microsoft.com/windows/servercore:10.0.17763.5696`
+ `mcr.microsoft.com/windows/servercore:10.0.17763.5576`

 此外，Microsoft 於 2024 年 4 月 9 日針對 Windows Server 2022 發布了 KB5036909 (20348.2402)。2024 年 3 月 12 日發布的前月 KB 修補程式為 KB5035857 (20348.2340)。因此，針對平台 `WINDOWS_SERVER_2022_CORE` 與 `WINDOWS_SERVER_2022_FULL`，下列容器映像已快取：
+ `mcr.microsoft.com/windows/servercore:ltsc2022`
+ `mcr.microsoft.com/windows/servercore:10.0.20348.2402`
+ `mcr.microsoft.com/windows/servercore:10.0.20348.2340` 

# Amazon ECS 的 Fargate 任務暫時性儲存
<a name="fargate-task-storage"></a>

佈建時，在 上託管在 Linux 容器上的每個 Amazon ECS 任務都會 AWS Fargate 收到下列暫時性儲存體，用於綁定掛載。這可以在任務定義中使用 `volumes`、`mountPoints` 和 `volumesFrom` 參數的容器之間進行掛載和共用。上的 Windows 容器不支援此項目 AWS Fargate。

## Fargate Linux 容器平台版本
<a name="fargate-task-storage-linux-pv"></a>

### 1.4.0 版或更新版本
<a name="fargate-task-storage-pv14"></a>

依預設，使用平台版本 `1.4.0` 或更新版本的託管於 Fargate 上的所有 Amazon ECS 任務都會收到至少 20 GiB 的暫時性儲存。暫時性儲存的總量可以增加，最多可達 200 GiB。您可在任務定義中指定 `ephemeralStorage` 參數來實現這一操作。

任務的提取、壓縮和未壓縮容器映像會存放在暫時性儲存體中。若要判斷您的任務必須使用的暫時性儲存總量，您必須從為任務配置的暫時性儲存總量中減去容器映像使用的儲存量。

對於 2020 年 5 月 28 日或之後啟動並使用平台版本 `1.4.0` 或更新版本的任務，會使用 AES-256 加密演算法來加密暫時性儲存。此演算法使用 AWS 擁有的加密金鑰，或者您可以建立自己的客戶受管金鑰。如需詳細資訊，請參閱[AWS Fargate 暫時性儲存的客戶受管金鑰](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-storage-encryption.html)。

若任務使用 2022 年 11 月 18 日或之後啟動的平台版本 `1.4.0` 或更高版本，暫時性儲存使用量會透過任務中繼資料端點回報。任務中的應用程式可以查詢任務中繼資料端點版本 4，以取得其暫時性儲存保留大小和使用量。

 此外，如果您開啟 Amazon CloudWatch Container Insights，暫時性儲存預留大小和使用量會傳送至 Container Insights。

**注意**  
Fargate 會在磁盤上保留空間。此空間僅由 Fargate 使用。我們不會向您收費。它不會顯示在這些指標中。但是，您可以在其他工具 (例如 `df`) 中看到此額外儲存空間。

### 1.3.0 版或更早版本
<a name="fargate-task-storage-pv13"></a>

對於使用平台 `1.3.0` 版或更早版本的 Fargate 任務上的 Amazon ECS，每個任務都會收到下列暫時性儲存。
+ 10 GB 的 Docker 層儲存體
**注意**  
此數量包括壓縮和未壓縮的容器映像成品。
+ 額外的 4 GB 磁碟區掛載。這可以在任務定義中使用 `volumes`、`mountPoints` 和 `volumesFrom` 參數的容器之間進行掛載和共用。

## Fargate Windows 容器平台版本
<a name="fargate-task-storage-windows-pv"></a>

### 1.0.0 版或更新版本
<a name="fargate-task-storage-pvws1"></a>

依預設，使用平台版本 `1.0.0` 或更新版本的託管於 Fargate 上的所有 Amazon ECS 任務都會收到至少 20 GiB 的暫時性儲存。暫時性儲存的總量可以增加，最多可達 200 GiB。您可在任務定義中指定 `ephemeralStorage` 參數來實現這一操作。

任務的提取、壓縮和未壓縮容器映像會存放在暫時性儲存體中。若要判斷您的任務必須使用的暫時性儲存總量，您必須從為任務配置的暫時性儲存總量中減去容器映像使用的儲存量。

如需詳細資訊，請參閱[搭配 Amazon ECS 使用綁定掛載](bind-mounts.md)。

# Amazon ECS AWS Fargate 暫時性儲存的客戶受管金鑰
<a name="fargate-storage-encryption"></a>

AWS Fargate 支援客戶受管金鑰來加密存放在暫時性儲存體中的 Amazon ECS 任務的資料，以協助對法規敏感的客戶滿足其內部安全政策。客戶在享有 Fargate 無伺服器優勢的同時，仍能向合規稽核人員展現對自行管理儲存加密的增強可見性。儘管 Fargate 預設提供由 Fargate 管理的暫時性儲存加密，但客戶在加密財務或健康相關資訊等敏感資料時，也可使用自行管理金鑰。

您可以將自己的金鑰匯入 ， AWS KMS 或在其中建立金鑰 AWS KMS。這些自我管理金鑰存放在 中 AWS KMS ，並執行標準 AWS KMS 生命週期動作，例如輪換、停用和刪除。您可以在 CloudTrail 日誌中稽核金鑰的存取與使用情況。

依預設，每個 KMS 金鑰可支援 50,000 個授權。Fargate 會針對每個客戶受管金鑰任務使用單一 AWS KMS 授權，因此支援金鑰最多 50，000 個並行任務。若想提高此數量，您可以申請提高限額，此類申請將依具體情況加以核准。

Fargate 不會對使用客戶自管金鑰而收取任何額外費用。您只需支付使用儲存和 API 請求 AWS KMS 金鑰的標準價格。

**Topics**
+ [為 Amazon ECS 建立 Fargate 暫時性儲存的加密金鑰](fargate-create-storage-key.md)
+ [管理 Amazon ECS Fargate 暫時性儲存的 AWS KMS 金鑰](fargate-managing-kms-key.md)

# 為 Amazon ECS 建立 Fargate 暫時性儲存的加密金鑰
<a name="fargate-create-storage-key"></a>

建立客戶自管金鑰，加密儲存於 Fargate 暫時性儲存中的資料。

**注意**  
使用客戶自管金鑰的 Fargate 暫時性儲存加密，不適用於 Windows 任務叢集。  
使用客戶自管金鑰的 Fargate 暫時性儲存加密，不適用於早於 `1.4.0` 的 `platformVersions`。  
Fargate 會在僅供 Fargate 使用的暫時性儲存上保留空間，而且不會向您收取該空間的費用。資源配置能與非客戶自管金鑰的任務不同，但總空間保持不變。您可以在 `df` 等工具中檢視此變更。  
Fargate 暫時性儲存不支援多區域金鑰。  
Fargate 暫時性儲存不支援 KMS 金鑰別名。

若要建立客戶受管金鑰 (CMK) 來加密 Fargate 中的暫時性儲存 AWS KMS，請遵循下列步驟。

1. 導覽至 [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms)。

1. 請遵循 [AWS Key Management Service Developer Guide](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 中的 [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) 的說明操作。

1. 建立 AWS KMS 金鑰時，請務必在金鑰政策中提供 Fargate 服務相關的 AWS KMS 操作許可。若要將客戶自管金鑰與 Amazon ECS 叢集資源搭配使用，必須在金鑰政策中允許下列 API 操作。
   + `kms:GenerateDataKeyWithoutPlainText` ‐ 呼叫 從提供的金鑰`GenerateDataKeyWithoutPlainText`產生加密的資料 AWS KMS 金鑰。
   + `kms:CreateGrant`：新增客戶自管金鑰的授權。授予控制對指定 AWS KMS 金鑰的存取，允許存取 Amazon ECS Fargate 所需的授予操作。如需詳細資訊，請參閱 [AWS Key Management Service Developer Guide](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 中的 [Using Grants](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。此授權使 Amazon ECS Fargate 能執行以下操作：
     + 呼叫 `Decrypt` AWS KMS 以取得加密金鑰，以解密暫時性儲存資料。
     + 設定淘汰主體，允許服務 `RetireGrant`。
   + `kms:DescribeKey` ‐ 提供客戶自管金鑰詳細資訊，使 Amazon ECS 能驗證金鑰是否對稱且已啟用。

   下列範例顯示您要套用至目標 AWS KMS 金鑰以進行加密的金鑰政策。若要使用下列政策範例，請將*使用者輸入預留位置*取代為您自己的資訊。一如往常，只設定您需要的許可，但您需要為至少一個使用者提供 AWS KMS 許可，以避免錯誤。

   ```
   {
         "Sid": "Allow generate data key access for Fargate tasks.",
         "Effect": "Allow",
         "Principal": { "Service":"fargate.amazonaws.com" },
         "Action": [
           "kms:GenerateDataKeyWithoutPlaintext"
         ],
         "Condition": {
           "StringEquals": {
             "kms:EncryptionContext:aws:ecs:clusterAccount": [
               "customerAccountId"
             ],
             "kms:EncryptionContext:aws:ecs:clusterName": [
                "clusterName"
             ]   
           }
         },
         "Resource": "*"
       },
       {
         "Sid": "Allow grant creation permission for Fargate tasks.",
         "Effect": "Allow",
         "Principal": { "Service":"fargate.amazonaws.com" },
         "Action": [
           "kms:CreateGrant"
         ],
         "Condition": {
           "StringEquals": {
             "kms:EncryptionContext:aws:ecs:clusterAccount": [
               "customerAccountId"
             ],
             "kms:EncryptionContext:aws:ecs:clusterName": [
                "clusterName"
             ]   
           },
          "ForAllValues:StringEquals": {
             "kms:GrantOperations": [
                "Decrypt"
             ]
          }
         },
         "Resource": "*"
       },
       {
         "Sid": "Allow describe key permission for cluster operator - CreateCluster and UpdateCluster.",
         "Effect": "Allow",
         "Principal": { "AWS":"arn:aws:iam::customerAccountId:role/customer-chosen-role" },
         "Action": [
           "kms:DescribeKey"
         ],
         "Resource": "*"
       }
   ```

   Fargate 任務使用 `aws:ecs:clusterAccount` 與 `aws:ecs:clusterName` 加密內容金鑰搭配該金鑰進行密碼編譯操作。客戶應新增這些許可，限制對特定帳戶和/或叢集的存取。在指定叢集時，請使用叢集名稱而非 ARN。

   如需詳細資訊，請參閱 [AWS KMS 開發人員指南](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)中的[加密內容](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)。

   建立或更新叢集時，您可以選擇使用條件索引鍵 `fargateEphemeralStorageKmsKeyId`。此條件索引鍵讓客戶可以更精細地控制 IAM 政策。`fargateEphemeralStorageKmsKeyId` 組態的更新僅在新服務部署上生效。

   以下是允許客戶僅將許可授予一組特定核准 AWS KMS 金鑰的範例。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "ecs:CreateCluster",
           "ecs:UpdateCluster"
         ],
         "Resource": "*",
         "Condition": {
           "StringEquals": {
             "ecs:fargate-ephemeral-storage-kms-key": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
           }
         }
       }
     ]
   }
   ```

------

   接下來是拒絕嘗試移除已與叢集建立關聯的 AWS KMS 金鑰的範例。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Deny",
       "Action": [
           "ecs:CreateCluster",
           "ecs:UpdateCluster"
       ],
       "Resource": "*",
       "Condition": {
         "Null": {
           "ecs:fargate-ephemeral-storage-kms-key": "true"
         }
       }
     }
   }
   ```

------

   客戶可以使用 `describe-cluster`、 或 AWS CLI `describe-tasks``describe-services`命令，查看其未受管任務或服務任務是否使用 金鑰加密。

   如需詳細資訊，請參閱 [AWS KMS Developer Guide](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 中的 [Condition keys for AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html)。

------
#### [ AWS 管理主控台 ]

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 請於左側導覽中選擇**叢集**，然後點選右上角的**建立叢集**，或選取現有叢集。若採用現有叢集，則選擇右上角的**更新叢集**。

1. 在工作流程的**加密**區段下，您可以選擇在**受管儲存**和 **Fargate 暫時性儲存**下選取 AWS KMS 金鑰。您也可以從這裡選擇**建立 AWS KMS 金鑰**。

1. 完成新叢集的建立後，請選擇**建立**；如果要更新現有叢集，請選擇**更新**。

------
#### [ AWS CLI ]

以下是使用 建立叢集和設定 Fargate 暫時性儲存的範例 AWS CLI （使用您自己的值取代*紅色*值）：

```
aws ecs create-cluster --cluster clusterName \
--configuration '{"managedStorageConfiguration":{"fargateEphemeralStorageKmsKeyId":"arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"}}'
{
    "cluster": {
        "clusterArn": "arn:aws:ecs:us-west-2:012345678901:cluster/clusterName",
        "clusterName": "clusterName",
        "configuration": {
            "managedStorageConfiguration": {
                "fargateEphemeralStorageKmsKeyId": "arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
            }
        },
        "status": "ACTIVE",
        "registeredContainerInstancesCount": 0,
        "runningTasksCount": 0,
        "pendingTasksCount": 0,
        "activeServicesCount": 0,
        "statistics": [],
        "tags": [],
        "settings": [],
        "capacityProviders": [],
        "defaultCapacityProviderStrategy": []
    },
    "clusterCount": 5
}
```

------
#### [ CloudFormation ]

以下是使用 建立叢集和設定 Fargate 暫時性儲存的範例範本 CloudFormation （使用您自己的值取代*紅色*值）：

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyCluster: 
    Type: AWS::ECS::Cluster
    Properties: 
      ClusterName: "clusterName" 
      Configuration:
        ManagedStorageConfiguration:
          FargateEphemeralStorageKmsKeyId: "arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
```

------

# 管理 Amazon ECS Fargate 暫時性儲存的 AWS KMS 金鑰
<a name="fargate-managing-kms-key"></a>

在建立或匯入您的 AWS KMS 金鑰以加密 Fargate 暫時性儲存體之後，您可以像管理任何其他 AWS KMS 金鑰一樣進行管理。

**自動輪換 AWS KMS 金鑰**  
您可以啟用自動金鑰輪換功能，也可以手動輪換金鑰。自動金鑰輪換會每年為您輪換金鑰，方法是為金鑰產生新的密碼編譯材料。 AWS KMS 也會儲存所有舊版本的密碼編譯材料，因此您可以解密使用舊金鑰版本的任何資料。在您刪除金鑰 AWS KMS 之前， 不會刪除任何輪換的資料。

自動金鑰輪換是選用功能，可以隨時啟用或停用。

**停用或撤銷 AWS KMS 金鑰**  
如果您在 中停用客戶受管金鑰 AWS KMS，對執行中的任務沒有任何影響，而且它們會在其生命週期內繼續運作。如果新任務使用已停用或已撤銷的金鑰，任務會因無法存取金鑰而失敗。您應該設定 CloudWatch 警示或類似警示，確保不再需要已停用的金鑰來解密已加密的資料。

**刪除 AWS KMS 金鑰**  
刪除金鑰應一律是最後手段，且僅在確定不再需要刪除的金鑰時才應執行該動作。嘗試使用已刪除金鑰的新任務將會失敗，因為他們無法存取該金鑰。 AWS KMS 建議停用金鑰，而不是將其刪除。若確有必要刪除某個金鑰，建議先停用金鑰並設定 CloudWatch 警示，確保該金鑰不再被使用。如果您刪除金鑰， AWS KMS 至少提供七天來改變主意。

**稽核 AWS KMS 金鑰存取**  
您可以使用 CloudTrail 日誌來稽核對 AWS KMS 金鑰的存取。您可以檢查 AWS KMS 操作 `CreateGrant`、 `GenerateDataKeyWithoutPlaintext`和 `Decrypt`。這些操作也會在 CloudTrail 記錄中顯示作為 `EncryptionContext` 組成部分的 `aws:ecs:clusterAccount` 與 `aws:ecs:clusterName`。

以下是 `GenerateDataKeyWithoutPlaintext`、`GenerateDataKeyWithoutPlaintext (DryRun)`、`CreateGrant`、`CreateGrant (DryRun)` 與 `RetireGrant` 的 CloudTrail 事件範例 (將*紅色*值取代為實際參數)。

------
#### [ GenerateDataKeyWithoutPlaintext ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "ec2-frontend-api.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:13Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKeyWithoutPlaintext",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "ec2-frontend-api.amazonaws.com",
    "userAgent": "ec2-frontend-api.amazonaws.com",
    "requestParameters": {
        "numberOfBytes": 64,
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "encryptionContext": {
            "aws:ecs:clusterAccount": "account-id",
            "aws:ebs:id": "vol-xxxxxxx",
            "aws:ecs:clusterName": "cluster-name"
        }
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------
#### [ GenerateDataKeyWithoutPlaintext (DryRun) ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "fargate.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:11Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKeyWithoutPlaintext",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "fargate.amazonaws.com",
    "userAgent": "fargate.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "dryRun": true,
        "numberOfBytes": 64,
        "encryptionContext": {
            "aws:ecs:clusterAccount": "account-id",
            "aws:ecs:clusterName": "cluster-name"
        }
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------
#### [ CreateGrant ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "ec2-frontend-api.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:13Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "ec2-frontend-api.amazonaws.com",
    "userAgent": "ec2-frontend-api.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "granteePrincipal": "fargate.us-west-2.amazonaws.com",
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextSubset": {
                "aws:ecs:clusterAccount": "account-id",
                "aws:ebs:id": "vol-xxxx",
                "aws:ecs:clusterName": "cluster-name"
            }
        },
        "retiringPrincipal": "ec2.us-west-2.amazonaws.com"
    },
    "responseElements": {
        "grantId": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------
#### [ CreateGrant (DryRun) ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "fargate.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:11Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "fargate.amazonaws.com",
    "userAgent": "fargate.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "granteePrincipal": "fargate.us-west-2.amazonaws.com",
        "dryRun": true,
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextSubset": {
                "aws:ecs:clusterAccount": "account-id",
                "aws:ecs:clusterName": "cluster-name"
            }
        }
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------
#### [ RetireGrant ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-04-20T18:37:38Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "RetireGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": null,
    "responseElements": {
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    },
    "additionalEventData": {
        "grantId": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------

# Amazon ECS 上 AWS Fargate 的任務淘汰和維護
<a name="task-maintenance"></a>

AWS 負責維護 AWS Fargate 的基礎基礎設施。 AWS 決定何時需要將平台版本修訂取代為基礎設施的新修訂。這稱為任務淘汰。在平台版本修訂淘汰時 AWS 傳送任務淘汰通知。我們會定期更新我們支援的平台版本，推出新的修訂版，內含 Fargate 執行時期軟體更新，以及作業系統與容器執行時期等底層相依性更新。推出較新的修訂版後，我們會淘汰較舊的修訂版，確保所有客戶工作負載在 Fargate 平台版本的最新修訂版上執行。當修訂版本淘汰時，在該修訂版本上執行的所有任務都會停止。

Amazon ECS 任務可以分類為服務任務和獨立任務。服務任務部署為服務的組成部分，並由 Amazon ECS 排程控制。如需詳細資訊，請參閱[Amazon ECS 服務](ecs_services.md)。獨立任務是由 Amazon ECS `RunTask` API 啟動的任務，無論是直接或外部排程器啟動，例如排程任務 （由 Amazon EventBridge 啟動） AWS Batch，或 AWS Step Functions。您無需採取任何動作來因應服務任務的任務淘汰，因為 Amazon ECS 排程器會自動取代這些任務。

對於獨立任務，您可能需要執行額外的處理以因應任務淘汰。如需詳細資訊，請參閱[Amazon ECS 是否可以自動處理獨立任務？](#task-retirement-standalone-tasks)。

對於服務任務，您不需要採取任何動作來淘汰任務，除非您想要在 AWS 之前取代這些任務。Amazon ECS 排程器會在停止任務時使用 `maximumPercent` 並啟動新任務，嘗試維持服務的預期執行數量。遵循最佳實務，盡力降低任務淘汰傳送的影響。使用 REPLICA 服務排程器的服務，其預設 `maximumPercent` 值為 200%。因此，當 AWS Fargate 開始淘汰任務時，Amazon ECS 會先排程新任務，然後等待它執行，然後再淘汰舊任務。在將 `maximumPercent` 值設定為 100% 後，Amazon ECS 會先停止任務，再取代任務。

對於獨立任務淘汰， 會在任務淘汰日期或之後 AWS 停止任務。Amazon ECS 不會在任務停止時啟動替代任務。若需讓這些任務持續執行，您必須在通知指定的時間前，停止執行中任務並啟動替代任務。因此，我們建議客戶監控獨立任務的狀態，並視需要實作邏輯以取代已停止的任務。

當任務在任何場景下停止時，您都可以執行 `describe-tasks`。回應中的 `stoppedReason` 是 `ECS is performing maintenance on the underlying infrastructure hosting the task`。

如需將新的平台版本修訂版取代為新的修訂版，即會套用任務維護機制。如果底層 Fargate 主機發生問題，Amazon ECS 會在沒有任務淘汰通知的情況下取代主機。

## 任務淘汰通知概觀
<a name="task-retirement-notice"></a>

當 將平台版本修訂 AWS 標記為需要淘汰時，我們會識別所有區域中在該平台版本修訂上執行的所有任務。

下圖呈現了 Fargate 平台版本修訂版的生命週期，涵蓋從新修訂版發布到平台修訂版淘汰的全過程。

![\[此圖表顯示 Fargate 任務淘汰生命週期。\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/images/fargate-task-retirement.png)


下面提供相關詳細資訊。
+ 新平台版本修訂版發布後，所有新任務都將排程至此修訂版上執行。
+ 已排程和執行中的現有任務，皆會保留在最初於任務期間置放的修訂版上，而不會遷移至新的修訂版。
+ 新任務，例如作為服務或 Fargate 任務淘汰更新的組成部分，皆會置放在啟動時可用的最新平台版本修訂版上。

任務淘汰通知會透過 AWS Health Dashboard 和電子郵件傳送至已註冊的電子郵件地址，並包含下列資訊：
+ 任務淘汰日期 - 任務將在此日期或之後停止。
+ 若為獨立任務，則為任務的 ID。
+ 若為服務任務，則為執行服務所在之叢集的 ID 以及服務的 ID。
+ 您需要採取的後續步驟。

通常，我們會針對每個 AWS 區域中的每項服務與獨立任務傳送一則通知。然而在某些情況下，您可能會針對每種任務類型收到多則事件通知，例如當待淘汰任務數量過多，超出我們通知機制的承載上限時。

您可以透過以下方法確定已排程要淘汰的任務：
+ 的 Health 儀板表 

  AWS Health 通知可以透過 Amazon EventBridge 傳送至封存儲存，例如 Amazon Simple Storage Service、執行 AWS Lambda 函數等自動動作，或其他通知系統，例如 Amazon Simple Notification Service。如需詳細資訊，請參閱[使用 Amazon EventBridge 監控 AWS Health 事件](https://docs.aws.amazon.com/health/latest/ug/cloudwatch-events-health.html)。如需將通知傳送至 Amazon Chime、Slack 或 Microsoft Teams 的組態範例，請參閱 GitHub 上的 [AWS Health Aware](https://github.com/aws-samples/aws-health-aware) 儲存庫。

  以下是 EventBridge 事件範例。

  ```
  {
      "version": "0",
      "id": "3c268027-f43c-0171-7425-1d799EXAMPLE",
      "detail-type": "AWS Health Event",
      "source": "aws.health",
      "account": "123456789012",
      "time": "2023-08-16T23:18:51Z",
      "region": "us-east-1",
      "resources": [
          "cluster|service",
          "cluster|service"
      ],
      "detail": {
          "eventArn": "arn:aws:health:us-east-1::event/ECS/AWS_ECS_TASK_PATCHING_RETIREMENT/AWS_ECS_TASK_PATCHING_RETIREMENT_test1",
          "service": "ECS",
          "eventScopeCode": "ACCOUNT_SPECIFIC",
          "communicationId": "7988399e2e6fb0b905ddc88e0e2de1fd17e4c9fa60349577446d95a18EXAMPLE",
          "lastUpdatedTime": "Wed, 16 Aug 2023 23:18:52 GMT",
          "eventRegion": "us-east-1",
          "eventTypeCode": "AWS_ECS_TASK_PATCHING_RETIREMENT",
          "eventTypeCategory": "scheduledChange",
          "startTime": "Wed, 16 Aug 2023 23:18:51 GMT",
          "endTime": "Fri, 18 Aug 2023 23:18:51 GMT",
          "eventDescription": [
              {
                  "language": "en_US",
                  "latestDescription": "\\nA software update has been deployed to Fargate which includes CVE patches or other critical patches. No action is required on your part. All new tasks launched automatically uses the latest software version. For existing tasks, your tasks need to be restarted in order for these updates to apply. Your tasks running as part of the following ECS Services will be automatically updated beginning Wed, 16 Aug 2023 23:18:51 GMT.\\n\\nAfter Wed, 16 Aug 2023 23:18:51 GMT, the ECS scheduler will gradually replace these tasks, respecting the deployment settings for your service. Typically, services should see little to no interruption during the update and no action is required. When AWS stops tasks, AWS uses the minimum healthy percent (1) and launches a new task in an attempt to maintain the desired count for the service. By default, the minimum healthy percent of a service is 100 percent, so a new task is started first before a task is stopped. Service tasks are routinely replaced in the same way when you scale the service or deploy configuration changes or deploy task definition revisions. If you would like to control the timing of this restart you can update the service before Wed, 16 Aug 2023 23:18:51 GMT, by running the update-service command from the ECS command-line interface specifying force-new-deployment for services using Rolling update deployment type. For example:\\n\\n$ aws ecs update-service -service service_name \\\n--cluster cluster_name -force-new-deployment\\n\\nFor services using Blue/Green deployment type with AWS CodeDeploy:\\nPlease refer to create-deployment document (2) and create new deployment using same task definition revision.\\n\\nFor further details on ECS deployment types, please refer to ECS Deployment Developer Guide (1).\\nFor further details on Fargate's update process, please refer to the AWS Fargate User Guide (3).\\nIf you have any questions or concerns, please contact AWS Support (4).\\n\\n(1) https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html\\n(2) https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html\\n(3) https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-maintenance.html\\n(4) https://aws.amazon.com/support\\n\\nA list of your affected resources(s) can be found in the 'Affected resources' tab in the 'Cluster/ Service' format in the AWS Health Dashboard. \\n\\n"
              }
          ],
        "affectedEntities": [
                  {
                      "entityValue": "arn:aws:ecs:eu-west-1:111222333444:task/examplecluster/00805ce1d81940b5a37398e5a2c23333"
                  },
                  {
                      "entityValue": "arn:aws:ecs:eu-west-1:111222333444:task/examplecluster/00805ce1d81940b5a37398e5a2c25555"
                  }
              }
          ]
      }
  }
  ```
+ Email

  系統會將電子郵件傳送至 AWS 帳戶 ID 的註冊電子郵件。

如需有關如何為任務淘汰做準備的資訊，請參閱[準備在 Amazon ECS 上淘汰 AWS Fargate 任務](prepare-task-retirement.md)。

## 我可以選擇退出任務淘汰機制嗎？
<a name="task-retirement-opt-out"></a>

否。作為 AWS 共同責任模型的一部分， AWS 負責管理和維護其基礎基礎設施 AWS Fargate。這包括執行定期平台更新，確保安全性與穩定性。這些更新會由 自動套用 AWS ，而且客戶無法選擇退出。與在 EC2 執行個體上執行工作負載 AWS Fargate 相比，這是使用 的主要優點，維護基礎平台的責任由 處理 AWS。此模式可讓您專注於應用程式，而不是基礎結構維護。透過自動套用這些平台更新， AWS 能夠讓 Fargate 環境up-to-date狀態和安全，而無需您作為客戶採取任何動作。這有助於提供可靠且安全的容器化環境，以利在 Fargate 上執行工作負載。

## 我可以透過其他服務取得任務淘汰通知 AWS 嗎？
<a name="task-retirement-event"></a>

AWS 會將任務淘汰通知傳送至 ， Health 儀板表 並傳送給 上的主要電子郵件聯絡人 AWS 帳戶。 Health 儀板表 提供多種與其他 AWS 服務的整合，包括 EventBridge。您可以使用 EventBridge 自動化通知的可見性 (例如轉送訊息至 ChatOps 工具)。如需詳細資訊，請參閱 [Solution overview: Capturing task retirement notifications](https://aws.amazon.com/blogs/containers/improving-operational-visibility-with-aws-fargate-task-retirement-notifications/)。

## 我可以在任務排定後變更任務淘汰嗎？
<a name="task-retirement-change"></a>

 否。排程是根據任務淘汰等待時間，預設值為 7 天。如果需要更多時間，可選擇將等待期間設定為 14 天。如需詳細資訊，請參閱[步驟 2：擷取任務淘汰通知，提醒團隊採取動作](prepare-task-retirement.md#prepare-task-retirement-capture-task-events)。

自 12/18/2025 起，Amazon ECS 可讓您為 Fargate 任務設定 [Amazon EC2 事件時段](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)。如果您需要精確控制任務淘汰的確切時間，例如，將它們安排在週末以避免上班時間中斷，您可以為您的任務、服務或叢集設定 Amazon EC2 事件時段，請參閱 [步驟 1：設定任務等待時間或使用 Amazon EC2 事件時段](prepare-task-retirement.md#prepare-task-retirement-set-time)。請注意，此組態的變更適用於未來將排程的淘汰。目前已排定的淘汰不會受到影響。此外，當您為 Fargate 任務設定 Amazon EC2 事件時段時，其優先順序會高於您的任務淘汰等待時間組態。如果您有任何其他疑慮，請聯絡 支援。

## Amazon ECS 如何處理屬於服務組成部分的任務？
<a name="task-retirement-service-works"></a>

對於服務任務，您不需要採取任何動作來回應任務淘汰，除非您想要在 AWS 之前取代這些任務。Amazon ECS 排程器會在停止任務時依據運作狀態百分比下限啟動新任務，嘗試維持服務的預期執行數量。為盡力降低 Fargate 任務淘汰產生的影響，工作負載應按照 Amazon ECS 最佳實務進行部署。例如，將無狀態應用程式部署為 Amazon ECS 服務 (例如 Web 或 API 伺服器) 時，客戶應部署多個任務副本，並將 minimumHealthyPercent 設定為 100%。依預設，服務的運作狀態百分比下限為 100%。因此，當 Fargate 開始淘汰任務時，Amazon ECS 會先排程新任務，待其進入執行狀態後，再淘汰舊任務。當您擴展服務規模、部署組態變更或部署任務定義修訂版時，在任務淘汰過程中，系統會以相同的方式定期取代服務任務。若要為任務淘汰程序做準備，請參閱[準備在 Amazon ECS 上淘汰 AWS Fargate 任務](prepare-task-retirement.md)。

## Amazon ECS 是否可以自動處理獨立任務？
<a name="task-retirement-standalone-tasks"></a>

 否。 AWS 無法為由 `RunTask`、排程任務 （例如透過 EventBridge 排程器） AWS Batch或 啟動的獨立任務建立替代任務 AWS Step Functions。Amazon ECS 僅管理屬於服務組成部分的任務。

## 對任務淘汰期間的服務可用性進行疑難排解
<a name="task-retirement-service-availability"></a>

如果 Amazon ECS 在任務淘汰期間無法啟動替代任務，服務可用性可能會受到影響。此情況可能由錯誤的客戶設定引發，例如：
+ IAM 角色遺失或設定不正確
+ 目標子網路中的容量不足
+ 安全群組設定錯誤
+ 任務定義錯誤

當 Amazon ECS 無法啟動替代任務時，淘汰任務將在無替換的情況下停止，導致服務可用容量降低，甚至中斷服務。請監控服務的任務數量與 Amazon CloudWatch 指標，確保在淘汰事件期間，替代任務能順利啟動。

# 準備在 Amazon ECS 上淘汰 AWS Fargate 任務
<a name="prepare-task-retirement"></a>

若要為任務淘汰做準備，請執行下列操作：

1. 設定任務淘汰等待期間或使用 Amazon EC2 事件時段。

1. 擷取任務淘汰通知，以便通知團隊成員。

1. 您可以使用強制部署選項更新服務，以確保所有服務的任務在最新的平台修訂版上執行。此為選擇性步驟。

## 步驟 1：設定任務等待時間或使用 Amazon EC2 事件時段
<a name="prepare-task-retirement-set-time"></a>

 您有兩個帳戶設定選項來設定 Fargate 開始任務淘汰的時間： `fargateTaskRetirementWaitPeriod`和 `fargateEventWindows`。

**使用 fargateTaskRetirementWaitPeriod 帳戶設定**

您可以設定 Fargate 開始任務淘汰的時間。預設等待期間為 7 天。對於需要立即套用更新的工作負載，請選擇立即設定 (`0`)。如果您需要更多時間，請設定 `7`或`14`日期選項。

我們建議您選擇較短的等待期，以便更快獲得更新的平台版本修訂版。

透過以根使用者或管理使用者的身分執行 `put-account-setting-default` 或 `put-account-setting` 來設定等待期間。對 `name` 使用 `fargateTaskRetirementWaitPeriod` 選項，並將 `value` 選項設定為以下值之一：
+ `0` - AWS 傳送通知，並立即開始淘汰受影響的任務。
+ `7` - AWS 傳送通知，並等待 7 個日曆天，再開始淘汰受影響的任務。這是預設值。
+ `14` - AWS 傳送通知，並等待 14 個日曆日，然後再開始淘汰受影響的任務。

如需詳細資訊，請參閱《Amazon Elastic Container Service API 參考》**中的 [put-account-setting-default](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting-default.html) 和 [put-account-setting](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting.html)。

**使用 fargateEventWindows 帳戶設定**

自 12/18/2025 起，Amazon ECS 可讓您為 Fargate 任務設定 [Amazon EC2 事件時段](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)。如果您需要精確控制任務淘汰的確切時間，例如，將它們安排在週末以避免上班時間中斷，您可以為您的任務、服務或叢集設定 Amazon EC2 事件時段。

當您使用事件時段時，Fargate 會確保您的任務在下一個可用時段內淘汰前至少執行 3 天，除非使用者啟動的動作或重大運作狀態事件停止，例如基礎硬體降級。

將 `fargateEventWindows` 帳戶設定設為 `enabled`。您可以使用下列其中一個 APIs： `put-account-setting-default` 或 `put-account-setting`做為根使用者或管理使用者。

 每個 Amazon EC2 事件時段每週必須開放至少 4 小時，而且每個時間範圍必須至少 2 小時。對於大型叢集和服務，我們建議設定事件時段，其持續時間較長 (8 小時或以上） 或更頻繁，至少每 3 天發生一次。您可以進一步檢閱[使用者指南](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html#event-windows-considerations) AWS Fargate 中 Amazon EC2 事件時段的考量，確保您的任務在淘汰前執行至少 3 天，除非使用者啟動的動作或重大運作狀態事件停止，例如基礎硬體降級。

**重要**  
最好在事件時段內取代任務。如果您注意到任務在事件時段之外遭到淘汰，請考慮延長持續時間 (8 小時或以上） 或增加頻率 （至少每 3 天一次）。

若要將 Amazon EC2 事件時段套用至 Fargate 任務淘汰：
+ 將 `fargateEventWindows` 帳戶設定設為 `enabled`。您可以使用下列其中一個 APIs： `put-account-setting-default` 或 `put-account-setting`做為根使用者或管理使用者。請注意，這是針對 Fargate 任務使用 Amazon EC2 事件時段功能的一次性啟用。
+ 透過 AWS 主控台或 AWS CLI 建立 Amazon EC2 事件視窗。若要使用 CLI 建立事件時段，請使用 EC2 `create-instance-event-window` API 搭配時間範圍或 Cron 表達式。記下`InstanceEventWindowId`回應中的 。

  ```
  aws ec2 create-instance-event-window \
                      --time-range StartWeekDay=monday,StartHour=2,EndWeekDay=wednesday,EndHour=8 \
                      --tag-specifications "ResourceType=instance-event-window,Tags=[{Key=K1,Value=V1" \
                      --name myEventWindowName
  ```

  或者，您可以在建立 EC2 事件時段時使用 cron 表達式。

  ```
  aws ec2 create-instance-event-window \
                      --cron-expression "* 21-23 * * 2,3" \
                      --tag-specifications "ResourceType=instance-event-window,Tags=[{Key=K1,Value=V1" \
                      --name myEventWindowName
  ```
+ 然後，您可以使用 EC2 `associate-instance-event-window` API 將事件視窗與帳戶中的特定服務、叢集或所有任務建立關聯。
  + 對於 ECS 服務任務

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:serviceArn,Value=your-service-arn}]"
    ```
  + 對於 ECS 叢集

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:clusterArn,Value=your-cluster-arn}]"
    ```
  + 將事件時段與帳戶中的所有任務建立關聯

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:fargateTask,Value=true}]"
    ```

您可以使用多個鍵值對，將事件時段與多個服務或叢集建立關聯。

Fargate 會依下列順序為每個任務選擇事件時段：
+ 如果有與任務服務相關聯的事件時段，則會使用該時段。這不適用於獨立或未受管任務。
+ 如果有與任務叢集相關聯的事件時段，則會使用該時段。
+ 如果為所有 Fargate 任務設定了事件時段，則會使用該時段。
+ 如果沒有事件時段與任務相符，則會使用 `fargateTaskRetirementWaitPeriod`設定。

**設定 Fargate 任務維護的事件時段**

當您在具有不同可用性需求的 Fargate 上執行多個 ECS 服務時，請考慮一個案例。您想要精確控制任務淘汰。您可以設定多個事件時段，如下所示：
+ **所有 Fargate 任務的預設維護**：在離峰時間 （每天 12AM 到 4AM) 建立例行維護的事件時段，並使用 ` aws:ecs:fargateTask`標籤將其與所有 Fargate 任務建立關聯。
+ **開發叢集的週末限定維護**：對於具有可容忍週末中斷服務的開發叢集，請建立 24 小時週末時段 （週六和週日，全天），並使用 `aws:ecs:clusterArn`標籤與叢集 ARN 將其與叢集建立關聯。
+ **關鍵任務服務的限制時段**：對於在工作日需要高正常執行時間的任務關鍵付款處理服務，請將維護限制為週末凌晨時間 （週六和週日，12AM 點至上午 4AM)，並將其與您的服務 ARN 使用 `aws:ecs:serviceArn` 標籤與特定服務建立關聯。

透過此組態，付款服務會使用其特定的僅限週末時段，開發叢集服務和任務會使用週末 24 小時時段，而所有其他 Fargate 任務會使用預設的每日維護時段。

如需詳細資訊，請參閱《Amazon Elastic Container Service API 參考》**中的 [put-account-setting-default](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting-default.html) 和 [put-account-setting](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting.html)。

## 步驟 2：擷取任務淘汰通知，提醒團隊採取動作
<a name="prepare-task-retirement-capture-task-events"></a>

當即將淘汰任務時， AWS 會將任務淘汰通知傳送到 AWS Health 儀表板，並傳送給 上的主要電子郵件聯絡人 AWS 帳戶。 AWS Health 儀表板提供多種與其他 AWS 服務的整合，包括 Amazon EventBridge。您可以使用 EventBridge 從任務淘汰通知建立自動化，例如透過將訊息轉送到 ChatOps 工具來提高即將淘汰的可見性。 AWS Health Aware 是一種資源，可顯示 AWS Health 儀表板的強大功能，以及如何將通知分佈到整個組織中。您可以將任務淘汰通知轉送至 Slack 等聊天應用程式。

下圖說明了解決方案概觀。

![\[此圖表顯示用於擷取 Fargate 任務淘汰通知的 Fargate 解決方案。\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/images/fargate-task-retirement-solution.png)


下面提供相關詳細資訊。
+ Fargate 會將任務淘汰通知傳送至 AWS Health 儀表板。
+  AWS Health 儀表板會將郵件傳送至 上的主要電子郵件聯絡人 AWS 帳戶，並通知 EventBridge。
+ EventBridge 具備可擷取淘汰通知的規則。

  此規則用於篩選「事件詳細類型」如下的事件：`"AWS Health Event" and the Event Detail Type Code: "AWS_ECS_TASK_PATCHING_RETIREMENT"`
+ 此規則會觸發 Lambda 函式，該函式會透過 Slack 傳入 Webhook 將資訊轉送至 Slack。如需詳細資訊，請參閱 [Incoming Webhooks](https://slack.com/marketplace/A0F7XDUAZ-incoming-webhooks)。

如需程式碼範例，請參閱在 Github [上擷取 AWS Fargate 任務淘汰通知](https://github.com/aws-samples/capturing-aws-fargate-task-retirement-notifications/tree/main)。

## 步驟 3：控制任務替代時機
<a name="prepare-task-retirement-change-time"></a>

您無法控制任務淘汰的確切時間，但可以定義等待時間。若需按照自訂排程控制取代任務，您可以擷取任務淘汰通知，先了解任務淘汰日期。然後，您可以重新部署服務來啟動替代任務，並同步取代所有獨立任務。對於使用滾動部署的服務，您可以在淘汰開始時間前，搭配 `force-deployment` 選項使用 `update-service` 來更新服務。

下列 `update-service` 範例使用 `force-deployment` 選項。

```
aws ecs update-service —-service service_name \ 
    --cluster cluster_name \
     --force-new-deployment
```

對於使用藍/綠部署的服務，您需要在 AWS CodeDeploy中建立新的部署。如需有關如何建立部署的資訊，請參閱 *AWS Command Line Interface Reference* 中的 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html)。

# AWS Fargate 上 Amazon ECS 支援的 區域
<a name="AWS_Fargate-Regions"></a>

您可以使用下表來驗證 AWS Fargate 上 Linux 容器的區域支援，以及 AWS Fargate 上的 Windows 容器支援。

## AWS Fargate 上的 Linux 容器
<a name="linux-regions"></a>

下列 AWS Fargate 支援 上的 Amazon ECS Linux 容器 AWS 區域。適用時，支援的可用區域 ID 會註明。


| 區域名稱 | 區域 | 
| --- | --- | 
|  美國東部 (俄亥俄)  |  us-east-2  | 
|  美國東部 (維吉尼亞北部)  |  us-east-1  | 
|  美國西部 (加利佛尼亞北部)  |  us-west-1 (僅 `usw1-az1` 和 `usw1-az3`)  | 
|  美國西部 (奧勒岡)  |  us-west-2  | 
|  加拿大 (中部)  |  ca-central-1  | 
|  加拿大西部 (卡加利)  |  ca-west-1  | 
|  墨西哥 (中部)  |  mx-central-1  | 
|  Africa (Cape Town)  |  af-south-1  | 
|  亞太地區 (香港)  |  ap-east-1  | 
|  亞太區域 (孟買)  |  ap-south-1  | 
|  亞太地區 (東京)  |  ap-northeast-1 (僅 `apne1-az1`、`apne1-az2` 和 `apne1-az4`)  | 
|  亞太區域 (首爾)  |  ap-northeast-2  | 
|  亞太地區 (大阪)  |  ap-northeast-3  | 
|  亞太地區 (海德拉巴)  |  ap-south-2  | 
|  亞太區域 (新加坡)  |  ap-southeast-1  | 
|  亞太區域 (雪梨)  |  ap-southeast-2  | 
|  亞太區域 (泰國)  |  ap-southeast-7  | 
|  亞太地區 (雅加達)  |  ap-southeast-3  | 
|  亞太地區 (墨爾本)  |  ap-southeast-4  | 
|  亞太地區 (馬來西亞)  |  ap-southeast-5  | 
|  加拿大 (中部)  |  ca-central-1  | 
|  加拿大西部 (卡加利)  |  ca-west-1  | 
|  中國 (北京)  |  cn-north-1 (僅 `cnn1-az1` 和 `cnn1-az2`)  | 
|  中國 (寧夏)  |  cn-northwest-1  | 
|  歐洲 (法蘭克福)  |  eu-central-1  | 
|  歐洲 (蘇黎世)  |  eu-central-2  | 
|  歐洲 (愛爾蘭)  |  eu-west-1  | 
|  歐洲 (倫敦)  |  eu-west-2  | 
|  歐洲 (巴黎)  |  eu-west-3  | 
|  歐洲 (米蘭)  |  eu-south-1  | 
|  歐洲 (西班牙)  |  eu-south-2  | 
|  Europe (Stockholm)  |  eu-north-1  | 
|  南美洲 (聖保羅)  |  sa-east-1  | 
|  以色列 (特拉維夫)  |  il-central-1  | 
|  Middle East (Bahrain)  |  me-south-1  | 
|  中東 (阿拉伯聯合大公國)  |  me-central-1  | 
|  AWS GovCloud （美國東部）  |  us-gov-east-1  | 
|  AWS GovCloud （美國西部）  |  us-gov-west-1  | 

## AWS Fargate 上的 Windows 容器
<a name="windows-regions"></a>

下列 AWS Fargate 支援 上的 Amazon ECS Windows 容器 AWS 區域。適用時，支援的可用區域 ID 會註明。


| 區域名稱 | 區域 | 
| --- | --- | 
|  美國東部 (俄亥俄)  |  us-east-2  | 
|  美國東部 (維吉尼亞北部)  |  us-east-1 (只有 `use1-az1`、`use1-az2`、`use1-az4`、`use1-az5` 和 `use1-az6`)  | 
|  美國西部 (加利佛尼亞北部)  |  us-west-1 (僅 `usw1-az1` 和 `usw1-az3`)  | 
|  美國西部 (奧勒岡)  |  us-west-2  | 
|  Africa (Cape Town)  |  af-south-1  | 
|  亞太地區 (香港)  |  ap-east-1  | 
|  亞太區域 (孟買)  |  ap-south-1  | 
|  亞太地區 (海德拉巴)  |  ap-south-2  | 
|  亞太地區 (大阪)  |  ap-northeast-3  | 
|  亞太區域 (首爾)  |  ap-northeast-2  | 
|  亞太區域 (新加坡)  |  ap-southeast-1  | 
|  亞太區域 (雪梨)  |  ap-southeast-2  | 
|  亞太地區 (墨爾本)  |  ap-southeast-4  | 
|  亞太地區 (馬來西亞)  |  ap-southeast-5  | 
|  亞太地區 (東京)  |  ap-northeast-1 (僅 `apne1-az1`、`apne1-az2` 和 `apne1-az4`)  | 
|  加拿大 (中部)  |  ca-central-1 (僅 `cac1-az1` 和 `cac1-az2`)  | 
|  加拿大西部 (卡加利)  |  ca-west-1  | 
|  中國 (北京)  |  cn-north-1 (僅 `cnn1-az1` 和 `cnn1-az2`)  | 
|  中國 (寧夏)  |  cn-northwest-1  | 
|  歐洲 (法蘭克福)  |  eu-central-1  | 
|  歐洲 (蘇黎世)  |  eu-central-2  | 
|  歐洲 (愛爾蘭)  |  eu-west-1  | 
|  歐洲 (倫敦)  |  eu-west-2  | 
|  歐洲 (巴黎)  |  eu-west-3  | 
|  歐洲 (米蘭)  |  eu-south-1  | 
|  歐洲 (西班牙)  |  eu-south-2  | 
|  Europe (Stockholm)  |  eu-north-1  | 
|  南美洲 (聖保羅)  |  sa-east-1  | 
|  以色列 (特拉維夫)  |  il-central-1  | 
|  中東 (阿拉伯聯合大公國)  |  me-central-1  | 
|  Middle East (Bahrain)  |  me-south-1  | 