web-dev-qa-db-ja.com

AWS ECSエラー:ターゲットグループでタスクがELBヘルスチェックに失敗しました

クラウド形成テンプレートを使用してインフラストラクチャ(ECSファーゲートクラスター)を構築しています。テンプレートが正常に実行され、スタックが正常に作成されました。ただし、タスクは次のエラーで失敗しました:

Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:eu-central-1:890543041640:targetgroup/prc-service-devTargetGroup/97e3566c8b307abf)

問題をトラブルシューティングするために、これをどこで、どこで探すべきかわかりません。ファーゲートクラスタであるため、コンテナにログインしてヘルスチェッククエリを実行してさらにデバッグする方法がわかりません。

誰かがこれについてさらに案内して私を助けるのを助けてくれますか?このエラーが原因で、自分のWebアプリにアクセスできません。 ALBは、トラフィックが正常でない場合、トラフィックをルーティングしません。

私がしたこと

いくつかグーグルした後、私はこの投稿を見つけました: https://aws.Amazon.com/premiumsupport/knowledge-center/troubleshoot-unhealthy-checks-ecs/

ただし、これはfargateのEC2互換性に関連していると思います。しかし、私の場合、EC2はありません。

必要に応じて、テンプレート全体を貼り付けることもできます。

助けてください

13
user2315104

ECSサービスとロードバランサーターゲットグループの間のセキュリティグループがHTTPおよびHTTPSトラフィックのみを許可していたため、このエラーメッセージが表示されました。

どうやらヘルスチェックは、セキュリティグループを更新してすべてのポートですべてのトラフィックを許可するときに、他のいくつかのポートまたはプロトコルで行われます( https://docs.aws.Amazon.com/AmazonECS/latest/userguide/ create-application-load-balancer.html )がヘルスチェックを機能させました。

1
tschumann

上記のtschumannで述べたように、ECSクラスターの周りのセキュリティグループを確認します。 Terraformを使用している場合は、以下のようなものを使用して、すべてのDocker一時ポートへの進入を許可します。

resource "aws_security_group" "ecs_sg" {
  name    = "ecs_security_group"
  vpc_id  = "${data.aws_vpc.vpc.id}"

}

resource "aws_security_group_rule" "ingress_docker_ports" {
  type              = "ingress"
  from_port         = 32768
  to_port           = 61000
  protocol          = "-1"
  cidr_blocks       = ["${data.aws_vpc.vpc.cidr_block}"]
  security_group_id = "${aws_security_group.ecs_sg.id}"
}
0

私はこれとまったく同じ問題を抱えていました。私は問題を回避することができました:

  1. eC2サービスに移動する
  2. 次に、サイドパネルで[ターゲットグループ]を選択します
  3. ロードバランサーのターゲットグループを選択します
  4. ヘルスチェックタブを選択します
  5. eC2インスタンスのヘルスチェックがターゲットグループのヘルスチェックと同じであることを確認してください。これにより、ヘルスチェックを実行するときに、ELBにトラフィックをこのエンドポイントにルーティングするよう指示します。私の場合、私のヘルスチェックパスは/ healthでした。
0
Ryan Forte

この問題には、開いているポートだけでなく、さまざまな考えられる理由がかなりあります。

  • EcsServiceRole IAMロールの不適切なIAM権限
  • コンテナーインスタンスセキュリティグループElastic Load Balancing load
  • すべてのバランサーが構成されていません可用性ゾーンElastic Load
  • ロードバランサーの分散ヘルスチェックの誤構成
  • サービスservicenameをupdateできません:タスク定義でロードバランサーコンテナー名またはポートが変更されました

したがって、AWSはこのエラーの可能性に対処するために独自のウェブサイトを作成しました。

https://docs.aws.Amazon.com/en_en/AmazonECS/latest/developerguide/troubleshoot-service-load-balancers.html

編集:私の場合、私のアプリケーションのヘルスチェックコードが異なっていました。デフォルトは200ですが、200〜499などの範囲を追加することもできます。

0
Rene B.