翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 を使用したブルー/グリーンデプロイ」を参照してください。