Amazon ECS で Application Load Balancer のヘルスチェックに合格するために、Amazon EC2 起動タイプを使用して Amazon ECS タスクを実行するにはどうすればよいですか?

最終更新日: 2020 年 11 月 12 日

Amazon Elastic Container Service (Amazon ECS) で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの Application Load Balancer ヘルスチェックが異常なステータスを返します。EC2 インスタンスをヘルスチェックに合格させたいと考えています。

簡単な説明

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

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

注意: ECS タスクは、さまざまな理由で異常なステータスを返すことがあります。次の手順で問題が解決しない場合は、サービスロードバランサーのトラブルシューティングを参照してください。

ヒント: ECS タスクが停止した原因を確認するには、停止したタスクのエラーを確認するを参照してください。

解決方法

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

ロードバランサーがヘルスチェックパスに HTTP GET リクエストを送信すると、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 に保存されます。BRIDGE ネットワークモードを使用している場合は、IP が返されます。AWSVPC または HOST ネットワークモードを使用する場合は、タスク ENI またはタスクが公開されるホストに割り当てられたタスク IP を使用します。

5.    ステータスコードを取得するには、IPADDR とローカルリスナーのポートを含む curl コマンドを実行します。

ヘルスチェックパスが /health であるポート 8080 でリッスンしているコンテナの以下の例を参照してください。

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

コマンドは 200 OK を返します。

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

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

ベストプラクティスとしては、ロードバランサーに 1 つのセキュリティグループ、コンテナインスタンスにもう 1 つのセキュリティグループを設定します。このベストプラクティスに従って、ロードバランサーとコンテナインスタンス間のすべてのトラフィックを許可します。また、コンテナインスタンスが、タスクに対して指定されたホストポートでトラフィックを受け入れるようにします。

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

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

重要: 動的ポートマッピングを使用している場合、サービスはホストポートではなく、動的ポート (通常はポート 32768~65535) で公開されます。このため、コンテナインスタンスセキュリティグループが、ロードバランサーの受信ルールの一時ポート範囲をソースとして反映していることを確認します。

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

ターゲットグループのアドバンストヘルスチェック設定を行う

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

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

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

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

3.    [ポート] で、[トラフィックポート] を選択します。

注意: [上書き] を選択した場合は、指定したポートがタスクホストポートと一致することを確認します。

ロードバランサーがコンテナインスタンスと同じアベイラビリティーゾーンに設定されていることを確認します

ロードバランサーが設定されているアベイラビリティーゾーンを取得するには、次の手順を実行してください。

1.    Amazon EC2 コンソールを開きます。

2.    ナビゲーションペインの [ロードバランシング] セクションで、[ロードバランサー] を選択します。

3.    Amazon ECS サービスで使用しているロードバランサーを選択します。

4.    [説明] タブの [アベイラビリティーゾーン] フィールドで、表示されているアベイラビリティーゾーンを確認します。 

コンテナインスタンスが設定されているアベイラビリティーゾーンを確認するには、次の手順を実行します。

1.    Amazon EC2 コンソールを開きます。

2.    ナビゲーションペインの [Auto Scaling] セクションで、[Auto Scaling グループ] を選択します。 

3.    クラスターに関連付けられているコンテナインスタンス Auto Scaling グループを選択します。

4.    [詳細] タブの [ネットワーク] セクションで、表示されているアベイラビリティーゾーンが、ロードバランサーにリストされているアベイラビリティーゾーンと一致していることを確認します。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?