我的 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