為什麼我的 Amazon EC2 執行個體無法加入 Amazon ECS 叢集?
我無法使用 Amazon Elastic Container Service (Amazon ECS) 叢集註冊我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
解決方法
首先,請使用 AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager 執行手冊來自動檢查潛在問題。AWSSupport-TroubleshootECSContainerInstance 執行手冊會自動排解 EC2 執行個體無法註冊或加入叢集的常見原因。
**注意:**確保在 Amazon ECS 叢集和 EC2 執行個體所在的相同 AWS 區域中,使用 AWSSupport-TroubleshootECSContainerInstance 執行手冊。
如果執行手冊的輸出沒有提供建議,請執行下列動作手動疑難排解問題。
先決條件:
- EC2 執行個體必須附加 AWS Identity and Access Management (IAM) 角色,並具有必要權限,才能與您的 Amazon ECS 組態進行通訊。執行個體的 IAM 角色也必須具有 ecs:RegisterContainerInstance 權限,以便 Amazon ECS 在叢集中註冊容器執行個體。如果您不需要自訂您的 IAM 角色,請使用 AmazonEC2ContainerServiceforEC2Role。
- 確認容器執行個體網路組態是否正確。如需詳細資訊,請參閱如何解決 Amazon ECS EC2 啟動類型任務中的 "CannotPullContainerError" 錯誤?中的您的 Amazon ECS 容器執行個體網路設定不正確
在 Amazon Linux 2 執行個體上驗證 Amazon ECS 代理程式的狀態
執行下列命令,以檢查執行個體的 Amazon ECS 容器代理程式是否正在執行:
sudo systemctl status ecs
如果 Amazon ECS 容器代理程式未在執行個體上執行,執行下列命令以啟動代理程式:
sudo systemctl start ecs
此開始命令的輸出看起來類似於以下範例:
Active: active (running)
若要檢查 Docker 服務是否正在執行,請執行下列命令:
sudo systemctl status docker
如果 Docker 服務未處於執行狀態,請執行下列命令以啟動服務:
sudo systemctl start docker
此開始命令的輸出看起來類似於以下範例:
Active: active (running)
檢查啟動組態
如果啟動執行個體屬於 Auto Scaling 群組的一部分,則驗證 Auto Scaling 群組的啟動組態正確無誤。如需詳細資訊,請參閱** 5\。使用新 Amazon Machine Image (AMI) 重新整理 Amazon ECS 容器執行個體叢集中的建立新啟動組態**步驟。
檢查容器執行個體的 AMI
如果容器執行個體的 AMI 是複製或自訂 AMI,請確定執行個體符合下列要求:
- Linux 至少執行 Linux 核心 3.10 版。
- 您正在使用最新版本的 Amazon ECS Linux 容器代理程式。
- 執行至少 1.9.0 版和任何 Docker 執行時期相依性的 Docker 常駐程式。如需詳細資訊,請參閱 Docker Docs 網站上的從二進位檔安裝 Docker 引擎。要查看目前的 Docker 版本,執行 sudo docker version 命令。如需詳細資訊,請參閱 Docker 網站上的安裝 Docker 引擎。
Amazon ECS 最佳化的 AMI 已預先設定下列要求。除非您的應用程式需要該 AMI 未提供的版本,否則最佳實務是使用 Amazon ECS 最佳化的 AMI。如需詳細資訊,請參閱擷取 Amazon ECS 最佳化的 Linux AMI 中繼資料。
檢查執行個體的使用者資料是否包含正確的叢集資訊
要檢查執行個體的使用者資料是否包含正確的叢集資訊,請執行下列命令:
#!/bin/bash echo ECS_CLUSTER=cluster-name >> /etc/ecs/ecs.config
**注意:**將 cluster-name 取代為您的叢集名稱。
驗證日誌檔
如果問題仍然存在,請使用 Amazon ECS 日誌收集器來收集日誌。然後,檢閱日誌以找到原因。您也可以檢查 Amazon ECS 容器代理程式和 Docker 容器主機上的日誌檔。
若要檢視 Amazon ECS 容器代理程式和 Docker 的日誌檔,請執行下列命令:
sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**sudo cat /var/log/docker
**注意:**將 ** YYYY-MM-DD **取代為您要檢查日誌檔案的日期。
對常見錯誤進行疑難排解
錯誤: 啟動新的 EC2 執行個體。狀態原因: 此帳戶目前已被封鎖,且無法辨識為有效帳戶。如果您有任何疑問,請聯絡 aws-verification@amazon.com。啟動 EC2 執行個體失敗。
當您的 AWS 帳戶遭到封鎖且 Amazon 無法識別您的帳戶時,就會發生此錯誤。若要解除封鎖帳戶,請傳送電子郵件至 ** aws-verification@amazon.com **,要求 AWS 解除封鎖您的帳戶。
錯誤:重新註冊: ClientException: 容器執行個體 12345678910abcdefghixzy 處於非作用中狀態。\ n\ t 狀態代碼: 400,請求 ID: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go
Amazon ECS 容器代理程式無法使用叢集註冊 EC2 容器執行個體時,就會發生此錯誤,因為 EC2 執行個體處於非使用中狀態。此錯誤與執行個體上執行的應用程式有關。要瞭解錯誤的原因,請先檢查應用程式。如果錯誤仍然存在,請檢查 Amazon ECS 容器代理程式日誌。
錯誤: 很少執行個體可以加入叢集,但使用相同的設定,其他執行個體無法加入叢集。
當特定 API 呼叫超過速率配額並導致 ThrottlingException 時,會發生此錯誤。如需詳細資訊,請參閱 Amazon ECS API 的要求限流。若要解決此錯誤,請提升帳戶層級的速率配額。使用 AWS CloudTrail 檢查常見的 API 呼叫,例如 ListTasks 和 RegisterContainerInstance。
錯誤: 變更執行個體類型後,新執行個體將無法加入叢集。
Amazon ECS 容器代理程式停留在待處理狀態且無法變更執行個體類型時,就會發生此錯誤。要變更 Amazon ECS 的執行個體類型,完成下列步驟:
- 刪除容器執行個體。
- 啟動具有新執行個體類型的新容器執行個體。
**注意:**最佳實務是對您的叢集使用 Amazon ECS 最佳化的 Amazon Linux 2 AMI 啟動執行個體。
或者,建立新的啟動組態,然後在 Auto Scaling 群組中更新啟動組態。
如需詳細資訊,請參閱如何在 Amazon ECS 中變更容器執行個體類型?
錯誤: 無法向 ECS 註冊為容器執行個體: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def 未授權執行:ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster . status code: 400,請求 ID: 0a123456-7899-10101-a987-6543210deff
-或-
錯誤: 2019-06-29T16:10:09Z [ERROR] 重新註冊時發生錯誤: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef 未授權執行:ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster status code: 400,請求 ID: 0a123456-7899-10101-a987-123456pqrs
當您缺少必要 IAM 權限時,會發生這些錯誤。若要解決這些錯誤,請建立容器執行個體 IAM 角色。然後,執行 AWSSupport-TroubleshootECSContainerInstance 執行手冊以識別容器執行個體角色缺少的權限。
相關資訊

相關內容
- 已提問 2 年前lg...
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- 已提問 1 個月前lg...
- AWS 官方已更新 2 個月前
- AWS 官方已更新 2 個月前
- AWS 官方已更新 2 個月前
- AWS 官方已更新 3 年前