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

所要時間3分
0

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

簡単な説明

Amazon EC2 インスタンスがAmazon ECS クラスターに登録および参加できない理由は、次の通りです:

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

解決方法

AWS Systems Manager の AWSSupport-TroubleshootECSContainerInstance ランブックを使用して、「簡単な説明」セクションにある一般的な問題のトラブルシューティングを行います。ランブックの出力に推奨事項が記載されていない場合は、次の「解決策」セクションにある手動のトラブルシューティングのアプローチを使用してください。

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

EC2 インスタンスが ECS クラスターへの登録に失敗した場合にトラブルシューティングを行うには、AWSSupport-TroubleshootECSContainerInstance ランブックを使用します。このオートメーションでは、以下が確認されます:

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

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

  1. AWS Systems Manager コンソールを開きます。
  2. ナビゲーションペインで、[変更管理] から [オートメーション] を選択します。
  3. [オートメーションの実行] を選択します。
  4. [Amazon が所有] タブを選択します。
  5. [オートメーションドキュメント] で「TroubleshootECSContainerInstance」を検索します。
  6. AWSSupport-TroubleshootECSContainerInstance カードを選択します。
    : ハイパーリンクされたオートメーション名ではなく、ラジオボタンを選択してください。
  7. [次へ] を選択します。
  8. [オートメーションドキュメントの実行] で、[シンプルな実行] を選択します。
  9. [入力パラメータ] セクションの [AutomationAssumeRole] に、Systems Manager Automation によるアクションの実行を許可するロールの Amazon Resource Name (ARN) を入力します。
    : IAM ロールを指定しない場合、Systems Manager Automation では ランブックを実行する IAM ユーザーまたはロールのアクセス許可が使用されます。Systems Manager Automation の assume ロールの作成については、「方法 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. [実行] を選択します。

ランブックの出力には、トラブルシューティングの手順と推奨事項が記載されています。

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 またはカスタム 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 に連絡して、アカウントのブロックを解除する必要があることを伝えてください。

エラー:再登録: クライアント例外: コンテナ・インスタンス12345678910xxxxxxxxxxxは非アクティブです。\n\tstatus code: 400、リクエストID: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go

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

エラー: いくつかのインスタンスはクラスターに参加できますが、同じ設定で他のインスタンスはクラスターに参加できません。

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

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

このエラーは、ECS エージェントが保留状態のままであり、インスタンスタイプを変更できない場合に発生します。EC2 インスタンスとは異なり、ECS インスタンスを停止し、インスタンスタイプを変更して再起動することはできません。Amazon ECS でインスタンスタイプを変更するには、次の手順を実行します:

  1. コンテナインスタンスを終了します。
  2. 新しいインスタンスサイズで新しいコンテナインスタンスを起動します。クラスター用の Amazon ECS に最適化された Amazon Linux 2 AMI を使用してインスタンスを起動するのがベストプラクティスです。

または、新しい起動設定を作成することもできます。その後、Auto Scaling グループの起動設定を更新します。

詳細については、「Amazon ECS でコンテナインスタンスタイプを変更するにはどうすればよいですか?」を参照してください。

エラー: ECSにコンテナインスタンスとして登録できません: アクセス拒否例外: ユーザー: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def は、リソース: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster に対して次の操作を行う権限がありません。 status code: 400、リクエストID: 0a123456-7899-10101-a987-6543210deff

-または-
エラー: 2019-06-29T16:10:09Z [ERROR] 再登録エラー: アクセス拒否例外: ユーザー: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef は、リソース: 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 Linux 1 AMI の Amazon ECS コンテナインスタンスが切断されるのはなぜですか?

Amazon ECS トラブルシューティング

独自のランブックの作成

コメントはありません