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

Jieling_Thumbnail

Amazon Elastic Container Service (Amazon ECS) で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの Application Load Balancer ヘルスチェックが異常なステータスを返します。Amazon EC2 インスタンスをヘルスチェックに合格させるにはどのようにしたらよいですか?

Application Load Balancer のヘルスチェックに合格するには、以下を確認します。

  • Amazon ECS コンテナのアプリケーションが正しいレスポンスコードを返す。
  • ロードバランサーおよびコンテナインスタンスにアタッチされたセキュリティグループが、正しく設定されていることを確認する。
  • ターゲットグループのアドバンストヘルスチェックが正しく設定されている。

Amazon ECS コンテナのアプリケーションが正しいレスポンスコードを返すことを確認する

ロードバランサーがヘルスチェックパスに HTTP GET リクエストを送信するときに、Amazon ECS コンテナのアプリケーションはデフォルトの 200 OK レスポンスコードを返すはずです。

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

1.    SSH を使用してコンテナインスタンスに接続します。

2.    (オプション) システムに適したコマンドで curl をインストールします。

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

sudo yum –y install curl

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

sudo apt-get install curl

3.    コンテナ ID を取得するには、次のコマンドを実行します。

docker ps

注意: ローカルリスナーのポートは、PORTS の下のコマンド出力の矢印の後のシーケンスの最後に表示されます。

4.    コンテナの IP アドレスを取得するには、docker inspect コマンドを使用します。次の例を参照してください。

$ IPADDR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' aabbccddeeff)

注意: コンテナの IP アドレスは IPADDR に保存されます。

5.    ステータスコードを取得するには、IPADDR とローカルリスナーのポートを含む curl コマンドを実行します。ヘルスチェックパスが /health であり、ポート 8080 でリッスンしているコンテナについては、次の例を参照してください。

curl -v http://${IPADDR}:8080/health

注意: コマンドは、200 OK を返すはずです。non-HTTP エラーメッセージを受信する場合、アプリケーションは HTTP トラフィックをリスンしていません。Matcher 設定で指定したものとは異なる HTTP ステータスコードを受信する場合、アプリケーションはリスンしていますが、正常なターゲットのステータスコードを返していません。

ロードバランサーおよびコンテナインスタンスにアタッチされたセキュリティグループを正しく設定する

ベストプラクティスとしては、ロードバランサーに 1 つのセキュリティグループ、コンテナインスタンスにもう 1 つのセキュリティグループを設定します。このベストプラクティスに従うことで、ロードバランサーとコンテナインスタンス間のすべてのトラフィックを許可することになります。また、動的ホストポートマッピングに使用される一時的ポートの範囲で、コンテナインスタンスがトラフィックを受け入れるようにすることもできます。

1.    ロードバランサーに関連付けられたセキュリティグループが、コンテナインスタンスに関連付けられたセキュリティグループへのすべての送信トラフィックを許可することを確認します。

2.    コンテナインスタンスに関連付けられたセキュリティグループが、ロードバランサーに関連付けられたセキュリティグループから一時的ポートの範囲 (通常はポート 32768 ~ 65535) へのすべての送信トラフィックを許可することを確認します。

重要: タスク定義でホストポートを宣言すると、サービスは一時的ポート範囲ではなく、指定されたポートで公開されます。このため、セキュリティグループが一時的ポート範囲ではなく、指定したホストポートを反映していることを確認します。

ロードバランサーに関連付けられているセキュリティグループを確認するには、Application Load Balancer のセキュリティグループを参照してください。

ターゲットグループのアドバンストヘルスチェック設定を正しく設定する

アドバンストヘルスチェック設定を正しく設定するには、ターゲットグループのヘルスチェックを参照してください。アドバンストヘルスチェック設定を設定する際は、以下の手順に細心の注意を払ってください。

1.    Amazon EC2 コンソールを開き、[Target Groups] を選択してから、ターゲットグループを選択します。

重要: 必ず新しいターゲットグループを使用します。Amazon ECS はターゲットグループのコンテナの登録および登録解除を自動で実施するため、ターゲットグループにターゲットを手動で追加しないでください。

2.    [Health checks] ビューを選択します。

3.    [Port] で、[traffic port] を選択します。

注意: [Override] を選択すると、ヘルスチェックのトラフィックが正しくルーティングされません。


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

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

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

公開日: 2016 年 12 月 15 日

更新日: 2019 年 2 月 1 日