如何避免 Amazon ECS 服務在 AWS CloudFormation 中不穩定?

2 分的閱讀內容
0

我的 Amazon Elastic Container Service (Amazon ECS) 服務無法在 AWS CloudFormation 中穩定。我收到以下錯誤: 「服務 arn:aws:ecs:us-east-accountID:service/ServiceName 不穩定。」

簡短說明

如果 Amazon ECS 中建立的服務不處於 AWS CloudFormation 範本所指定的狀態,則無法穩定。為了確認服務已啟動具有所需任務定義的所需數量的任務,AWS CloudFormation 會重複執行 DescribeService API 呼叫。這些呼叫會檢查服務的狀態,直到符合所需的狀態為止。呼叫程序最多可能需要三個小時。然後,AWS CloudFormation 會逾時,並傳回「服務 ARN 未穩定」訊息。當 AWS CloudFormation 檢查服務的狀態時,包含該服務的堆疊會保留在 CREATE_\IN_PROGRESS 或 UPDATE_IN_PROGRESS 狀態,且無法更新。

如果您無法立即修正 Amazon ECS 服務任務的基礎問題,而且不想等待 DescribeService API 呼叫逾時,則可以在 AWS CloudFormation 中,手動強制 Amazon ECS 服務資源的狀態進入 CREATE_COMPLETE 狀態。若要這樣做,請在 Amazon ECS 主控台中手動將服務的所需計數設為零,以停止執行任務。AWS CloudFormation 便會將更新視為成功,因為任務數目等於所需計數 (零)。

**重要事項:**手動強制 AWS CloudFormation 進入 CREATE_COMPLETE 狀態並不是生產服務的最佳實務,因為所有任務都會停止,而且這麼做可能會導致生產中斷。

**注意事項:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用最新的 AWS CLI 版本

解決方案

驗證資源建立

1.    在您的 AWS CloudFormation 範本中,建立 AWS::ECS::Service 資源。例如:

Resources:
ECSServiceA:
 Type: AWS::ECS::Service
Properties:
  DesiredCount: 1
  Cluster: awsExampleECSCluster
  LaunchType: EC2
  ServiceName: "MyNginxService2"
  TaskDefinition: NginxTask:1

2.    開啟 AWS CloudFormation 主控台,然後選取您的堆疊。

3.    選擇「事件」索引標籤,然後確認正在建立您的資源。

更新服務的所需計數

您可以使用 AWS CLI 或 Amazon ECS 主控台,將服務的所需計數更新為原始值。

使用 AWS CLI:

1.    若要描述服務並列出服務事件,請執行下列命令:

aws ecs describe-services --cluster awsExampleECSCluster --services MyNginxService2

2.    若要更新服務的所需計數,請執行下列命令:

aws ecs update-service --cluster awsExampleECSCluster --service MyNginxService2 --desired-count 0

3.    將 --desired-count 更新為您的原始值。

使用 Amazon ECS 主控台:

1.    開啟 Amazon ECS 主控台

2.    在導覽窗格中,選擇「叢集」,然後選取包含您建立 Amazon ECS 服務的叢集。

3.    在「叢集」頁面上,選擇包含您建立 Amazon ECS 服務的叢集。

4.    在您選取叢集的頁面上,在「服務名稱」資料欄中選擇您的服務。

5.    選擇「事件」索引標籤,然後選擇「更新」。

6.    在「設定服務」頁面上,針對「任務數量」,輸入 0

7.    選擇「下一步」以逐步執行到「更新服務」精靈的結尾,然後選擇「更新服務」。

服務現在會達到穩定狀態,並在 AWS CloudFormation 中,將 Amazon ECS 服務資源轉換為 CREATE_COMPLETE 或 UPDATE_COMPLETE。

**重要事項:**若要在修正基礎任務的問題之後,使 AWS CloudFormation 堆疊與 Amazon ECS 服務屬性同步,您必須將所需計數 (DesiredCount) 手動變更回範本的原始值。


相關資訊

更新服務

update-service

services-stable

AWS 官方
AWS 官方已更新 3 年前