

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

# Beanstalk クラスター環境のネットワークの設定
<a name="configuring-cluster-networking"></a>

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

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

## 環境サブネット
<a name="configuring-cluster-networking-subnets"></a>

`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](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-shorthand.html)」を参照してください。

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

## トラフィックがアプリケーションに到達する方法
<a name="configuring-cluster-networking-lb-type"></a>

`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 を介してクラスターの外部からアクセスできません。同じクラスター上の他の環境でも、クラスター内のアドレスでアクセスできます。

## ロードバランサーのネットワーク設定
<a name="configuring-cluster-networking-alb"></a>

環境の 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
<a name="configuring-cluster-networking-listeners"></a>

`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` 環境にはロードバランサーがまったくないため、リスナーはありません。独自のロードバランサーを指定する場合、そのリスナー設定はユーザーが管理します。

## 所有しているロードバランサーの使用
<a name="configuring-cluster-networking-byo-alb"></a>

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

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

## ロードバランサーのない環境
<a name="configuring-cluster-networking-no-lb"></a>

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

計画すべき 2 つの結果:
+ リクエストレート、エラーレート、またはレイテンシーを報告するロードバランサーがないため、ロードバランサーのヘルスシグナルは適用されません。コンテナプローブとオブザーバビリティバックエンドを使用して、アプリケーションが動作しているかどうかを判断します。「[Beanstalk クラスター環境のモニタリング](monitoring-cluster-environments.md)」を参照してください。
+ 発信者は、次のセクションで説明するクラスター内アドレスで環境に到達します。

## 別の環境から 1 つの環境に対処する
<a name="configuring-cluster-networking-service-discovery"></a>

各 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 クラスターはデフォルトで共有クラスター上の環境間のトラフィックをブロックするため、名前は解決され、許可するまで接続は失敗します。「[環境が通信することを許可する](beanstalk-cluster-multi-tenancy.md#beanstalk-cluster-multi-tenancy-groups)」を参照してください。

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

## 作成時に選択する設定
<a name="configuring-cluster-networking-immutable"></a>

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