AWSでは、ELBを使用して、複数のアプリケーションをホストするEC2インスタンスの負荷を分散させたいと考えています。理想的には、アプリケーションのヘルスチェックが必要です。
ただし、AWS Elastic Load Balancerでは現在、ヘルスチェックのために1つの場所のみにpingを実行できます。
各EC2インスタンスにデプロイされた複数のアプリケーションの状態を考慮したELBでヘルスチェックを実装する最良の方法は何でしょうか?
AWSでは、ELBを使用して、複数のアプリケーションをホストするEC2インスタンスの負荷を分散させたいと考えています。理想的には、アプリケーションのヘルスチェックが必要です。
ただし、AWS Elastic Load Balancerでは現在、ヘルスチェックのために1つの場所のみにpingを実行できます。
各EC2インスタンスにデプロイされた複数のアプリケーションの状態を考慮したELBでヘルスチェックを実装する最良の方法は何でしょうか?
回答:
これを解決する2つの方法があります。
最初のオプションは、ホストにオンラインを維持することをロジックが指示している場合、ヘルスを検証し、HTTP 200をELBに返す別のヘルスチェックをホストに追加することです。もちろん、そこにあるロジックはあなた次第です。ここでの欠点は、App 2が一部のホストに正常に展開された場合、すべてのホストが依然として「正常」であり、トラフィックを受信していることです。
別のオプションは、アプリケーションごとに追加のELBを使用することです。複数のELBを同じバックエンドEC2インスタンスに向けることができ、そのためのコストはごくわずかです。これにより、アプリケーションごとにヘルスチェックを行い、オールオアナッシングアプローチではなく、アプリケーションごとのレベルで問題のあるホストを削除できます。
編集:これは古い回答であり、ALBではなくELBに固有のものであることに注意してください。ALBは、1つのホスト上の個別のターゲットをネイティブにサポートします。
ここでは、アプリごとに1つのELBを使用する方法を説明します。
まず、各アプリケーションが独自のドメイン上にあり、SSLをサポートする必要がある場合、とにかくそれらが必要になる場合があります。Amazon ELBでは現在、ドメインごとに1つのSSL証明書のみが許可されており、SSL対応ドメインごとに個別のELBが必要です。(ワイルドカードSSL証明書は例外です)。
ここでの課題は、ELBヘルスチェックが現在EC2インスタンスでホストされている特定の仮想ドメインに向けられないことです。(「Host:」ヘッダーは送信されません)。ELBヘルスpingは、ブラウザにEC2インスタンスのIPアドレスをロードしたかのように、常にデフォルトドメインに送信されます。そのため、デフォルトドメインでヘルスチェックを受信し、特定のアプリケーションのヘルスステータスを返信するには、何らかの接着剤が必要です。
Nginx server
ディレクティブに追加できる実用的な設定例を次に示します。負荷分散される各EC2インスタンスにインストールされます。
# This goes in the `server` block noted by 'default_server', often /etc/nginx/sites-enabled/default
# All AWS Health Checks from the ELBs arrive at the default server.
# Forward these requests on the appropriate configuration on this host.
location /health-check/ {
rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
# Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
# which would not be considered successful.
proxy_set_header X-Forwarded-Proto 'https';
proxy_set_header "Host" $domain;
proxy_pass http://127.0.0.1;
}
「first-application.com」のELBの「ヘルスチェック」設定で、「HTTP」とポート80を選択し、次のようなパスを入力します。
/health-check/first-application.com
上記のNginx構成がホストで実行されている場合、要求はデフォルトドメインで受信され、https: //first-application.com/api/v1/statusの同じホスト上のNginx構成からの応答をプロキシします。
このアプローチでは、Nginxにアプリごとの構成はありません。各アプリに一意のドメイン名がある限り、アプリごとに適切にELBを設定する必要があります。
2016年8月11日に、AmazonはApplication Load Balancerを導入しました。これらを使用すると、複数のターゲットグループを指定でき、それぞれに独自の種類のヘルスチェックがあります。したがって、これは単一のロードバランサーを使用して可能になりました!