為什麼我的 Amazon ECS 或 Amazon EC2 執行個體無法加入叢集?
我無法使用 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 執行手冊。
- 開啟 AWS Systems Manager 主控台。
- 在導覽窗格的 Change Management(變更管理)下,選擇Automation(自動化)。
- 選擇 Execute automation(執行自動化)。
- 選擇 Owned by Amazon(Amazon 擁有者)索引標籤。
- 在 Automation document(自動化文件)下,搜尋 TroubleshootECSContainerInstance。
- 選取 AWSSupport-TroubleshootECSContainerInstance 卡。
注意: 選取選項按鈕,而非超連結的自動化名稱。 - 選擇 Next(下一步)。
- 針對 Execution automation document(執行自動化文件),選擇 Simple execution(簡單執行)。
- 針對 AutomationAssumeRole,在 Input parameters(輸入參數)區段,輸入允許系統管理員自動化執行動作之角色的 Amazon Resource Name (ARN)。
注意: 如果您未指定 IAM 角色,則系統管理員自動化會使用 IAM 使用者或執行執行手冊角色的權限。如需建立系統管理員自動化擔任角色的相關資訊,請參閱方法 2: 使用 IAM 以設定自動化角色。確定 AutomationAssumeRole 或 IAM 腳色有下列權限:ec2:DescribeIamInstanceProfileAssociations、ec2:DescribeInstanceAttribute、ec2:DescribeInstances、ec2:DescribeNetworkAcls、ec2:DescribeRouteTables、ec2:DescribeSecurityGroups、ec2:DescribeSubnets、ec2:DescribeVpcs、ec2:DescribeVpcEndpoints、iam:GetInstanceProfile、iam:GetRole、iam:SimulateCustomPolicy 和 iam:SimulatePrincipalPolicy。 - 針對 ClusterName,輸入 EC2 執行個體無法註冊的叢集名稱。
- 針對 InstanceId,輸入無法註冊的 EC2 執行個體 ID。
- 選擇 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,則確認執行個體有下列元件:
- 在 Linux 內核版本 3.10 以上的環境執行現代的 Linux 發行版本。
- 最新版本的 Amazon ECS Linux 容器代理程式。
- 在至少版本 1.9.0 和任何 Docker 執行期依賴關係 上執行的 Docker 常駐程式 (來自 Docker 網站)。要查看目前的 Docker 版本,執行命令 sudo docker version。如需在特定 Linux 發行版本上安裝最新 Docker 版本的相關資訊,請參閱 Docker 網站的安裝 Docker 引擎的 Docker 說明文件。
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,例如 RegisterTargets 和 RegisterContainerInstance。
錯誤: 變更執行個體類型後,新執行個體將無法加入叢集。
ECS 代理程式停留在待處理狀態且無法變更執行個體類型時,就會發生此錯誤。與一些 EC2 執行個體不同,您無法停止 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 權限,會發生這些錯誤。要解決這些錯誤,請參閱 Amazon ECS 容器執行個體 IAM 角色的指示。
此外,執行 AWSSupport-TroubleshootECSContainerInstance 執行手冊以了解容器執行個體角色缺少的權限。
相關資訊
相關內容
- 已提問 10 個月前lg...
- 已提問 9 個月前lg...
- 已提問 5 個月前lg...
- 已提問 1 年前lg...
- 已提問 5 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 10 個月前