當我為 Amazon ECS 叢集設定新容量供應商,或更新現有容量供應商時,如何疑難排解問題?

上次更新日期:2022 年 4 月 13 日

當我嘗試為我的 Amazon Elastic Container Service (Amazon ECS) 叢集設定新的容量供應商,或更新現有容量供應商時發生問題。

簡短描述

為 Amazon ECS 叢集設定新容量供應商,或更新現有容量供應商時,會出現以下一些常見問題:

  • 當您使用 AWS Command Line Interface (AWS CLI) 建立 Auto Scaling 群組容量供應商時,會發生錯誤。
  • 發生錯誤:已存在指定的容量供應商。如要變更現有容量供應商的組態,請更新容量供應商。
  • 發生錯誤:已有另一個容量供應商使用指定的 Auto Scaling 群組 ARN。指定唯一的 Auto Scaling 群組 ARN,再重試一次。
  • 當您建立容量供應商策略時發生錯誤:指定的叢集處於忙碌狀態。叢集附件必須是 UPDATE_COMPLETE 或 UPDATE_FAILED 狀態,之後才能進行更新。請稍候,並再試一次。
  • 由於容量供應商具有某些限制,因此會發生錯誤。
  • 透過 AWS CloudFormation 成功建立容量供應商,但並未顯示在主控台中。

解決方案

使用 AWS CLI 建立 Auto Scaling 群組容量供應商時發生錯誤

若要在您使用 AWS CLI 建立容量供應商時,針對此問題進行疑難排解,請檢視 AWS CloudTrail 事件,以檢查 CreateCapacityProvider API。以下是您使用 CapacityProvider API 時,可能會發生的一些錯誤:

  • ClientException:這些錯誤通常是因客户端動作所引起。此客户端動作可能使用代表 AWS Identity and Access Management (IAM) 使用者的動作或資源,但該使用者並無使用動作或資源的許可。此錯誤還可能指定無效的識別符。
  • UpdateInProgressException:由於您指定的容器執行個體上,正在進行目前的 Amazon ECS 容器代理程式更新,因此發生此錯誤。如果容器代理程式於過渡階段 (如「待完成」或「模擬」) 中斷連線,則更新流程可能會停滯在該狀態。但是,當代理程式重新連線時,它將恢復之前停止的狀態。

如需詳細資訊,請參閱錯誤

注意:如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI

發生錯誤:已存在指定的容量供應商。如要變更目前容量供應商的組態,請更新容量供應商

當您建立容量供應商時,請使用與之前的任何容量供應商不同的名稱。或者,您可以刪除該名稱的目前容量供應商,並建立新的容量供應商。

如要檢視您建立的所有容量供應商清單,請執行以下命令:

aws ecs describe-capacity-providers --query capacityProviders[].name --region example-region

輸出類似於以下內容:

[
    "FARGATE",
    "FARGATE_SPOT",
    "ecs-capacityprovider-1"
]

如要刪除容量供應商,請執行以下命令:

aws ecs delete-capacity-provider --capacity-provider ecs-capacityprovider-1 --region example-region

針對範例輸出與更多選項,請參閲 delete-capacity-provider

如要建立新的容量供應商,請執行以下命令:

aws ecs create-capacity-provider --name "example-capacity=provider" --auto-scaling-group-provider autoScalingGroupArn=arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:autoScalingGroupName/MyAutoScalingGroup,managedScaling={status=ENABLED,targetCapacity=100,minimumScalingStepSize=1,maximumScalingStepSize=100},managedTerminationProtection=ENABLED

針對範例輸出與更多選項,請參閲 create-capacity-provider

發生錯誤:已有另一個容量供應商使用指定的 Auto Scaling 群組 ARN。指定唯一的 Auto Scaling 群組 ARN,再重試一次

Auto Scaling 群組與容量供應商必須是一對一的關係。您可以將 Auto Scaling 群組連接到一個容量供應商,反之亦然。因此,請驗證您的容量供應商是否僅與一個 Auto Scaling 群組相關聯。

發生錯誤:指定的叢集處於忙碌狀態。叢集附件必須是 UPDATE_COMPLETE 或 UPDATE_FAILED 狀態,之後才能進行更新。請稍候並重試

此錯誤會在幾分鐘內自動解決。您可以稍後一段時間,並再重試一次,以更新容量供應商。您還可以執行以下 CLI 命令,以檢視附件的目前狀態,並稍候一段時間,直到附件呈現 UPDATE_COMPLETE 狀態。

aws ecs describe-clusters --clusters example-ARN --include ATTACHMENTS --query clusters[].attachmentsStatus --region example-region

輸出必須看起來類似與以下內容:

[
    "UPDATE_COMPLETE"
]

由於容量供應商具有某些限制,因此會發生錯誤

在建立或更新容量供應商時,請記住以下限制:

  • 您不能為容量策略指定六個以上的容量供應商。
  • 您可以在叢集策略中使用 Auto Scaling 群組容量供應商,或是 AWS Fargate 容量供應商。您不能使用這兩種類型的組合。
  • 只有在執行任務時,才支援容量供應商策略的基本值。

容量供應商已透過 CloudFormation 成功建立,但未顯示在主控台中

當您不將容量供應商與 CloudFormation 範本中的叢集相關聯時,即可能會發生此情況。

如要避免此問題,請使用 CloudFormation 程式碼片段,將容量供應商與叢集相關聯:

...
ECSCluster:
  Type: 'AWS::ECS::Cluster'
  Properties:
    ClusterName: example-cluster
    CapacityProviders:
      - !Ref ECSCapacityProvider
...