View a markdown version of this page

アプリケーションのステータスチェック - Amazon Elastic Compute Cloud

アプリケーションのステータスチェック

アプリケーションのステータスチェックは、Amazon EC2 で実行されているアプリケーションのパフォーマンスと状態をモニタリングするのに役立ちます。アプリケーションのステータスチェックを使用すると、設定可能なパスとポートを介してアプリケーションをモニタリングすることで、アプリケーションのヘルス障害を検出して対応できます。例えば、アプリケーションのステータスチェックを使用して、ウェブサーバーが想定したポートをリッスンし、新しい接続を受け入れていることを確認できます。

アプリケーションのステータスチェックは、設定可能なパスとポートでアプリケーションの HTTP および HTTPS レスポンスをモニタリングします。これらは 60 秒ごとに実行され、Amazon EC2 Auto Scaling と統合されるため、アプリケーションに障害があるインスタンスの置き換えを自動化できます。

アプリケーションのステータスチェックの仕組み

アプリケーションのステータスチェックは、インスタンスのネットワークポートでリッスンしているエンドポイントに HTTP または HTTPS リクエストを 60 秒ごとに送信します。AWS は、レスポンスコードを設定したステータスコードマッチャーと比較します。チェックは、連続して一定回数のリクエストが失敗した後に障害ありとマークされ、連続して一定回数のリクエストが成功した後に再び正常とマークされます。両方のカウントはデフォルトで 2 に設定され、設定可能です。詳細については、「評価しきい値」を参照してください。

注記

アプリケーションのステータスチェックは、ヘルスチェックリクエストを HTTP/2 経由で送信します。

HTTPS プロトコルチェックでは、サーバー証明書は検証されません。

再起動中、アプリケーションのステータスチェックは、オペレーティングシステムの再起動中にアプリケーションがヘルスチェックリクエストに応答できないため、インスタンスが再び利用可能になるまで失敗を報告します。

ネットワークアーキテクチャ

アプリケーションのステータスチェックは、Amazon EC2 アプリケーションステータスチェックサービスから発信されます。インスタンスに到達するために、AWS は VPC にマネージド Elastic Network Interface (ENI) を作成します。AWS は、インスタンスが関連付けられているソースサブネットとセキュリティグループの組み合わせごとに 1 つの ENI を作成します。AWS は、アプリケーションのステータスチェックで最初にその組み合わせが必要になったときにマネージド ENI を作成し、残りのアプリケーションステータスチェックで不要になった場合は削除します。マネージド ENI は、インスタンスの ENI 制限にはカウントされませんが、アベイラビリティーゾーンごとに適用されるアカウントのリージョンごとのネットワークインターフェイスクォータにはカウントされます。詳細については、「Amazon VPC クォータ」を参照してください。

デフォルトでは、Amazon EC2 は、この設定が利用可能になる前にマネージドリソースがなかったアカウントのコンソールおよび API リストオペレーションからこれらのマネージドネットワークインターフェイスを非表示にします。可視性を変更するには、「マネージドリソースの可視性設定」を参照してください。

AWS は、関連付けられたインスタンス間でソースサブネットとセキュリティグループの組み合わせごとに 1 つのマネージドネットワークインターフェイスを作成します。マネージドインターフェイスの数は、モニタリング対象インスタンスが使用する個別のサブネットとセキュリティグループの組み合わせの数に応じて増加します。モニタリング対象インスタンスを少数のサブネットとセキュリティグループの組み合わせに統合すると、マネージドインターフェイスの数が減少します。例えば、1 つのセキュリティグループを使用する 2 つのサブネットにまたがる 200 のインスタンスは、2 つのマネージドインターフェイスを生成します。これら 2 つのサブネット全体で 3 つのセキュリティグループを使用する同じ 200 個のインスタンスは、最大 6 つのマネージドインターフェイスを生成します。各インターフェイスは、1 つのサブネットとセキュリティグループの組み合わせに対応します。

アプリケーションのステータスチェックは、VPC 内のプライベートな視点からインスタンスに到達します。スコープは、インスタンスの IP アドレスのプロパティではなく、チェックの送信元を記述します。AWS は VPC 内のサブネットにマネージド ENI を作成し、プライベートネットワークパス経由でインスタンスに到達します。

AWS マネージドネットワークパスでは、ヘルスチェックトラフィックは、ターゲットインスタンス (またはローカルゾーンターゲットの親アベイラビリティーゾーン) と同じアベイラビリティーゾーン内の AWS マネージド Amazon EC2 インスタンスから発信されます。トラフィックは AWS 内部ネットワークを経由し、パブリックインターネットを経由しません。詳細については、Amazon Web Services ウェブサイトの「Amazon VPC のよくある質問」を参照してください。

カスタマーマネージドネットワークパスでは、ソースサブネットを選択すると、ターゲットとは異なるアベイラビリティーゾーンからチェックを実行できます。詳細については、「クロスアベイラビリティーゾーンのモニタリング」を参照してください。

AWS マネージドネットワークパスとカスタマーマネージドネットワークパス

アプリケーションのステータスチェックは、ヘルスチェック ENI のソースサブネットとセキュリティグループ、およびターゲットインスタンスの宛先サブネットとセキュリティグループを選択するユーザーを決定する 2 つのオンボーディングモードをサポートします。

AWS マネージドネットワークパス

AWS は、ヘルスチェック ENI の送信元サブネットとセキュリティグループ、およびターゲットインスタンスの送信先サブネットとセキュリティグループを選択します。

カスタマーマネージドネットワークパス

ヘルスチェック ENI の送信元サブネットとセキュリティグループ、およびターゲットインスタンスの送信先サブネットとセキュリティグループを指定します。

VPC に厳格なネットワークセグメンテーション、ファイアウォールルール、アプリケーションエンドポイントに到達できるソースを制限するコンプライアンス要件がある場合など、ヘルスチェックトラフィックの発信元となるサブネットとセキュリティグループを制御する必要がある場合は、カスタマーマネージドネットワークパスを使用します。

モードを選択するには、create コマンドに --health-check-paths パラメータを含めるか省略します。--health-check-paths パラメータを省略すると、AWS は送信元と送信先のサブネットとセキュリティグループ (AWS マネージドネットワークパス) を選択します。--health-check-paths パラメータを含める場合は、ユーザーがそれら (カスタマーマネージドネットワークパス) を管理します。

IP バージョン

各アプリケーションステータスチェックは、単一の IP バージョン (IPv4 または IPv6) に関連付けられます。IPv4 と IPv6 の両方でインスタンスをモニタリングするには、2 つの個別のアプリケーションステータスチェックを作成し、両方をインスタンスに関連付けます。

IPv4 と IPv6 の両方について、VPC 内からインスタンスに到達することを確認します。

ステータス値を確認する

個々のチェックは、以下のいずれかのステータスを報告します。

  • passed: チェックは正常に完了しました

  • failed: チェックに失敗しました。レスポンスには、アプリケーションから返される HTTP ステータスコードが含まれます。解釈と修復のガイダンスについては、「トラブルシューティング」を参照してください。

  • initializing: チェックはまだ最初の評価を完了していません

  • insufficient-data: チェックは結果を決定するのに十分なデータを受信しませんでした

  • not-applicable: チェックがインスタンスに関連付けられていません

インスタンスについて報告された全体的なアプリケーションステータスは、すべての個々のチェック結果を集計します。全体的なステータスは、以下のいずれかの値です。

  • ok: すべてのチェックに合格しました

  • impaired: 1 つ以上のチェックに失敗しました

  • initializing: 1 つ以上のチェックがまだ最初の評価を完了していません

  • insufficient-data: 1 つ以上のチェックでデータ不足が報告されます

  • not-applicable: 関連するすべてのアプリケーションステータスチェックは集約から除外されます

  • suppressed: インスタンスのアプリケーションステータスチェック評価は抑制されます

集約

各アプリケーションステータスチェックをインスタンスの全体的なステータスに含めるか除外するかをマークできます。デフォルトでは、チェックは included です。

included

このチェックはインスタンスの全体的なステータスに反映され、Amazon EC2 Auto Scaling によって使用されます。

excluded

チェックは個々のステータスを報告しますが、インスタンスの全体的なステータスには影響せず、Amazon EC2 Auto Scaling はそれを使用しません。この設定を使用して、全体的なステータスに影響を与えたり、Amazon EC2 Auto Scaling の置き換えをトリガーしたりすることなく、本番環境で新しいチェックを検証します。これは、既存の本番稼働ワークロードにチェックを追加するときに推奨されるワークフローです。「新しいアプリケーションステータスチェックのテスト」を参照してください。

アプリケーションステータスチェックの開始方法

前提条件

アプリケーションのステータスチェックを作成する前に、以下があることを確認してください。

  • モニタリングするインスタンスを持つ VPC。

  • 設定するポートと HTTP パスで HTTP または HTTPS リクエストに応答できる各インスタンスのアプリケーションエンドポイント。

  • アプリケーションのステータスチェックで使用されるソースセキュリティグループからのチェックポートでのインバウンドトラフィックを許可する各送信先インスタンスのセキュリティグループ。「セキュリティおよびアクセス許可」を参照してください。

ステップ 1: アプリケーションを設定する

チェックの作成時に指定するポートと HTTP パスで HTTP または HTTPS リクエストに応答するようにアプリケーションエンドポイントを設定します。ステータスコードマッチャーに含まれているレスポンスコードを返し、アプリケーションが正常であることを示します。

送信先インスタンスのセキュリティグループで、アプリケーションのステータスチェックで使用される送信元セキュリティグループからのインバウンドトラフィックがチェックポートで許可されていることを確認します。マネージドネットワークパスの場合、AWS はチェックの作成時にソースセキュリティグループを提供します。カスタマーマネージドネットワークパスでは、チェックを作成するときにソースセキュリティグループを指定します。

ステップ 2: チェック定義を作成する

AWS CLI を使用してアプリケーションのステータスチェックを作成します。

Console
  1. Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

  2. ナビゲーションペインの [インスタンス] で、[アプリケーションのステータスチェック] を選択します。

  3. [アプリケーションのステータスチェックの作成] を選択します。

  4. [ヘルスチェックロジック] で、以下を設定します。

    • [プロトコル]: [HTTP] または [HTTPS] を選択します。

    • [ポート]: アプリケーションがリッスンするポートを入力します。

    • [パス] (オプション): リクエストする HTTP パスを入力します。例: /healthcheck

    • [IP バージョン]: [IPv4] または [IPv6] を選択します。

    • [デバイスインデックス]: チェックするネットワークインターフェイスデバイスインデックス。デフォルトは 0 です。

  5. [コントロールとしきい値] で、[タイムアウト] を設定し、オプションで [ステータスコードマッチャー][失敗しきい値][成功しきい値][初期化猶予期間] を設定します。チェック間隔は 60 秒に固定されています。

  6. [集約] で、チェックをアプリケーション全体のステータスに反映させ、Amazon EC2 Auto Scaling を動作させる場合は [含まれています] を選択し、全体的なステータスに影響を与えずにチェックを報告する場合は [除外されています] を選択します。

  7. [ヘルスチェックパス] では、Amazon EC2 がインスタンスのサブネットにヘルスチェックネットワークインターフェイスを配置できるように [ネットワークパスを指定しない (推奨/デフォルト)] を選択したままにするか、[ネットワークパスを指定する (アドバンスド)] を選択して、ソースサブネット、セキュリティグループ、および送信先を自分で定義します。

  8. (オプション) [名前タグ] と他の [タグ] を追加します。

  9. [アプリケーションのステータスチェックの作成] を選択します。

AWS CLI

AWS マネージドネットワークパスを使用するには、--health-check-paths パラメータを省略し、AWS で送信元サブネットと送信先サブネット、およびセキュリティグループを選択します。

aws ec2 create-application-status-check \ --protocol https \ --port 443 \ --path "/health" \ --status-code-matcher "200"

カスタマーマネージドネットワークパスを使用するには、--health-check-paths パラメータを含めます。各ヘルスチェックパスには、ソース (ヘルスチェック ENI のサブネットとセキュリティグループ) と 1 つ以上の送信先 (ターゲットインスタンスのサブネットとセキュリティグループ) が含まれます。

aws ec2 create-application-status-check \ --protocol https \ --port 443 \ --path "/health" \ --status-code-matcher "200" \ --health-check-paths '[{"Source":{"SubnetId":"subnet-111","SecurityGroupId":"sg-aaa"},"Destinations":[{"SubnetId":"subnet-222","SecurityGroupId":"sg-bbb"}]}]'
ステップ 3: チェックをインスタンスに関連付ける

チェックを、インスタンス ID またはタグでモニタリングするインスタンスに関連付けます。

Console
  1. ナビゲーションペインの [インスタンス] で、[アプリケーションのステータスチェック] を選択し、チェックを選択します。

  2. [ステータスチェックの関連付けを管理] を選択し、[リソース ID による関連付けの管理] または [タグによる関連付けの管理] を選択します。

  3. Auto Scaling グループ内のすべてのインスタンスに関連付けるには、[タグによる関連付けの管理] を選択し、タグキーとして aws:autoscaling:groupName を入力し、値として Auto Scaling グループ名を入力します。

  4. 関連付ける を選択してください。

AWS CLI

インスタンス ID 別:

aws ec2 associate-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --instance-ids i-0123456789abcdef0

タグ別:

aws ec2 associate-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --target-tag-associations Key=Environment,Value=production

Auto Scaling グループ内のすべてのインスタンスに関連付けるには、aws:autoscaling:groupName システムタグを使用します。

aws ec2 associate-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --target-tag-associations Key=aws:autoscaling:groupName,Value=my-asg

関連付けオペレーションと関連付け解除オペレーションは、インスタンスごとの成功と失敗の結果を返します。一部のインスタンスを関連付けられない場合 (チェックが既に関連付けられている場合など)、それらのインスタンスは失敗した結果に理由と共に表示されます。

ステップ 4: 結果を表示する

インスタンスごとのアプリケーションのヘルスステータスを表示します。

Console
  1. Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

  2. ナビゲーションペインで、[インスタンス] を選択してください。

  3. インスタンスを選択し、[ステータスとアラーム] タブを選択します。

  4. [アプリケーションのステータスチェック] で、全体的なステータスと、関連する各チェックの個々のステータスを確認します。

AWS CLI
aws ec2 describe-application-status \ --instance-ids i-0123456789abcdef0

レスポンスには、アプリケーション全体のステータス、関連する各チェックのチェックステータス、失敗したチェックのアプリケーションから返された HTTP ステータスコードが含まれます。

レスポンスの例:

{ "ApplicationStatuses": [ { "InstanceId": "i-0123456789abcdef0", "ApplicationStatus": { "Status": "ok", "Details": [ { "ApplicationStatusCheckId": "asc-1234567890abcdef0", "Status": "passed", "Reason": { "Code": "ResponseCodeMatched", "StatusCode": 200, "Protocol": "HTTP" } } ] } } ] }

チェック定義 (インスタンスごとのステータスではなく) を表示するには、describe-application-status-checks を使用します。このコマンドは、プロトコル、ポート、HTTP パス、ステータスコードマッチャーの設定など、アプリケーションのステータスチェックの設定を返します。

設定オプション

アプリケーションのステータスチェックでは、いくつかの設定パラメータを使用できます。このセクションでは、パラメータ名から動作が自明でないパラメータについて説明します。パラメータと検証ルールの完全なリストについては、「Amazon EC2 API リファレンス」の「CreateApplicationStatusCheck」と「AssociateApplicationStatusCheck」を参照してください。

評価しきい値

FailureThreshold

チェックが障害とマークされるまでに連続して失敗したリクエストの数。デフォルト: 2。

SuccessThreshold

チェックが再び正常とマークされるまでに連続して成功したリクエストの数。デフォルト: 2。

Timeout

リクエストが失敗として記録されるまでにレスポンスを待機する秒数。強制タイムアウトとして適用されます。アプリケーションがこのウィンドウ内に応答しない場合、リクエストは最終的な応答に関係なく失敗として記録されます。デフォルト: 6。有効な範囲: 1~30。

起動猶予期間

InitializationGracePeriodSeconds

AWS がチェックの評価を開始するまでにインスタンスが起動してから待機する秒数。このパラメータを使用して、チェックが開始される前にアプリケーションがリッスンを開始する時間を確保します。猶予期間が短すぎる場合、Amazon EC2 Auto Scaling はアプリケーションの準備が整う前に新しいインスタンスを置き換えることがあります。デフォルト: 300。有効な範囲: 1~600。

IP スコープ

IpScope

アプリケーションのステータスチェックは private スコープを使用します。チェックは VPC 内から実行されます。IPv4 の場合、これはインスタンスのプライベート IP アドレスに対応します。IPv6 の場合、AWS はアドレスをパブリックまたはプライベートとして分類しません。チェックは任意の IPv6 アドレスを受け入れ、VPC 内から評価します。

デバイスインデックス

DeviceIndex

AWS がヘルスチェックについて評価するインスタンス上のネットワークデバイスのインデックス。インスタンスのプライマリネットワークデバイスがチェックしたいデバイスではない場合に変更します。デフォルト: 0。

集約、IP バージョン、ヘルスチェックパス (送信元サブネットと送信先サブネット、セキュリティグループ) については、このページの前半にある独自のセクションで説明します。

デフォルト設定

AWS マネージドネットワークパスでは、アプリケーションのステータスチェックは以下のデフォルトを使用します。

設定 デフォルト

チェック間隔

60 秒 (固定、設定不可)

失敗しきい値

連続 2 回の失敗

成功しきい値

連続 2 回の成功

タイムアウト

6 秒

ステータスコードマッチャー

200

HTTP パス

/

IP バージョン

IPv4

IP スコープ

プライベート

デバイスインデックス

0

初期化猶予期間

300 秒

集約

含まれる

ソースサブネットとセキュリティグループ

AWSによって管理されます

Amazon EC2 Auto Scaling の統合

Amazon EC2 Auto Scaling は、チェックが集計に含まれている限り、全体的なアプリケーションステータスが impaired と報告されるインスタンスを自動的に終了して置き換えます。アプリケーションのステータスチェックをグループ内のインスタンスに関連付ける以外に、Auto Scaling グループの設定は必要ありません。

Amazon EC2 Auto Scaling は、個々のチェックステータスではなく、インスタンスの全体的なステータスを使用します。excluded とマークされたチェックは、Amazon EC2 Auto Scaling アクションを実行しません。suppressed 状態のチェックは、Amazon EC2 Auto Scaling アクションを実行しません。

チェックの InitializationGracePeriodSeconds パラメータを使用して、アプリケーションのステータスチェックが開始される前に新しいインスタンスが起動するための時間を確保します。猶予期間が短すぎると、アプリケーションがトラフィックを処理する準備が整う前に、新しいインスタンスが終了して Amazon EC2 Auto Scaling に置き換えられる可能性があります。

チェックの InitializationGracePeriodSeconds は、インスタンスが起動してからチェックがアプリケーションの評価を開始するまでの時間を設定します。アプリケーションの起動時間をカバーするように設定し、アプリケーションの起動中にチェックが impaired をレポートしないようにします。Auto Scaling グループのヘルスチェックの猶予期間は別途設定されます。インスタンスがサービスに入ってから、Amazon EC2 Auto Scaling がヘルスチェックの失敗によりインスタンスを終了するまでの時間を設定します。

Amazon EC2 Auto Scaling でのヘルスチェックの仕組みに関する詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Auto Scaling グループのインスタンスのヘルスチェック」および「Auto Scaling グループでのアプリケーションステータスチェックの使用」を参照してください。

デプロイ、インプレースパッチ適用、置換の処理

デプロイ、インプレースパッチ適用、およびその他のメンテナンスオペレーションは、アプリケーションを一時的に停止または再起動することがあります。この間、アプリケーションはヘルスチェックリクエストに応答できないため、アプリケーションのステータスチェックは失敗を報告します。インスタンスが Auto Scaling グループにあり、アプリケーションのステータスチェックが集約に含まれている場合、中断が予想される場合でも、Amazon EC2 Auto Scaling はこれらのインスタンスを終了して置き換えることがあります。

オプション A: チェックを抑制する

期間がわかっている制限付きメンテナンスウィンドウには抑制を使用します。抑制はインスタンスレベルで適用されます。期間を指定するか、これを省略して、抑制を無効にするまでチェックを抑制します。

AWS CLI
aws ec2 enable-application-status-check-suppression \ --instance-ids i-0123456789abcdef0 \ --duration-seconds 3600

レスポンスは、インスタンスごとに、抑制の開始時刻と終了時刻を返します。部分的に成功する可能性があります。一部のインスタンスは抑制に失敗し、理由と共にレスポンスに表示される場合があります。

抑制ウィンドウの有効期限が切れる前にチェックを再開するには:

aws ec2 disable-application-status-check-suppression \ --instance-ids i-0123456789abcdef0

抑制されている間、インスタンスの全体的なアプリケーションステータスは suppressed を報告します。Amazon EC2 Auto Scaling は suppressed インスタンスでは動作しません。

オプション B: 集約からチェックを除外する

チェックで個々のステータスの評価とレポートを継続するが、全体的なステータスに影響を与えたり、Amazon EC2 Auto Scaling アクションをトリガーしたりしない場合は、チェックの集計設定を excluded に設定します。これは、新しいチェックバージョンをロールアウトしたり、置き換えのリスクを伴わずに変更を検証したり、テレメトリを運用に影響を与えずに継続したい場合など、存続期間の長いシナリオに役立ちます。

詳細については、「集約」を参照してください。

オプション C: チェックの関連付けを解除する

存続期間の長い削除または無期限の削除には、関連付け解除を使用します。

aws ec2 disassociate-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --instance-ids i-0123456789abcdef0

タグで関連付けた場合は、インスタンスからタグを削除して関連付けを解除します。関連付けを解除すると、インスタンスの全体的なアプリケーションステータスが not-applicable を報告します。

デプロイガイダンス

デプロイは、抑制を必要とする最も一般的なメンテナンスシナリオです。デプロイツールにデプロイ前フックとデプロイ後フックがある場合に抑制を使用すると、デプロイの開始前にチェックを抑制し、デプロイの完了後に抑制を無効にできます。

一般的なパターンは以下のとおりです。

  1. デプロイ前フックで、インスタンスの enable-application-status-check-suppression を、予想されるデプロイウィンドウをカバーする期間で呼び出します。

  2. デプロイを実行します。

  3. デプロイ後のフックで、インスタンスの disable-application-status-check-suppression を呼び出します。

デプロイツールにフックがない場合は、デプロイを呼び出す CI/CD パイプラインから抑制を行います。

新しいアプリケーションステータスチェックのテスト

新しいアプリケーションステータスチェックがインスタンスレベルのモニタリングに反映され始める前に、本番環境でそのチェックを検証できます。チェックを作成するときに集約設定を excluded に設定し、予想されるステータスと HTTP レスポンスコードがレポートされることを確認します。準備ができたら、設定を included に変更して、チェックがインスタンスの全体的なステータスに反映され、Amazon EC2 Auto Scaling と統合されるようにします。

  1. 集約設定を excluded に設定してチェックを作成します。

    aws ec2 create-application-status-check \ --protocol https \ --port 443 \ --path "/health" \ --status-code-matcher "200" \ --aggregation excluded
  2. チェックをテストインスタンスまたは本番稼働用フリートのサブセットに関連付けます。

  3. 少なくとも 2 つのチェック間隔 (約 2 分) 待ってから、チェックが初期評価を完了できるようにします。

  4. describe-application-status を使用して、予想されるステータスと HTTP レスポンスコードがチェックで報告されていることを確認します。

    aws ec2 describe-application-status \ --instance-ids i-0123456789abcdef0
  5. チェックが期待どおりにレポートされた場合は、集約設定を included に更新して、チェックがインスタンスの全体的なステータスに反映され、Amazon EC2 Auto Scaling アクションを実行するようにします。

    aws ec2 modify-application-status-check \ --application-status-check-id asc-1234567890abcdef0 \ --aggregation included

高度なネットワーキング

アプリケーションのステータスチェックは、指定した (または AWS がユーザーに代わって選択する) ソースサブネットとセキュリティグループのマネージド ENI から発信されます。単一ソース設定が提供するよりも高い可用性を必要とするワークロード、または Local Zones または Outposts で実行されるワークロードの場合は、以下のパターンを検討してください。

クロスアベイラビリティーゾーンのモニタリング

アベイラビリティーゾーンの冗長性については、複数のアベイラビリティーゾーンからヘルスチェックを実行できます。カスタマーマネージドネットワークパスでは、--health-check-paths パラメータを使用して、同じ送信先インスタンスに到達する 2 つの異なるアベイラビリティーゾーンにソースがあるヘルスチェックパスを定義します。2 つのアベイラビリティーゾーンからモニタリングすると、1 つのアベイラビリティーゾーンが使用できなくなっても、インスタンスのヘルスレポートが継続されます。

以下の例では、ソースが異なるアベイラビリティーゾーンにあり、どちらも同じ送信先インスタンスに到達する 2 つのヘルスチェックパスを持つチェックを作成します。

aws ec2 create-application-status-check \ --protocol https \ --port 443 \ --path "/health" \ --status-code-matcher "200" \ --health-check-paths '[{"Source":{"SubnetId":"subnet-source-az1","SecurityGroupId":"sg-healthcheck"},"Destinations":[{"SubnetId":"subnet-app-az1","SecurityGroupId":"sg-app"}]},{"Source":{"SubnetId":"subnet-source-az2","SecurityGroupId":"sg-healthcheck"},"Destinations":[{"SubnetId":"subnet-app-az2","SecurityGroupId":"sg-app"}]}]'

ローカルゾーン

AWS Local Zones で実行されているインスタンスの場合、マネージド Elastic Network Interface (ENI) は Local Zone ではなく親 AWS リージョンにあります。親リージョンとローカルゾーンインスタンス間のヘルスチェックトラフィックは、ローカルゾーンサービスリンクを経由するため、追加のデータ転送料金が発生する場合があります。

ベストプラクティス

  • そのインスタンスで実行されているアプリケーションのヘルスを反映するようにヘルスエンドポイントを設計します。エンドポイントがアプリケーション自体に基づいてヘルスを返すと、Amazon EC2 Auto Scaling は実際に障害のあるインスタンスのみを置き換えます。エンドポイントのレスポンスがデータベースやダウンストリームサービスなどの共有リソースにも依存している場合、そのリソースの問題により、一度に多くのインスタンスでチェックが失敗する可能性があります。これにより、フリート全体の置き換えがトリガーされる可能性があります。ヘルスチェックエンドポイントの記述に関するガイダンスについては、Amazon Builders' Library の「ヘルスチェックの実装」を参照してください。

  • 相関する障害から保護します。含まれているチェックにより、Amazon EC2 Auto Scaling の置き換えが実行されます。一度に多くのインスタンスで失敗するチェックは、置き換えの波をトリガーする可能性があります。Auto Scaling グループにインスタンスメンテナンスポリシーを設定して、同時に置き換えられるインスタンスの数を制限します。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「インスタンスメンテナンスポリシー」を参照してください。

  • 障害のあるインスタンスの数に関するアラーム。フリート全体の StatusCheckFailed_Application メトリクスに Amazon CloudWatch アラームを作成します。多くのインスタンスで突然増加する場合は、個々のインスタンスの障害ではなく共有された依存関係があることを示し、置き換えがカスケードする前に対応する時間を確保できます。詳細については、「アプリケーションのステータスチェックをモニタリングする」を参照してください。

  • ネットワークインターフェイスのクォータ内にとどまります。アプリケーションのステータスチェックは、リージョンごとのネットワークインターフェイスのクォータにカウントされるマネージドネットワークインターフェイスを作成します。AWS は、アベイラビリティーゾーンごとにこのクォータを適用します。増え続けるフリートがクォータに達しないように、使用状況をモニタリングします。クォータに達すると、AWS は新しいインターフェイスを作成できなくなります。関連するクォータアラームのガイダンスについては、「クォータ」を参照してください。

  • ステータスチェックのアクセス許可を変更制御として扱います。アプリケーションのステータスチェックを作成、変更、削除、関連付け、関連付け解除、および抑制する IAM アクションは、インスタンスの可用性に影響を与える可能性があります。これらのアクションによって、Amazon EC2 Auto Scaling の置き換えを実行する要因が決まります。ec2:CreateApplicationStatusCheckec2:AssociateApplicationStatusCheckec2:ModifyApplicationStatusCheckec2:EnableApplicationStatusCheckSuppression などのアクションは、一般的な Amazon EC2 アクセスの一部として付与するのではなく、変更管理として扱います。アクションの完全なリストについては、「Amazon EC2 API リファレンス」を参照してください。

トラブルシューティング

アプリケーションのステータスチェックで障害が報告されても、アプリケーションが正常であると予想される場合は、以下の点を確認してください。

  1. インスタンスの到達可能性。インスタンスのインスタンスとシステムのステータスチェックが ok であることを確認します。

  2. セキュリティグループのインバウンドルール。送信先インスタンスのセキュリティグループは、アプリケーションのステータスチェックで使用される送信元セキュリティグループからのインバウンドトラフィックを、チェックポートで許可する必要があります。AWS マネージドネットワークパスの場合、AWS はソースセキュリティグループを提供します。カスタマーマネージドネットワークパスの場合、ソースとして指定したセキュリティグループを使用します。

  3. ホストファイアウォール。インスタンス上のホストレベルのファイアウォール (iptables、Windows Firewall、サードパーティーのホストファイアウォール) は、チェックポートでのインバウンドトラフィックを許可する必要があります。

  4. アプリケーションエンドポイント。アプリケーションは、設定したポートとパスをリッスンしている必要があります。インスタンス (curl http://localhost:PORT/PATH) からのローカルリクエストで確認します。

  5. プロトコルの不一致。チェックが HTTPS として設定されていても、エンドポイントが HTTP のみを提供する場合 (またはその逆の場合)、すべての呼び出しは失敗します。

  6. ステータスコードマッチャー。アプリケーションの実際のレスポンスコードが、設定したステータスコードマッチャーに含まれていることを確認します。

  7. ネットワークパス。カスタマーマネージドネットワークパスを設定した場合は、送信元サブネットとセキュリティグループが送信先サブネットに接続されていることを確認します。VPC Reachability Analyzer を使用してネットワークパスをトレースします。

  8. 使用可能な ENI クォータ。 AWS は、ソースサブネットとセキュリティグループの組み合わせごとに、アカウントにマネージド Elastic Network Interface (ENI) を作成します。アカウントが、アベイラビリティーゾーンごとに適用されるリージョンあたりのネットワークインターフェイスのクォータに達していないことを確認します。アカウントがこのクォータに達した場合、AWS はマネージド ENI を作成できず、チェックを実行できません。詳細については、「Amazon VPC クォータ」を参照してください。

理由コード

describe-application-status レスポンスには、各チェックの理由が含まれます。理由には、アプリケーションによって返される HTTP ステータスコード (数値) と、チェックに使用されるプロトコルが含まれます。返されたステータスコードがステータスコードマッチャーに含まれている場合はチェックが passed とマークされ、含まれていない場合は failed とマークされます。

理由には、理由コードと、HTTP レベルの結果の場合はプロトコルと返された HTTP ステータスコードも含まれます。理由には、以下のフィールドが含まれています。

Code

アプリケーションステータスチェック結果の理由コード。次のいずれかの値になります。

  • ResponseCodeMatched: ヘルスチェックによって返された HTTP ステータスコードが、設定された StatusCodeMatcher と一致しました。

  • ResponseCodeMismatch: ヘルスチェックによって返された HTTP ステータスコードが、設定された StatusCodeMatcher と一致しませんでした。

  • ConnectionTimeout: ターゲットへの接続がタイムアウトしました。

  • ResponseTimeout: ターゲットからのレスポンスを待っている間にヘルスチェックがタイムアウトしました。

  • ConnectionRefused: ターゲットはヘルスチェック接続を拒否しました。

  • ConnectionReset: ヘルスチェック接続は、レスポンスを受信する前にリセットされました。

ResponseCodeMatched および ResponseCodeMismatch の場合、StatusCode フィールドには返された HTTP ステータスコードが含まれ、Protocol フィールドにはヘルスチェックに使用されるプロトコルが含まれます。ConnectionTimeoutResponseTimeoutConnectionRefusedConnectionReset などの接続エラーの場合、StatusCode および Protocol フィールドは存在しません。

Protocol

ヘルスチェックに使用するプロトコル。HTTPHTTPS のいずれか。

StatusCode

ヘルスチェックによって返される HTTP ステータスコード。

返された HTTP ステータスコードを使用して、チェックが失敗した理由を特定します。一般的な例をいくつか示します。

HTTP ステータスコード 一般的な意味 一般的な対処

200

アプリケーションが正常なレスポンスを返しました。

なし。これは通常、正常なステータスです。

301, 302

アプリケーションがリダイレクトを返しました。ヘルスチェック呼び出しはリダイレクトに従いません。

リダイレクトの送信先にヘルスチェックパスをポイントするか、正常であると判断した場合はステータスコードマッチャーにリダイレクトコードを追加します。

401, 403

アプリケーションには認証が必要であるか、ヘルスチェックパスへのアクセスが拒否されています。

認証されないようにヘルスチェックパスを設定するか、認証情報を必要としないパスでヘルスチェックを提供します。

404

設定されたヘルスチェックパスがアプリケーションに見つかりませんでした。

パスがアプリケーションで提供されるルートと一致することを確認します。

500

アプリケーションが内部サーバーエラーを返しました。

インスタンスのアプリケーションログを調査します。

502, 503, 504

アプリケーションは到達可能ですが、アップストリームまたは容量の問題が報告されています。

アプリケーションのヘルス、依存関係、容量を調査します。アプリケーションが起動時にこれらのコードを返す場合は、InitializationGracePeriodSeconds を増やします。

完全な ApplicationStatusReason 構造については、「Amazon EC2 API リファレンス」の「ApplicationStatusReason」を参照してください。

よくある問題

  • セキュリティグループで、ヘルスチェックソースからチェックポートへのインバウンドトラフィックが許可されていない。

  • アプリケーションが 127.0.0.1 にバインドされ、ネットワークインターフェイスでリッスンしていない。

  • ヘルスチェックパスが、成功レスポンスではなくリダイレクト (301、302) を返し、ステータスコードマッチャーにリダイレクトコードが含まれていない。

  • チェックが HTTPS 用に設定されているが、アプリケーションが HTTP のみを提供している、またはその逆になっている。

  • アプリケーションの起動に InitializationGracePeriodSeconds の値よりも時間がかかり、準備が完了する前に Amazon EC2 Auto Scaling がインスタンスを置き換えている。

アプリケーションのステータスチェックをモニタリングする

アプリケーションのステータスチェックは、以下の 3 つの方法でモニタリングできます。

  • Amazon CloudWatch () StatusCheckFailed_Application メトリクスは、インスタンスの全体的なアプリケーションステータスを反映し、アラームを発生させることができます。メトリクスは、集約設定が included である関連するチェック全体でインスタンスごとに集約されます。CloudWatch は、StatusCheckFailed_Application_application-status-check-id という名前の関連する各チェックのチェックごとのメトリクスも発行します。

  • describe-instance-status。インスタンスの他のステータス情報と共にアプリケーション全体のステータスを返します。

  • describe-application-status。関連付けられた各チェックの個々のステータスとアプリケーションから返された HTTP ステータスコードを含む、インスタンスごとの詳細な結果を返します。

アラームによる自動化には CloudWatch メトリクスを使用します。インスタンスのステータスを既にクエリしている場合は describe-instance-status を使用します。チェックごとの詳細な可視性を確認するには describe-application-status を使用します。

セキュリティおよびアクセス許可

AWS は、サービスにリンクされたロールを通じてアプリケーションのステータスチェックに使用されるネットワークインターフェイスを作成および管理します。サービスがこれらの ENI を作成するために IAM のセットアップは必要ありません。サービスにリンクされたロールは、EC2ApplicationStatusChecksServiceRolePolicy AWS マネージドポリシーを使用します。

アプリケーションのステータスチェックを自分で作成、関連付け、記述、削除、および抑制するには、IAM ユーザーまたはロールに対応する Amazon EC2 アクセス許可が必要です。アクションの完全なリストについては、「Amazon EC2 API リファレンス」を参照してください。

インスタンスのセキュリティグループは、設定したポートでヘルスチェックソースセキュリティグループからのインバウンドトラフィックを許可する必要があります。AWS マネージドネットワークパスでは、AWS はソースセキュリティグループを提供します。カスタマーマネージドネットワークパスでは、ソースとして指定したセキュリティグループを使用します。

料金

アプリケーションのステータスチェックは、以下のコンポーネントで請求されます。

  • アベイラビリティーゾーンごとに、マネージド Elastic Network Interface (ENI) ごとに 0.01 USD の時間料金がかかります。

  • Amazon CloudWatch の標準料金は、アプリケーションのステータスチェックメトリクスに適用されます。

クォータ

アプリケーションのステータスチェックは、AWS サービスクォータの対象となります。クォータ名、デフォルト値、および説明については、「AWS 一般的なリファレンス」の「Amazon EC2 エンドポイントとクォータ」を参照してください。

マネージドネットワークインターフェイスに影響する AWS サービスクォータに加えて、アプリケーションのステータスチェックには以下のサービスクォータがあります。使用状況の確認とクォータの引き上げリクエストは、Service Quotas コンソールで行えます。

これらのクォータでは、ターゲットは 1 つのヘルスチェックがモニタリングする 1 つのインスタンスです。複数のヘルスチェックがインスタンスをモニタリングする場合、各インスタンスとヘルスチェックのペアは個別のターゲットとしてカウントされます。関連付けは、ヘルスチェックに関連付ける単一のタグルールまたは単一のインスタンス ID です。各ルールまたはインスタンス ID は、解決されるインスタンスの数に関係なく、1 つの関連付けとしてカウントされます。

クォータ デフォルト 引き上げ可能

アカウントあたりのヘルスチェック

50

はい、自動的に

ヘルスチェックあたりの関連付け

50

はい、自動的に

アカウントあたりの関連付け

200

はい、自動的に

アカウントあたりのターゲット数

5,000

はい、リクエストにより

ほとんどのクォータの増加は、自動的に承認されます。アカウントあたりのターゲット数を増やすには、リクエストと手動承認が必要です。

重要

アカウント内のターゲット数がアカウントあたりのターゲット数のクォータを超える場合、制限を超えるターゲットはモニタリングされず、アプリケーションのステータスは報告されません。モニタリングのギャップを回避するには、ターゲット数をクォータ内に維持するか、引き上げをリクエストします。

クォータに達する前に通知されるように、アプリケーションステータスチェックのクォータ使用状況に Amazon CloudWatch アラームを作成することをお勧めします。Service Quotas は AWS/Usage 名前空間の使用状況メトリクスを CloudWatch に発行します。これを使用してアラームを作成できます。