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

3 分的閱讀內容
0

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

簡短說明

由於下列一或多個原因,您的 Amazon EC2 執行個體無法註冊或加入 Amazon 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 執行手冊,針對簡短說明一節中列出的常見問題進行疑難排解。如果執行手冊的輸出不提供建議,則使用手動疑難排解方法排除以下解決方法部分。

使用系統管理員自動化執行手冊

使用 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. 針對 AutomationAssumeRole,在 Input parameters(輸入參數)區段,輸入允許系統管理員自動化執行動作之角色的 Amazon Resource Name (ARN)。
    注意: 如果您未指定 IAM 角色,則系統管理員自動化會使用 IAM 使用者或執行執行手冊角色的權限。如需建立系統管理員自動化擔任角色的相關資訊,請參閱方法 2: 使用 IAM 以設定自動化角色。確定 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(執行)。

執行手冊的輸出提供疑難排解步驟和建議。

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

執行下列命令以檢查執行個體的 Amazon ECS 容器代理程式是否執行:

sudo systemctl status ecs

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

sudo systemctl start ecs

命令輸出的輸出外觀必須類似下列內容:

ecs start/running, process 23403

檢查啟動組態

如果您要啟動的執行個體屬於 Auto Scaling 群組的一部分,則確認 Auto Scaling 群組的啟動組態正確無誤。如需詳細資訊,請參閱使用新使用新 AMI 重新整理 Amazon ECS 容器執行個體叢群步驟 5

檢查執行個體的 AMI

如果您用於 EC2 執行個體的 AMI 是複製或自訂 AMI,則確認執行個體有下列元件:

Amazon ECS 最佳化的 AMI 已預先設定下列需求。除非您的應用程式需要該 AMI 尚未提供的版本,否則最佳實務是使用 Amazon ECS 最佳化 AMI。

驗證日誌檔

如果問題仍然存在,則使用 Amazon 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\t狀態碼: 400,請求 ID: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go

ECS 代理程式無法向 ECS 叢集註冊 EC2 容器執行個體時,您會收到此錯誤,因為 EC2 執行個體現在處於非使用中狀態。此錯誤與執行個體上執行的應用程式有關。要瞭解錯誤的原因,請檢查應用程式。如果錯誤仍然存在,請檢查 ECS 代理程式日誌。

錯誤: 很少執行個體可以加入叢集,但使用相同的設定,其他執行個體無法加入叢集。

此錯誤可能是因為特定 API 呼叫超出速率限制時,產生的 ThrottlingException 所導致。要解決此錯誤,提高帳戶層級的速率限制。檢查 API,例如 RegisterTargetsRegisterContainerInstance

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

ECS 代理程式停留在待處理狀態且無法變更執行個體類型時,就會發生此錯誤。與一些 EC2 執行個體不同,您無法停止 ECS 執行個體、變更執行個體類型,然後再次啟動。要變更 Amazon ECS 的執行個體類型,完成下列步驟:

  1. 終止容器執行個體。
  2. 啟動具有新執行個體大小的新容器執行個體。最佳實務是針對您的叢集,使用 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 權限,會發生這些錯誤。要解決這些錯誤,請參閱 Amazon ECS 容器執行個體 IAM 角色的指示。

此外,執行 AWSSupport-TroubleshootECSContainerInstance 執行手冊以了解容器執行個體角色缺少的權限。

相關資訊

建立虛擬私有雲端

為什麼我的 Amazon ECS 容器執行個體與 Amazon Linux 1 AMI 中斷連線?

Amazon ECS 疑難排解

建立您自己的執行手冊

AWS 官方
AWS 官方已更新 2 年前