AWS Amazon ECS 上的 Fargate 任務維護常見問題解答 - Amazon Elastic Container Service

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

AWS Amazon ECS 上的 Fargate 任務維護常見問題解答

什麼是 Fargate 任務維護和退休?

AWS 負責維護 AWS Fargate 的基礎設施。 AWS 決定何時需要將平台版本修訂版取代為基礎結構的新修訂版本。這就是所謂的任務退休。 AWS 當平台版本修訂已淘汰時,傳送作業淘汰通知。我們會定期更新支援的平台版本,以引入包含 Fargate 執行階段軟體的更新以及基礎相依性 (例如作業系統和容器執行階段) 的新版本。一旦提供了更新的修訂版本,我們將淘汰舊版本,以確保所有客戶的工作負載都在 Fargate 平台版本的最新版本上運行。當修訂版本淘汰時,在該修訂版本上執行的所有任務都會停止。

Amazon ECS 任務可以分類為服務任務和獨立任務。服務任務是作為服務的一部分進行部署,並由 Amazon ECS 排程控制。如需詳細資訊,請參閱 Amazon ECS 服務。獨立任務是由 Amazon ECS RunTask API 直接或由外部排程器啟動的任務,例如排程任務 (由 Amazon 啟動 EventBridge) AWS Batch、或 AWS Step Functions。

對於服務工作,除非您想要先 AWS 取代這些工作,否則您不需要採取任何動作。當 Amazon ECS 排程器停止任務時,它會使用最低運作狀態百分比,並啟動新任務以嘗試維持所需的服務計數。根據預設,服務的運作狀態百分比下限為 100%,因此在任務停止前會先啟動新任務。當您擴展服務、部署組態變更或部署工作定義修訂時,會以相同的方式來取代服務工作。若要為任務淘汰程序做準備,建議您透過模擬此情境來測試應用程式的行為。方式如下:停止您服務中的個別任務,藉以測試復原能力。

對於獨立的任務處分,在任務處分日期當天或之後停止任務。當任務停止時,我們不 AWS 會啟動替代任務。如果您需要繼續執行這些工作,您必須停止執行中的工作,並在通知中指定的時間之前啟動取代工作。因此,我們建議客戶監控獨立任務的狀態,並視需要實作邏輯以取代已停止的任務。

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

當有新的平台版本修訂需要以新的修訂版本取代時,會套用任務維護。如果基礎 Fargate 主機發生問題,Amazon ECS 會在沒有任務淘汰通知的情況下取代主機。

什麼是在任務退休通知?

工作淘汰通知會透過 AWS Health 儀表板傳送,也會透過電子郵件傳送至註冊的電子郵件地址,並包含下列資訊:

  • 任務淘汰日期 - 任務將在此日期或之後停止。

  • 若為獨立任務,則為任務的 ID。

  • 若為服務任務,則為執行服務所在之叢集的 ID 以及服務的 ID。

  • 您需要採取的後續步驟。

通常,我們會針對每個服務和獨立任務傳送一個通知 AWS 區域。但是,在某些情況下,您可能會針對每個任務類型收到多個事件,例如,當有太多要淘汰的任務而超過我們通知機制中的限制時。

您可以透過以下方法確定已排程要淘汰的任務:

  • 該 AWS Health Dashboard

    AWS Health 通知可透過 Amazon 傳送 EventBridge 至存檔儲存 (例如 Amazon 簡單儲存服務)、採取自動化動作 (例如執行 AWS Lambda 功能) 或其他通知系統 (例如 Amazon 簡單通知服務)。如需詳細資訊,請參閱使用 Amazon 監控 AWS Health 事件 EventBridge如需將通知傳送至 Amazon Chime、Slack 或 Microsoft 團隊的範例組態,請參閱上AWS Health 的。 GitHub

    以下是範例 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": "cluster/service" }, { "entityValue": "cluster/service" } ] } }
  • 電子郵件

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

我可以更改任務的退休等待時間嗎?

您可以設定 Fargate 開始任務淘汰的時間。對於需要立即套用更新的工作負載,請選擇立即設定 (0)。當您需要更多控制項時,例如當任務只能在特定時段中停止時,請設定 7 日 (7) 或 14 日 (14) 選項。

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

透過執行put-account-setting-defaultput-account-setting以 root 使用者或系統管理使用者身分設定等待期間。對 name 使用 fargateTaskRetirementWaitPeriod 選項,並將 value 選項設定為以下值之一:

  • 0- AWS 傳送通知,並立即開始淘汰受影響的工作。

  • 7- AWS 傳送通知,並在開始淘汰受影響的工作前等待 7 個行事曆天。

  • 14 - AWS 傳送通知,並等待 14 個日曆日,然後再開始淘汰受影響的任務。

預設值是 7 天。

如需詳細資訊,請參閱《Amazon Elastic Container Service API 參考》中的 put-account-setting-defaultput-account-setting

如需詳細資訊,請參閱 AWS Fargate 任務退休等待時間

我可以透過其他 AWS 服務取得任務退休通知嗎?

AWS 會將作業淘汰通知傳送給 AWS Health Dashboard 與上的主要電子郵件連絡人 AWS 帳戶。提 AWS Health Dashboard 供了許多與其他 AWS 服務的集成,包括 EventBridge. 您可以使 EventBridge 用自動化通知的可見性(例如,將消息轉發到 ChatOps 工具)。如需詳細資訊,請參閱解決方案概觀:擷取作業處分通知

我可以在排程之後變更任務退休嗎?

沒有 排程是以預設值為 7 天的作業處分等待時間為基礎。如果您需要更多時間,可以選擇將等待期設定為 14 天。如需詳細資訊,請參閱 我可以更改任務的退休等待時間嗎?。此組態中的變更適用於將 future 排程的淘汰。目前排定的處分不會受到影響。如果您有任何進一步的疑慮,請聯繫 AWS Support。

我可以控制任務替換的時間嗎?

對於使用滾動式部署的服務,您可以在淘汰開始時間之前使update-service用該force-deployment選項來更新服務。

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

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

對於使用藍/綠部署的服務,您需要在中 AWS CodeDeploy建立新部署。如需如何建立部署的相關資訊,請參閱〈參考〉中的〈建立部署〉。AWS Command Line Interface

Amazon ECS 如何處理屬於服務一部分的任務?

當 Fargate 退休期開始時,Amazon ECS 會逐漸取代您服務中受影響的任務。當 Amazon ECS 停止任務時,它會使用服務的最低運作狀態百分比,並啟動新任務來維護服務所需的任務計數。因為預設的最低健全狀況百分比為 100,因此在工作停止之前就會啟動新工作。當您擴展服務、部署組態變更或部署工作定義修訂時,會以相同的方式來取代服務工作。如需有關最小健康百分比的詳細資訊,請參閱部署組態

Amazon ECS 能否自動處理獨立任務?

沒有 AWS 無法為啟動的獨立工作RunTask、排程工作 (例如透過 EventBridge Scheduler) 或建立取代工作 AWS Step Functions。 AWS Batch Amazon ECS 只會管理屬於服務一部分的任務。