Jieling が Bridge モード使用中に
ECS でヘルスチェック問題が発生した場合の
トラブルシューティングをお手伝いします

Jieling_Thumbnail

Amazon ECS コンテナにおけるインスタンスに対する Application Load Balancer ヘルスチェックで、ステータスが異常であると返されました。どのようにトラブルシューティングすべきでしょうか?

ロードバランサーのヘルスチェックがルーティングの設定の指示どおりに設定されている場合は、以下のポイントが当てはまるか確認します。

  • ロードバランサーがヘルスチェックパスに HTTP GET リクエストを送信するときに、ECS コンテナのアプリケーションが正しいレスポンスコード (デフォルトでは "200 OK") を返します。
  • ロードバランサーのセキュリティグループまたはコンテナインスタンスが適切に設定されています。
  • ターゲットグループのアドバンストヘルスチェックが適切に設定されています。

ヘルスチェックに合格するには、デフォルトではロードバランサーがアプリケーションに HTTP GET リクエストを送信するときに、アプリケーションサーバーが "200 OK" を返す必要があります。

注意: Application Load Balancer の使用中は、Matcher 設定を更新して想定されるレスポンスコードを 200 以外のものに変更できます。詳細に関しては、ターゲットグループのヘルスチェックをご覧ください。

アプリケーションが想定どおりに動作しているか確認するには、SSH を使用してコンテナインスタンスにログインし、以下のステップに従って手動でチェックを実施します。

1.   (オプション) curl をインストールします (インストールしていない場合)。

Amazon Linux およびほかの RPM ベースのディストリビューションに関しては、以下のコマンドを実行します。

sudo yum –y install curl

Ubuntu のような Debian ベースのシステムに関しては、以下のコマンドを実行します。

sudo apt-get install curl

2.   以下のコマンドを実行して、関連するコンテナのコンテナ ID を見つけます。

docker ps

[PORTS (ポート)] の直下に、"0.0.0.0:32768->80" と同じアウトプットを探します。そのアウトプットの太字で記述された部分に注目します。それが、ローカルリスナーのポートです。

3.   以下のコマンドを実行して、コンテナの IP アドレスを取得します。

$ docker inspect --format='{{.NetworkSettings.IPAddress}}' [container ID]

IP アドレスを書き留めます。

4.    以下のコマンドを実行します。container_ip はステップ 3 で取得した IP アドレスを、port はステップ 2 で書き留めたローカルリスナーのポートを意味します。

curl –v http://{containerip}:{port}

コマンドは "200 OK" (ユーザーが Application Load Balancer を使用中で、Matcher 設定を更新した場合には代わりに、ユーザーの任意のレスポンスコード) を返すはずです。

注意: "200 OK" レスポンスを返されなかった場合は、アプリケーションは HTTP トラフィックをリッスンしていません。

ロードバランサーおよびコンテナインスタンスにアタッチされたセキュリティグループを確認してください。

コンテナインスタンスおよびロードバランサーそれぞれに 1 つずつ、合わせて 2 つのセキュリティグループを設定するのがベストプラクティスです。コンテナインスタンスのホストポートが動的にアサインされているため、以下を確認します。

  • ロードバランサーに関連付けられたセキュリティグループが、バックエンドインスタンスに関連付けられたセキュリティグループへのすべてのアウトバウンドトラフィックを許可します。
  • バックエンドコンテナインスタンスに関連付けられたセキュリティグループが、ロードバランサーに関連付けられたセキュリティグループからポート 32768 ~ 65535 へのすべてのインバウンドトラフィックを許可します。

これでロードバランサーからバックエンドインスタンスへのすべてのトラフィックが許可され、バックエンドインスタンスが動的ホストポートマッピングの使用中に使われるエフェメラルポートの範囲内のトラフィックすべてを許可することになります。

注意: 動的ホストポートマッピングを使用しておらず、代わりにタスク定義でホストポートを宣言している場合は、セキュリティグループの設定がエフェメラルポートの範囲ではなく、ロードバランサーに関連付けられたセキュリティグループからバックエンドインスタンスに関連付けられたセキュリティグループへの宣言されたポートを許可しているか確認してください。

ロードバランサーのアドバンストヘルスチェックの設定を確認する

ヘルスチェックは必ずターゲットグループのヘルスチェックの指示に従って設定するとともに、以下の ECS 特有のポイントに特に注意してください。

  • [ターゲットグループ] は、[新しいターゲットグループ] を使用します。ECS はターゲットグループ内のコンテナの登録および登録解除を自動で実施するため、ターゲットグループを手動で追加しないでください。
  • [ポート] は、デフォルトの [トラフィックポート] を使用します。[上書き] を選択すると、ヘルスチェックトラフィックの誤ったルーティングの原因になります。

このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 12 月 15 日

更新: 2017 年 3 月 8 日