AWSでElastic Load Balancingを自動スケーリングで使用して、必要に応じてスケールインおよびスケールアウトできるようにしています。
私たちのアプリケーションはいくつかの小さなアプリケーションで構成され、それらはすべて同じサブネットと同じVPCにあります。
ELBをアプリの1つと残りのアプリの間に配置したいと考えています。
問題は、ロードバランサーがAPIを使用して異なるアプリ間で内部で動作することと、アプリケーションがinternet-facingで動作することです。 APIを介さずに外部で行う必要のある使用法がまだあります。
私はこれを読んだ question だが、そこからそれを行う方法を正確に理解できなかった、それは実際にはステップを特定していないか、多分私はそれをよく理解していた。
内部と外部の両方のELBを使用できますか?
記録のために、私はVPNを介してのみこのネットワークにアクセスできます。
Elastic Load BalancerがパブリックIPアドレスとプライベートIPアドレスの両方を持つことはできません。それはどちらか一方ですが、両方ではありません。
ELBにプライベートIPアドレスを持たせたい場合は、ELBはインターネットからのリクエストをリッスンできません。
ELBがパブリックに面している場合でも、パブリックエンドポイントを使用して内部EC2インスタンスからELBを呼び出すことができます。ただし、これにはいくつかの注意事項があります。
3つの代替シナリオがあります。
@MattHouserの回答に同意しません。実際、VPCでは、ELBのすべての内部インターフェイスが、パブリックIPおよびプライマリプライベートIPを使用するネットワークインターフェイスにリストされています。私は自分のパブリックELBのプライベートIPをテストしましたが、外部IPとまったく同じように機能します。
問題は、これらのIPがプライベートELB DNSのような最新の方法でリストされていないことです。だから自分でやらなければならない。
内部にRoute53ホストゾーンを使用して、これに小さなPOCスクリプトを作成しました: https://Gist.github.com/darylounet/3c6253c60b7dc52da927b80a0ae8d428
ロードバランサーに設定されているプライベートIPを確認し、変更時にRoute53レコードを更新するLambda関数を作成しました: https://github.com/Bramzor/lambda-sync-private-elb-ips
この機能を使用すると、ELBを簡単にプライベートトラフィックに使用できます。私は個人的には、追加のELBを必要とせずに、VPCリージョン間ピアリングを介して複数のリージョンを相互に接続するために使用しています。
標準のAWSソリューションは、このために追加の内部ELBを用意することです。 @DaryLには興味深い回避策があるようですが、DNSが更新されていないと5分間失敗する可能性があります。また、ELBの外部IPのENIとセキュリティを共有するため、内部IPに個別のセキュリティグループを設定する方法はありません。
私は同じ課題に直面しましたが、これまでのところ最良の解決策は、2つの異なるALB、1つはインターネット向け、もう1つは内部向けであることを確認できます。同じクラスターにアクセスできるように、両方のALBを単一のAutoScalingグループにアタッチできます。
両方が同じクラスターインスタンスにアクセスするためには、両方のALBのネットワークオプション(サブネット、セキュリティグループ)が同じであることを確認してください。自動スケーリングと起動構成は、同じAutoSaclingグループに接続された両方のALBでシームレスに機能します。これは、ElasticBeanstalk環境から作成されたALBでも機能します。