タスク実行時のAWS ECSエラー:クラスターインスタンスがクラスターで見つかりませんでした


115

dockerAWS使用してコンテナイメージをデプロイしようとしていECSますが、EC2インスタンスが作成されていません。次のエラーが発生する理由についての説明を探して、インターネットを調べました。

「RunTaskオペレーションの呼び出し時にクライアントエラー(InvalidParameterException)が発生しました:クラスターインスタンスがクラスターに見つかりませんでした。」

これが私のステップです:

1. DockerイメージをUbuntuからAmazon ECSリポジトリにプッシュしました。

2. ECSタスク定義を登録しました:

aws ecs register-task-definition --cli-input-json file://path/to/my-task.json 

3.タスクを実行しました:

aws ecs run-task --task-definition my-task

しかし、それは失敗します。

これが私の仕事です:

{
  "family": "my-task",
  "containerDefinitions": [
    {
        "environment": [],
        "name": "my-container",
        "image": "my-namespace/my-image",
        "cpu": 10,
        "memory": 500,
        "portMappings": [
            {
                "containerPort": 8080,
                "hostPort": 80
            }
        ],
        "entryPoint": [
            "java",
            "-jar",
            "my-jar.jar"
        ],
        "essential": true
    }
  ]
}

また、管理コンソールを使用してクラスターとサービスを構成しようとしましたが、同じエラーが発生します。ec2インスタンスを持つようにクラスターを構成するにはどうすればよいですか?また、どのような種類のコンテナーインスタンスを使用する必要がありますか?このプロセス全体が、最初にEC2インスタンスを作成することだと思いました!!


クラスターを作成してタスクを実行するステップの間に高速で行ったときに、これを見たような気がします。
Ben Creasy

回答:


157

さらに数時間調査した結果、このことがわかりました。Amazonは、リッスンしている場合、クラスターを作成するとき、またはクラスターにインスタンスを追加するときに、管理コンソールのどこかにこれを指定する必要があります。

「ECSインスタンスをクラスターに追加する前に、まずEC2管理コンソールに移動しecs-optimizedて、AmazonEC2ContainerServiceforEC2RoleポリシーがアタッチされたIAMロールを持つインスタンスを作成する必要があります」

これが厳格な人物です:

1. EC2ダッシュボードに移動し、Launch Instanceボタンをクリックします。

2. [ Community AMIs検索]でecs-optimized、プロジェクトのニーズに最適なものを選択します。どれでも機能します。次をクリックします。

3. [インスタンスの詳細の構成]が表示されたら、をクリックしてcreate new IAM role link、という新しい役割を作成しますecsInstanceRole

4. AmazonEC2ContainerServiceforEC2Roleそのロールにポリシーをアタッチします。

5.次に、ECSインスタンスの構成を完了します。
注: Webサーバーを作成する場合は、ポート80へのアクセスを許可するsecurityGroupを作成する必要があります。

数分後、インスタンスが初期化されて実行されると、インスタンスを追加しようとしている[ECSインスタンス]タブを更新できます。


10
特定の地域に指定されている推奨されるAMIを選択すると、問題が解決しました。AMIを見つけるには、次のURLを確認する選択する必要がありdocs.aws.amazon.com/AmazonECS/latest/developerguide/...
sanath_p

1
AmazonEC2ContainerServiceforEC2Roleが表示されない場合、前回の投稿から変更はありますか?
BlueDolphin 2017年

1
@BlueDolphin IAMで新しいロールを作成したときに、そのポリシーを見つけることができました。
cyrf 2017

6
現在(2018年4月)現在ベータ版のFargate(aws.amazon.com/fargate)を使用してこのタイプの手間を回避している場合は、注目に値します。EC2このエラーが発生したときに、起動タイプとして選択しただけかもしれません。...
2018

10
また、EC2を作成するときに、独自のデフォルト以外のクラスターがある場合は、忘れずに追加#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.configAdvanced Details -> User dataてください。そうしないと、新しく作成されたEC2インスタンスがデフォルトのクラスターを作成します。
Jakub Czaplicki

40

現在、Amazon AWSウェブインターフェースは、正しいAMIと正しい名前でインスタンスを自動的に作成できるため、正しいクラスターに登録されます。

すべてのインスタンスは正しい設定でAmazonによって作成されましたが、私のインスタンスは登録されませんでした。上のアマゾンAWSフォーラム私は手がかりを見つけました。クラスターにはインターネットアクセスが必要です。プライベートVPCにインターネットゲートウェイがない場合、クラスターは接続できません。

修正

VPCダッシュボードで、新しいインターネットゲートウェイを作成し、クラスターで使用されるVPCに接続する必要があります。接続したら、VPCのルートテーブルを更新(または作成)し、最後の行として追加する必要があります

0.0.0.0/0 igw-24b16740  

igw-24b16740は、新しく作成したインターネットゲートウェイの名前です。



2
手がかりをありがとう!ロードバランサーへのトラフィックを除くすべての送信トラフィックをブロックするセキュリティグループをインスタンスに割り当てました。これを切り替えて、すべての送信トラフィックを許可しますが、ロードバランサーからの受信トラフィックのみを制限し、インスタンスがEC2クラスターに表示されました。
Mikepote 2017年

1
私はあなたの答えを2回以上投票できればいいのにと思います。これにより、「クラスタにコンテナインスタンスが見つかりませんでした」という私の正確な問題が修正されました。そして、最初に投票された回答は、実際のソリューションとは何の関係もありませんでした。ありがとうございました。
alexkb 2018

ゲートウェイをVPCに関連付けるだけでなく、ECSインスタンスを収容する特定のサブネットにインターネットトラフィックをルーティングする必要がある場合があります。-例えばaws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID-私はこれを答えに追加することを提案できますか?
グレッグ、

IGWを指す0.0.0..0 / 0のルートを追加した瞬間、サブネットはプライベートサブネットではなくなったことに言及する価値があると思います。ネットワークセキュリティの観点からは、NATゲートウェイを指すルートを作成することをお勧めします。
Henrik Pingel

18

Fargateを使用しているときにこの問題に遭遇しました。を呼び出すときに明示的に定義しlaunchType="FARGATE"たときに修正しましたrun_task


1
追加したCLIで--launch-type FARGATE
shlomiLan

11

その他の推奨チェック

  1. 特定の地域に指定された推奨AMIを選択すると、問題が解決しました。

    AMIを確認するには、「Amazon ECSコンテナインスタンスの起動」を確認してください。

  2. デフォルトでは、すべてのec2インスタンスがデフォルトのクラスターに追加されます。したがって、クラスターの名前も重要です。

Amazon ECSコンテナインスタンスの起動のポイント10を参照してください。

このスレッドで利用可能な詳細情報。


3

私がそうであったように、誰かがこの問題でブロックされている場合に備えて...私はここですべてを試しましたが、うまくいきませんでした。

ここでコメントしたEC2インスタンスの役割に関してここで述べたことに加えて、私の場合、EC2インスタンスを単純な情報で構成した場合にのみ機能しました。ユーザーデータを使用して、次のような初期スクリプトを作成します。

#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=quarkus-ec2
EOF

このecs構成ファイルで作成された関連するECSクラスター名を通知すると、問題が解決しました。この構成がないと、EC2インスタンスのECSエージェントログに、ECSに接続できないエラーが表示されていました。これを行うと、EC2インスタンスがECSクラスターに表示されます。

これを実行した後、EC2クラスターでEC2インスタンスを使用できるようにすることができます。 ここに画像の説明を入力してください

AWSのドキュメントでは、この部分はオプションであると述べていましたが、私の場合、この「オプション」の設定なしでは機能しませんでした。


2

クラスターの作成後にこの問題に遭遇した場合

EC2インスタンスリストでECSインスタンスに移動し、インスタンスに割り当てたIAMロールを確認します。次で始まるインスタンス名でインスタンスを簡単に識別できますECS Instance

ここに画像の説明を入力してください

その後、IAMロールをクリックすると、IAMコンソールに移動します。を選択AmazonEC2ContainerServiceforEC2Role権限ポリシーリストからポリシーを、ロールを保存します。

インスタンスは、保存するとすぐにクラスターで使用できるようになります。


1

本当の問題は許可の欠如です。AmazonEC2ContainerServiceforEC2Role権限を持つIAMロールを作成して割り当てる限り、問題はなくなります。


0

私が遭遇した別の考えられる原因は、ECSクラスターAMIを「Amazon Linux AMI」ではなく「Amazon Linux 2」AMIに更新して、EC2 user_data起動スクリプトが機能しなくなったことです。


0

これが発生した場合は、以下を確認する必要があります。

  1. EC2インスタンスには、AmazonEC2ContainerServiceforEC2Role管理ポリシーがアタッチされたロールが必要です
  2. EC2インスタンスは、AMIイメージを実行している必要があります。 ecs-optimized(これはEC2ダッシュボードで確認できます)
  3. VPCのプライベートサブネットにパブリックIPが割り当てられていない、またはインターフェイスVPCエンドポイントが構成されていない、またはNATゲートウェイが設定されていない

ほとんどの場合、この問題はVPCの設定ミスが原因で発生します。ドキュメントによると:

QUOTE:インターフェースVPCエンドポイントが構成されておらず、コンテナインスタンスにパブリックIPアドレスがない場合、このアクセスを提供するには、ネットワークアドレス変換(NAT)を使用する必要があります。

  • VPCエンドポイントを作成するには:こちらのドキュメントに従ってください
  • NATゲートウェイを作成するには:こちらのドキュメントに従ってください

これらが、ECSダッシュボードにEC2インスタンスが表示されない理由です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.