View a markdown version of this page

Beanstalk クラスター環境のネットワークの設定 - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Beanstalk クラスター環境のネットワークの設定

Beanstalk クラスターは、Amazon EKS クラスターで環境を実行します。選択したサブネットは、クラスターのノードが実行される場所を決定し、環境を実行するクラスターを決定するという 2 つのことを行います。サブネットを選択しない場合、Elastic Beanstalk はデフォルトの VPC のパブリックサブネットを使用します。

このトピックでは、環境のサブネット、クラスター外からトラフィックがアプリケーションに到達する方法、および環境がクラスター内で相互にどのように対処するかについて説明します。

環境サブネット

aws:elasticbeanstalk:eks:environment 名前空間の subnetsオプションをサブネット IDs のカンマ区切りリストに設定します。

サブネットはクラスターを選択するため、環境の作成時に設定します。

$ aws elasticbeanstalk create-environment \ --application-name my-app \ --environment-name my-cluster-env \ --option-settings '[{"Namespace":"aws:elasticbeanstalk:eks:environment","OptionName":"subnets","Value":"subnet-abc123,subnet-def456"}]'

設定は JSON として記述されます。サブネットリストにはカンマが含まれているため、短縮形は AWS CLI フィールド間の区切り文字として扱います。が AWS CLI 受け入れるフォームについては、の「短縮構文の使用 AWS CLI」を参照してください。

Elastic Beanstalk は、このサブネットセットによって環境をクラスターにグループ化するため、同じサブネットを使用する同じアカウントの環境は同じクラスターで実行され、異なるセットを使用する環境は別のクラスターで実行されます。サブネットの順序は関係ありません。グループ化ルールとクラスターの割り当てを報告するイベントについては、「」を参照してください環境のグループ化。

トラフィックがアプリケーションに到達する方法

aws:elasticbeanstalk:eks:environment 名前空間の load-balancer-typeオプションは、トラフィックがアプリケーションに到達する方法を選択します。次の 2 つの値を使用できます。

  • ALB、デフォルト。Elastic Beanstalk は、環境用の Application Load Balancer を作成して運用します。aws:elasticbeanstalk:eks:alb 名前空間を使用して設定することも、既に所有している Application Load Balancer を指定することもできます。

  • None。 Elastic Beanstalk はロードバランサーを作成しません。また、環境には Elastic Beanstalk を介してクラスターの外部からアクセスできません。同じクラスター上の他の環境でも、クラスター内のアドレスでアクセスできます。

ロードバランサーのネットワーク設定

環境の Application Load Balancer には、aws:elasticbeanstalk:eks:alb名前空間に独自のネットワーク設定があります。

オプション デフォルト 説明
subnets なし ロードバランサーのサブネットのカンマ区切りリスト。
scheme サブネットから派生 ロードバランサーがインターネットから到達可能かどうかは、 internet-facingまたは のいずれかですinternal。設定しない場合、Elastic Beanstalk は選択したサブネットから取得します。パブリックサブネットはインターネット向けロードバランサーを提供し、プライベートサブネットは内部サブネットを提供します。
security-groups なし ロードバランサーのセキュリティグループのカンマ区切りリスト。
manage-backend-security-group-rules true Elastic Beanstalk がロードバランサーとアプリケーション間のセキュリティグループルールを管理するかどうか。

リスナーと HTTPS

aws:elasticbeanstalk:eks:alb 名前空間の listen-portsオプションは、ロードバランサーのリスナーを、各プロトコルをポートにマッピングする JSON 配列として一覧表示します。たとえば、 です[{"HTTPS":443},{"HTTP":80}]。

Elastic Beanstalk は、ロードバランサーがどこかで HTTPS を終了することを確認します。

  • を設定しない場合listen-ports、Elastic Beanstalk はポート 443 で HTTPS リスナーを設定します。

  • を設定しlisten-ports、ポートに HTTPS リスナーがすでに含まれている場合、Elastic Beanstalk は設定を変更せずに設定を使用します。

  • HTTPS リスナーlisten-portsなしで を設定すると、Elastic Beanstalk はポート 443 に 1 つを追加します。ポート 443 が別のプロトコルを使用するリスナーによって既に取得されている場合、リクエストは失敗し、エラーはポート 443 を解放するか、別のポートに明示的な HTTPS リスナーを追加するように指示します。

ロードバランサーは、設定されているリスナーのみを開きます。デフォルト設定では、ポート 443 では HTTPS であり、ポート 80 では何もないため、 へのリクエストhttp://は接続されず、タイムアウトするまで待機します。環境の URL のhttps://後に環境の CNAME が続きます。 はスキームなしで CNAME DescribeEnvironmentsを返すため、開くhttps://ときに を追加します。

これを機能させるために証明書を指定しません。Elastic Beanstalk は、環境独自のドメインの AWS Certificate Manager (ACM) 証明書を作成し、HTTPS リスナーにアタッチして更新するため、ブラウザは設定なしで環境の CNAME を信頼します。Elastic Beanstalk は、環境ごとに 1 つの証明書を作成し、環境を終了するとそれを削除します。

独自のドメインから環境を提供するには、証明書の ARN を certificate-arnオプションに配置します。その後、ロードバランサーは Elastic Beanstalk が作成した証明書に加えて証明書を保持し、ユーザーの証明書の更新と削除は引き続きユーザーの責任となります。

HTTP リクエストを受け入れるには、HTTP リスナーを に追加listen-portsし、HTTPS リスナーのポートssl-redirectに設定します。Elastic Beanstalk は、HTTP リスナーに対するリクエストを HTTPS リスナーにリダイレクトします。HTTP リスナーがアプリケーショントラフィックを直接処理することはありません。 はリダイレクトターゲットの HTTPS ポートssl-redirectを選択し、設定しない場合、Elastic Beanstalk は HTTPS リスナーのポートを使用します。listen-ports 値自体は JSON ドキュメントであるため、コマンドラインに書き込むのではなく、 ファイルに設定を渡します。

$ cat listeners.json [ { "Namespace": "aws:elasticbeanstalk:eks:alb", "OptionName": "listen-ports", "Value": "[{\"HTTPS\":443},{\"HTTP\":80}]" }, { "Namespace": "aws:elasticbeanstalk:eks:alb", "OptionName": "ssl-redirect", "Value": "443" } ] $ aws elasticbeanstalk update-environment \ --environment-name my-cluster-env \ --option-settings file://listeners.json

を load-balancer-typeに設定する場合、または独自のロードバランサーに を提供する場合None、Elastic Beanstalk は HTTPS リスナーを追加しませんarn。None 環境にはロードバランサーがまったくないため、リスナーはありません。独自のロードバランサーを指定する場合、そのリスナー設定はユーザーが管理します。

所有しているロードバランサーの使用

既存のロードバランサーを環境の前に配置するには、aws:elasticbeanstalk:eks:alb名前空間の arnオプションを ARN に設定します。値は Application Load Balancer である必要があります。Elastic Beanstalk は Network Load Balancer の ARN を拒否します。

ロードバランサーを指定するときは、その設定、リスナー、TLS 証明書、スキームを所有します。Elastic Beanstalk はアプリケーションをターゲットとして登録し、ロードバランサーを環境のロードバランサーとしてレポートするため、Elastic Beanstalk が作成したロードバランサーではなく、指定したロードバランサーDescribeEnvironmentResourcesを返します。

ロードバランサーのない環境

load-balancer-type を に設定するとNone、Elastic Beanstalk は環境のロードバランサーを作成しず、ロードバランサーDescribeEnvironmentResourcesを報告しません。これは、内部 API や発信者が直接到達するワーカーなど、同じクラスター上の他の環境のみを提供する環境に使用します。

計画すべき 2 つの結果:

  • リクエストレート、エラーレート、またはレイテンシーを報告するロードバランサーがないため、ロードバランサーのヘルスシグナルは適用されません。コンテナプローブとオブザーバビリティバックエンドを使用して、アプリケーションが動作しているかどうかを判断します。「Beanstalk クラスター環境のモニタリング」を参照してください。

  • 発信者は、次のセクションで説明するクラスター内アドレスで環境に到達します。

別の環境から 1 つの環境に対処する

各 Beanstalk クラスター環境は、環境の名前から構築された予測可能なアドレスでクラスター内でアクセスできます。

service-environment-name.eb-environment-name.svc.cluster.local:service-port

ポートは環境の ですservice-port。Elastic Beanstalk は、 という名前の Kubernetes 名前空間で各環境を実行し、eb-その後に環境名が続きます。これはアドレスの 2 番目のラベルです。aws:elasticbeanstalk:eks:environment 名前空間の env-variablesオプションを使用して、アプリケーションに必要なアドレスを環境変数として渡します。

の値はそれ自体env-variablesが JSON ドキュメントであるため、コマンドラインではなく ファイルでオプション設定を渡します。次を options.json として保存します。

[ { "Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "env-variables", "Value": "{\"NOTIFIER_URL\":\"http://service-my-notifier.eb-my-notifier.svc.cluster.local:8080\"}" } ]

次に、適用します。

$ aws elasticbeanstalk update-environment \ --environment-name my-frontend \ --option-settings file://options.json

このアドレス指定は、同じクラスターで実行される環境間でのみ機能します。つまり、同じサブネットを使用する環境です。アドレスの解決は、接続が許可されているのと同じではありません。Beanstalk クラスターはデフォルトで共有クラスター上の環境間のトラフィックをブロックするため、名前は解決され、許可するまで接続は失敗します。「環境が通信することを許可する」を参照してください。

注記

アドレスには環境名が含まれているため、別の環境がアドレスを指定する前に、環境の名前を知る必要があります。作成する前に、 が相互に呼び出す一連の環境の名前を計画します。

作成時に選択する設定

環境のサブネットはクラスターを選択するため、作成後に変更することはできません。クラスター、ノード、オブザーバビリティロールにも同じことが当てはまります。別のサブネットでアプリケーションを実行するには、必要なサブネットを使用して新しい環境を作成し、2 つの環境 CNAMEs。「Elastic Beanstalk を使用したブルー/グリーンデプロイ」を参照してください。