跳至內容

如何對 Amazon ECS 任務放置限制的問題進行疑難排解?

2 分的閱讀內容
0

我想要使​​用任務放置限制在 Amazon Elastic Container Service (Amazon ECS) 上執行任務。然而,任務卡在「擱置中」狀態且無法啟動。

簡短說明

如果您在任務定義、任務或服務上設定任務放置限制,則必須具有與其屬性相符的容器執行個體。否則,任務將卡在擱置中狀態或無法啟動,並且您會收到下列其中一個錯誤:

  • 服務 (service-name) 無法設定任務,因為沒有容器執行個體符合其所有要求。最接近的相符容器執行個體 ( a1b2c3d4-5678-90ab-cdef-11111EXAMPLE ) 缺少必要的屬性。
  • TaskFailedToStart: 未滿足 MemberOf 放置限制。
  • TaskFailedToStart: 屬性

解決方法

注意: 如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,則請參閱對 AWS CLI 進行錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

若要解決任務放置限制問題,請先檢查您在任務放置限制中指定的屬性。然後,請確定容器執行個體具有必要的屬性。

檢查僅在任務定義中指定的任務放置限制

如果您只在任務定義中使用任務放置限制,請執行下列命令檢查容器執行個體是否缺少屬性:

ecs-cli check-attributes --task-def example-task-def --cluster example-cluster --region region-code --container-instances example-container-instance-id

注意:example-task-def 替換為您的任務定義,將 example-cluster 替換為您的叢集名稱,將 region-code 替換為您的 AWS 區域,並將 example-container-instance-id 替換為您的容器執行個體 ID。

如需詳細資訊,請參閱 GitHub 網站上的檢查缺失屬性和偵錯原因屬性錯誤

檢查任務定義、服務或任務中指定的任務放置限制

若要檢查任務定義中的放置限制,請完成以下步驟:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選擇 Task definitions (任務定義)。
  3. 選擇任務定義,然後選擇您的任務定義修訂。
  4. 選擇 Task placement (任務放置)。

若要檢查為服務指定的放置限制,請完成以下步驟:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選取 Clusters(叢集)。
  3. Clusters (叢集) 頁面上,選擇您的叢集。
  4. Services (服務) 下,選擇您的服務。
  5. 選取 Configuration and networking (組態與網路),然後選擇 Task placement strategy and constraints (任務放置政策與限制)。

若要檢查特定任務上指定的放置限制,請執行下列 describe-tasks AWS CLI 命令:

    aws ecs describe-tasks  --cluster example-cluster --region region-code
    --tasks task-id

注意:example-cluster 替換為您的叢集名稱,將 region-code 替換為您的區域,將 task-id 替換為您的任務 ID。在指令的輸出中,檢查 placementConstraints 值。

確定您的容器執行個體具有必要的屬性

使用 Amazon ECS 主控台或 AWS CLI 來檢查容器執行個體屬性。

Amazon ECS 主控台

請完成下列步驟:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選取 Clusters(叢集)。
  3. Clusters (叢集) 頁面上,選擇您的叢集。
  4. 選擇 Infrastructure (基礎架構) 標籤。
  5. Container instances (容器執行個體) 下,選取容器執行個體。
  6. 選擇 Actions (動作),然後選取 View/edit attributes (檢視/編輯屬性)。
  7. 確保容器執行個體具有放置限制中指定的必需屬性。

AWS CLI

執行以下 describe-container-instances 命令:

aws ecs describe-container-instances --cluster example-cluster --region region-code
--container-instances example-container-instance-id

注意:example-cluster 替換為您的叢集名稱,將 region-code 替換為您的區域,並將 example-container-instance-id 替換為您的容器執行個體 ID。

若要查看具有特定屬性的所有容器執行個體,請執行 list-container-instances 命令:

aws ecs list-container-instances --cluster example-cluster --region region-code --filter "attribute:ecs.instance-type == t2.micro"

注意:example-cluster 替換為您的叢集名稱,將 region-code 替換為您的區域,並將 attribute:ecs.instance-type == t2.micro 替換為您的屬性。上述命令會列出叢集中所有具有 t2.micro 執行個體類型的容器執行個體。

若要使用 AWS CLI 新增或更新容器執行個體的屬性,請執行下列 put-attributes 命令:

aws ecs put-attributes \
    --cluster example-cluster \
    --region region-code \
    --attributes name=stack,value=production,targetId=example-container-instance-id

注意:example-cluster 替換為您的叢集名稱,將 region-code 替換為您的區域,並將 example-container-instance-id 替換為您的容器執行個體 ID。將您的屬性新增至 --attributes 選項。上述範例命令將堆疊名稱和生產值新增至容器執行個體。

(選用) 更新任務放置限制

如果任務放置限制不正確或過於嚴格,請在任務定義服務中更新它們。或者,執行以下 register-task-definition 來建立新的任務定義修訂:

aws ecs register-task-definition \
    --cli-input-json file://jsonfilepath/filename.json

注意:jsonfilepath.filename.json 替換為任務定義 JSON 檔案。

若要更新獨立任務的放置限制,請執行下列 run-task 指令:

aws ecs run-task \
    --cluster clustername \
    --placement-constraints exampleconstraints

注意:clustername 替換為您的叢集名稱,將 exampleconstraints 替換為您的放置限制。

AWS 官方已更新 1 年前