Amazon ECS または Amazon EC2 インスタンスがクラスターに参加できないのはなぜですか?

最終更新日: 2022 年 5 月 5 日

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを Amazon Elastic Container Service (Amazon ECS) クラスターに登録できません。

簡単な説明

Amazon EC2 インスタンスは、次の 1 つまたは複数の理由により ECS クラスターに登録や参加ができません。

  • ECS エンドポイントがインスタンスの DNS ホスト名にパブリックにアクセスできない。
  • パブリックサブネットの設定が正しくない。
  • プライベートサブネットの設定が正しくない。
  • VPC エンドポイントが正しく設定されていない。
  • セキュリティグループではネットワークトラフィックが許可されていない。
  • EC2 インスタンスには、必要な AWS Identity and Access Management (IAM) のアクセス許可がない。または、ecs:RegisterContainerInstance API コールが拒否された。
  • ECS コンテナのインスタンスユーザーデータが正しく設定されていない。
  • ECS エージェントが停止しているか、インスタンスで実行されていない。
  • Auto Scaling グループの起動設定が正しくない (インスタンスが Auto Scaling グループの一部である場合)。
  • インスタンスに使用されている Amazon マシンイメージ (AMI) が前提条件を満たしていない。

解決方法

重要: AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager ランブックを使用して、前のセクションに記載されている一般的な問題のトラブルシューティングを行います。ランブックの出力にレコメンデーションがない場合は、後続のセクションで説明する手動のトラブルシューティング方法を使用してください。

Systems Manager Automation ランブックを使用する

AWSSupport-TroubleshootECSContainerInstance ランブックを使用すると、ECS クラスターに登録できない EC2 インスタンスのトラブルシューティングを行うことができます。このオートメーションは以下を確認します。

  • インスタンスのユーザーデータに正しいクラスター情報が含まれているか?
  • インスタンスプロファイルに必要なアクセス許可が含まれているか?
  • ネットワーク設定の問題があるか?

重要: AWSSupport-TroubleshootECSContainerInstance ランブックは、ECS クラスターと EC2 インスタンスが配置されているのと同じ AWS リージョンで使用してください。

  1. AWS Systems Manager コンソールを開きます。
  2. ナビゲーションペインの [変更管理] で、[オートメーション] を選択します。
  3. [Execute automation] (オートメーションの実行) を選択します。
  4. [Owned by Amazon] (Amazonが所有) タブを選択します。
  5. オートメーションドキュメントでAWSSupport-TroubleshootECSContainerInstance を検索します。
  6. AWSSupport-TroubleshootECSContainerInstance カードを選択します。
    注意: ハイパーリンクが設定されたオートメーション名ではなく、ラジオボタンを選択していることを確認してください。
  7. [次へ] を選択します。
  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 またはカスタム AMI である場合は、インスタンスに次のコンポーネントが含まれていることを確認します。

Amazon ECS に最適化された 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\tステータスコード: 400、リクエスト ID: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go

このエラーは、EC2 インスタンスが現在非アクティブであるため、ECS エージェントが EC2 コンテナインスタンスを ECS クラスターに登録できない場合に発生します。このエラーは、インスタンスで実行されているアプリケーションに関連しています。エラーの原因を把握するには、アプリケーションを確認してください。エラーが解決しない場合は、ECS エージェントログを確認します。

エラー: クラスターに参加できるインスタンスはほとんどありませんが、設定が同じであれば、他のインスタンスはクラスターに参加できません。

このエラーは、特定の API コールのレート制限を超えたときにThrottlingException が発生することが原因である可能性があります。このエラーを解決するには、アカウントレベルのレート制限を引き上げます。RegisterTargets や RegisterContainerInstance などの API を必ず確認してください。

エラー:インスタンスタイプを変更すると、新しいインスタンスはクラスターに参加できなくなります。

このエラーは、ECS エージェントが保留状態のままになり、インスタンスタイプを変更できない場合に発生します。他の EC2 インスタンスと異なり、ECS インスタンスを停止してインスタンスタイプを変更し、再度起動することはできません。ECS でインスタンスタイプを変更するには、コンテナインスタンスを終了し、目的のクラスター用に Amazon ECS に最適化された最新の Amazon Linux 2 AMI を使用して、希望するインスタンスサイズで新しいコンテナインスタンスを起動する必要があります。また、新しい起動設定を作成し、Auto Scaling グループでこの起動設定を更新することもできます。

エラー: ECS でコンテナインスタンスとして登録できません: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def is not authorized to perform: ecs:RegisterContainerInstance on resource: 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: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster status code: 400, request id: 0a123456-7899-10101-a987-123456pqrs

これらのエラーは、IAM アクセス許可がないために発生します。これらのエラーを解決するには、「インスタンスに関連付けられた IAM ロールとポリシーを確認する」セクションの手順を確認してください。