web-dev-qa-db-ja.com

各EC2インスタンスで実行されている複数のアプリケーションでELBヘルスチェックを設定するにはどうすればよいですか?

AWSでは、ELBを使用して、複数のアプリケーションをホストするEC2インスタンスの負荷を分散したいと考えています。理想的には、アプリケーションのヘルスチェックが必要です。

ただし、AWS Elastic Load Balancersは現在、ヘルスチェックのために1つの場所にのみpingを実行できます。

各EC2インスタンスにデプロイされた複数のアプリケーションの状態を考慮したELBでヘルスチェックを実装する最良の方法は何ですか?

11

これを解決するには2つの方法があります。

最初のオプションは、ヘルスを検証し、ロジックがホストをオンラインに維持することを希望している場合にHTTP 200をELBに返す、別のヘルスチェックをホストに追加することです。もちろん、そのロジックはあなた次第です。ここでの欠点は、一部のホストにApp 2が正常に展開された場合でも、すべてのホストが「正常」であり、トラフィックを受信して​​いることです。

別のオプションは、アプリケーションごとに追加のELBを使用することです。複数のELBを同じバックエンドEC2インスタンスにポイントすることができ、そのためのコストはごくわずかです。そうすることで、アプリケーションごとにヘルスチェックを行い、オールオアナッシングアプローチではなく、アプリケーションレベルで問題のあるホストをドロップできます。

編集:これは古い回答であり、ALBではなくELBに固有のものであることに注意してください。 ALBは、1つのホスト上の個別のターゲットをネイティブでサポートします。

10
Nathan V

ここでは、アプリごとに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構成がホストで実行されている場合、リクエストはデフォルトドメインで受信され、同じホストのNginx構成からの応答をプロキシします https://first-application.com/api/v1/ステータス

このアプローチでは、Nginxにアプリごとの構成はありません。各アプリに一意のドメイン名がある限り、各アプリのELBを適切に設定する必要があります。

7
Mark Stosberg

2016年8月11日、Amazonは Application Load Balancers を導入しました。これらにより、それぞれ独自のタイプのヘルスチェックを持つ複数のターゲットグループを指定できます。したがって、これは単一のロードバランサーを使用して可能になりました。

6
Thomas