為什麼我的 Amazon ECS 或 Amazon EC2 執行個體無法加入叢集?

上次更新日期:2022 年 5 月 5 日

我無法透過 Amazon Elastic Container Service (Amazon ECS) 叢集,註冊我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。

簡短描述

由於以下一個或多個原因,您的 Amazon EC2 執行個體無法向 ECS 叢集註冊,也無法加入 ECS 叢集:

  • ECS 端點無法公開存取執行個體的 DNS 主機名稱。
  • 您的公有子網路配置不正確。
  • 您的私有子網路配置不正確。
  • 您的 VPC 端點配置不正確。
  • 您的安全群組不允許網絡流量。
  • EC2 執行個體沒有所需的 AWS Identity and Access Management (IAM) 許可。或者,ecs:RegisterContainerInstance API 呼叫遭到拒絕。
  • 適用於 ECS 容器的執行個體使用者資料配置不正確。
  • ECS 代理程式已停止,或未在執行個體上執行。
  • Auto Scaling 群組的啟動組態不正確 (如果您的執行個體是 Auto Scaling 群組的一部分)。
  • 適用於執行個體的 Amazon Machine Image (AMI) 不符合先決條件。

解析度

重要:請使用 AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager 執行手冊,對前一節列出的常見問題進行疑難排解。如果執行手冊的輸出未提供推薦,請使用後續章節中說明的手動疑難排解方法。

使用 Systems Manager Automation 執行手冊

使用 AWSSupport-TroubleshootECSContainerInstance 執行手冊,您可以針對無法向 ECS 叢集註冊的 EC2 執行個體進行疑難排解。此自動化操作會檢閱下列項目:

  • 執行個體的使用者資料是否包含正確的叢集資訊?
  • 執行個體設定檔是否包含必要的許可?
  • 是否有任何網路設定問題?

重要:在 ECS 叢集和 EC2 執行個體所在的相同 AWS 區域中使用 AWSSupport-TroubleshootECSContainerInstance 執行手冊。

  1. 開啟 AWS Systems Manager 主控台
  2. 在導覽窗格中的 Change Management (變更管理) 下,選擇 Automation (自動化)。
  3. 選擇 Execute automation (執行自動化)。
  4. 選擇 Owned by Amazon (由 Amazon 擁有) 標籤。
  5. Automation document (自動化文件) 下,搜尋 TroubleshootECSContainerInstance
  6. 選取 AWSSupport-TroubleshootECSContainerInstance 卡。
    注意:請確定您選取電台按鈕,而不是超連結的自動化名稱。
  7. 選擇 Next (下一步)。
  8. 對於 Execution automation document (執行自動化文件),請確定已選取 Simple execution (簡單執行)。
  9. Input parameters (輸入參數) 區段中,針對 AutomationAssumeRole,輸入可讓 Systems Manager Automation 執行動作的角色的 Amazon 資源名稱 (ARN)。
    注意:如果您未指定 IAM 角色,則 Systems Manager Automation 會使用運行執行手冊的 IAM 使用者或角色許可。如需有關建立 Systems Manager Automation 假設角色的詳細資訊,請參閱任務 1:為自動化建立服務角色
    重要:請確定 AutomationAssumeRole 或 IAM 使用者/角色具有下列動作的許可:ec2:DescribeIamInstanceProfileAssociationsec2:DescribeInstanceAttributeec2:DescribeInstancesec2:DescribeNetworkAclsec2:DescribeRouteTablesec2:DescribeSecurityGroupsec2:DescribeSubnetsec2:DescribeVpcsec2:DescribeVpcEndpointsiam:GetInstanceProfileiam:GetRoleiam:SimulateCustomPolicyiam:SimulatePrincipalPolicy
  10. 針對 ClusterName,輸入 EC2 執行個體無法註冊的叢集名稱。
  11. 針對 InstanceId,輸入無法註冊的 EC2 執行個體 ID。
  12. 選擇 Execute (執行)。

執行手冊的輸出提供了疑難排解步驟和推薦,以解決造成 EC2 執行個體無法在叢集中註冊的問題。

驗證 Amazon Linux 2 執行個體上的 Amazon ECS 代理程式狀態

藉由執行以下命令,檢查執行個體上的 ECS 客服人員是否正在執行:

sudo status ecs

如果容器代理程式未在您的容器執行個體上執行,則執行以下命令,以啟動代理程式:

sudo start ecs
命令輸出的輸出,必須與以下內容類似:
ecs start/running, process 23403

檢查啟動組態

如果您的執行個體是作為 Auto Scaling 群組的一部分啟動的,則請確保 Auto Scaling 群組的啟動組態正確。如需更多資訊,請參閲使用新 AMI 重新整理 Amazon ECS 容器執行個體叢集中的步驟 5

檢查執行個體的 AMI

如果用於 EC2 執行個體的 AMI 是複製或自訂的 AMI,請確保該執行個體具有以下元件:

Amazon ECS 最佳化的 AMI 已根據這些要求,提前進行設定。因此,除非您的應用程式需要特定的操作系統,或是該 AMI 中尚未提供的 Docker 版本,否則最佳實務是將它們使用於您的容器執行個體中。

驗證日誌

如果問題持續發生,請使用 ECS 日誌收集器收集日誌,並檢閱日誌,以找出原因。您還可以在容器主機上,檢查提供給容器代理程式與 Docker 的日誌檔案。

如要檢視容器代理程式與 Docker 的日誌檔案,請執行以下命令:

sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
sudo cat /var/log/docker

常見錯誤

錯誤:啟動新的 EC2 執行個體。狀態原因:此帳户目前遭到封鎖,且不被視為有效帳戶。如果您有任何疑問,請聯繫 aws-verification@amazon.com。EC2 執行個體啟動失敗。

請按照狀態原因中顯示方式,聯繫 aws-verification@amazon.com,並說明您須解除帳戶的封鎖。

錯誤:重新註冊:ClientException:容器執行個體 12345678910xxxxxxxxxxxx 非作用中。\n\ 狀態代碼:400,請求 ID:012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go

當 ECS 代理程式因 EC2 執行個體非作用,而無法以 ECS 叢集註冊 EC2 容器執行個體時,即會出現此錯誤。此錯誤與執行個體上執行的應用程式有關。如要瞭解錯誤的原因,請檢查應用程式。如果錯誤持續發生,請檢查 ECS 代理程式日誌。

錯誤:極少的執行個體可以加入叢集,但若使用相同的組態,其他執行個體無法加入叢集。

可能是由於超出特定 API 呼叫的速率限制,而導致發生 ThrottlingException 的錯誤。如要解決此錯誤,請增加帳戶級別的速率限制。請務必檢查 API,例如 RegisterTargets 和 RegisterContainerInstance。

錯誤:在變更執行個體類型後,無法將新執行個體加入叢集。

當 ECS 代理程式處於待處理狀態,且無法變更執行個體類型時,即導致此錯誤的發生。與其他 EC2 執行個體不同,您無法停止 ECS 執行個體、變更執行個體類型,並再次重新啟動。如要變更 ECS 中的執行個體類型,您須終止容器執行個體,然後針對您需要的叢集使用最新的 Amazon ECS 最佳化 Amazon Linux 2 AMI,啟動具有所需執行個體大小的新容器執行個體。您還可以建立新的啟動組態,然後在 Auto Scaling 群組中更新此啟動組態。

錯誤:無法使用 ECS 註冊為容器執行個體:AccessDeniedException:使用者:arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def 不被授權執行:資源上的 ecs:RegisterContainerInstance:arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster . status code: 400, request id: 0a123456-7899-10101-a987-6543210deff

2019-06-29T16:10:09Z [ERROR] 錯誤重新註冊:AccessDeniedException:使用者:arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef 不被授權執行:資源上的 ecs:RegisterContainerInstance:arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster status code: 400, request id: 0a123456-7899-10101-a987-123456pqrs

因為缺少 IAM 許可,而發生這些錯誤。如要解決這些錯誤,請檢閱在驗證 IAM 角色和與執行個體相關聯的政策區段中的説明。