Amazon VPC で Elastic Beanstalk を使用する - AWS Elastic Beanstalk

Amazon VPC で Elastic Beanstalk を使用する

Amazon Virtual Private Cloud (Amazon VPC) を使用して、Elastic Beanstalk アプリケーションおよび関連する AWS リソース用の安全なネットワークを作成できます。環境作成時に、アプリケーションインスタンスとロードバランサーに使用する VPC、サブネットおよびセキュリティグループを選択します。以下の要件を満たしている限り、どの VPC 設定でも使用できます。

VPC の要件

  • インターネットアクセス – インスタンスは、次のいずれかのメソッドを介したインターネットアクセスを持つことができます。

    • パブリックサブネット – インスタンスにはパブリック IP アドレスがあり、インターネットゲートウェイを使用してインターネットにアクセスします。

    • プライベートサブネット – インスタンスは NAT デバイスを使用してインターネットにアクセスします。

    注記

    elasticbeanstalkelasticbeanstalk-healthd のサービスの両方に接続するように VPC の VPC エンドポイント を設定する場合、インターネットアクセスはオプションであり、アプリケーションで特に必要な場合にのみ要求されます。VPC エンドポイントがない場合、VPC でインターネットにアクセスできる必要があります。

    Elastic Beanstalk がセットアップするデフォルトの VPC では、インターネットアクセスが提供されます。

    Elastic Beanstalk は、ウェブプロキシの設定に HTTPS_PROXY のようなプロキシ設定をサポートしていません。

  • NTP – Elastic Beanstalk 環境内のインスタンスでは、Network Time Protocol (NTP) を使用してシステムクロックを同期させます。インスタンスが UDP ポート 123 上で通信できない場合は、クロックが同期しなくなり、Elastic Beanstalk ヘルスレポートに問題が発生することがあります。これらの問題を回避するには、VPC のセキュリティグループとネットワーク ACL で、ポート 123 上のインバウンドとアウトバウンドの UDP トラフィックを許可していることを確認してください。

elastic-beanstalk-samples レポジトリには、Elastic Beanstalk 環境で使用する VPC を作成するために利用できる AWS CloudFormation テンプレートが用意されています。

AWS CloudFormation テンプレートでリソースを作成するには

  1. サンプルリポジトリをクローンするか、または README にあるリンクを使用してテンプレートをダウンロードします。

  2. AWS CloudFormation コンソールを開きます。

  3. [Create stack] を選択します。

  4. テンプレートを Amazon S3 にアップロード を選択します。

  5. ファイルのアップロード を選択し、ローカルマシンからテンプレートファイルをアップロードします。

  6. 次へ を選択し、手順どおりにテンプレート内のリソースでスタックを作成します。

スタックの作成が完了したら、[出力] タブを確認して VPC ID およびサブネット ID を探します。これらを使用して、新規の環境ウィザードネットワーク設定カテゴリで VPC を設定します。

パブリック VPC

AWS CloudFormation テンプレートvpc-public.yam

設定 (ロードバランサー)

  • ロードバランサーの可視性 – 公開

  • ロードバランサーのサブネット – どちらもパブリックサブネット

  • インスタンスのパブリック IP – 有効

  • インスタンスのサブネット – どちらもパブリックサブネット

  • インスタンスのセキュリティグループ – デフォルトのセキュリティグループを追加

設定 (単一インスタンス)

  • インスタンスのサブネット – どちらかのパブリックサブネット

  • インスタンスのセキュリティグループ – デフォルトのセキュリティグループを追加

基本的な パブリックのみ の VPC レイアウトには、1 つ以上のパブリックサブネット、1 つのインターネットゲートウェイ、VPC 内のリソース間でのトラフィックを許可するデフォルトの 1 つのセキュリティグループが含まれています。VPC で環境を作成すると、Elastic Beanstalk は環境タイプによって異なる追加のリソースを作成します。

VPC リソース

  • 単一インスタンス – Elastic Beanstalk は、インターネットからポート 80 へのトラフィックを許可するセキュリティグループをアプリケーションインスタンスに作成し、Elastic IP をそのインスタンスに割り当てて、パブリック IP アドレスを付与します。環境のドメイン名はインスタンスのパブリック IP アドレスを解決します。

  • 負荷分散 – Elastic Beanstalk は、インターネットからポート 80 へのトラフィックを許可するセキュリティグループ、およびロードバランサーのセキュリティグループからのトラフィックを許可するセキュリティグループをアプリケーションインスタンスに作成します。環境のドメイン名は、ロードバランサーのパブリックドメイン名を解決します。

これは、デフォルト VPC を使用する場合に Elastic Beanstalk がネットワークを管理する方法と類似しています。パブリックサブネットのセキュリティは、Elastic Beanstalk が作成するロードバランサーとインスタンスのセキュリティグループに依存します。これには NAT ゲートウェイが必要ではないため、最もコストが低い設定です。

パブリック/プライベート VPC

AWS CloudFormation テンプレートvpc-privatepublic.yaml

設定 (ロードバランサー)

  • ロードバランサーの可視性 – 公開

  • ロードバランサーのサブネット – どちらもパブリックサブネット

  • インスタンスのパブリック IP – 無効

  • インスタンスのサブネット – どちらもプライベートサブネット

  • インスタンスのセキュリティグループ – デフォルトのセキュリティグループを追加

セキュリティを高めるには、追加のプライベートサブネットを VPC に追加して、パブリック/プライベートレイアウトを作成します。このレイアウトではパブリックサブネットのロードバランサーおよび NAT ゲートウェイが必要であり、プライベートサブネットでアプリケーションインスタンス、データベースや他のリソースを実行することができるようになります。プライベートサブネットのインスタンスは、ロードバランサーおよび NAT ゲートウェイを介したインターネットのみと通信できます。

プライベート VPC

AWS CloudFormation テンプレートvpc-private.yaml

設定 (ロードバランサー)

  • ロードバランサーの可視性 – プライベート

  • ロードバランサーサブネット – 両方のプライベートサブネット

  • インスタンスのパブリック IP – 無効

  • インスタンスのサブネット – どちらもプライベートサブネット

  • インスタンスのセキュリティグループ – デフォルトのセキュリティグループを追加

インターネットからのアクセスを希望しない内部アプリケーションについては、すべてをプライベートサブネットで実行し、ロードバランサーを内部用に設定します ([ロードバランサーの可視性] を [内部] に変更します)。このテンプレートは、パブリックサブネットとインターネットゲートウェイを持たない VPC を作成します。このレイアウトは、同じ VPC あるいはアタッチされた VPN からのみアクセスできる必要があるアプリケーションに使用します。

プライベート VPC で Elastic Beanstalk 環境を実行する

プライベート VPC で Elastic Beanstalk 環境を作成する場合、その環境ではインターネットにアクセスできません。アプリケーションは、Elastic Beanstalk サービスまたはその他のサービスへのアクセスを必要とする場合があります。環境で拡張ヘルスレポートを使用する場合があります。この場合、環境インスタンスによって拡張ヘルスサービスにヘルス情報が送信されます。また、環境インスタンスの Elastic Beanstalk コードは、トラフィックを他の AWS のサービスに送信し、その他のトラフィックを非 AWS エンドポイントに送信します (アプリケーションの依存関係パッケージをダウンロードする場合など)。ここでは、環境が正しく動作するようにするため、この場合に実行する必要がある手順をいくつか示します。

  • Elastic Beanstalk の VPC エンドポイントを設定する – Elastic Beanstalk および拡張ヘルスサービスは、VPC エンドポイントをサポートします。これにより、これらのサービスへのトラフィックは Amazon ネットワーク内に留まり、インターネットアクセスが不要になります。詳細については、「VPC エンドポイントでの Elastic Beanstalk の使用」を参照してください。

  • 追加サービス用に VPC エンドポイントを設定する - Elastic Beanstalk インスタンスは、お客様に代わって、Amazon Simple Storage Service (Amazon S3)、Amazon Simple Queue Service (Amazon SQS)、AWS CloudFormation、Amazon CloudWatch Logs など、他の AWS のサービスにトラフィックを送信します。これらのサービスの VPC エンドポイントも設定する必要があります。サービスごとのリンクを含む VPC エンドポイントの詳細については、Amazon VPC ユーザーガイドの「VPC エンドポイント」を参照してください。

    注記

    Elastic Beanstalk を含む一部の AWS のサービスでは、VPC エンドポイントがサポートされる AWS リージョンは限られています。プライベート VPC ソリューションを設計する場合は、ここで説明する Elastic Beanstalk および他の依存するサービスが、選択した AWS リージョンの VPC エンドポイントをサポートしていることを確認します。

  • プライベート Docker イメージを提供するDocker 環境では、環境のインスタンスのコードが、環境の作成中にインターネットから設定済みの Docker イメージを取得しようとして失敗することがあります。この問題を回避するには、環境にカスタム Docker イメージをビルドするか、Amazon Elastic Container Registry (Amazon ECR) に保存された Docker イメージを使用して、Amazon ECR サービスの VPC エンドポイントを設定します

  • DNS 名を有効にする - 環境インスタンスの Elastic Beanstalk コードによって、パブリックエンドポイントを使用してすべての AWS のサービスにトラフィックが送信されます。このトラフィックを確実に通過させるには、すべてのインターフェイス VPC エンドポイントを設定する際に、[Enable DNS name (DNS 名を有効にする)] オプションを選択します。これにより、パブリックサービスエンドポイントをインターフェイス VPC エンドポイントにマップする DNS エントリが VPC に追加されます。

    重要

    VPC がプライベートではなく、パブリックインターネットにアクセスできる場合、および VPC エンドポイントで [Enable DNS name (DNS 名を有効にする)] が無効になっている場合は、それぞれのサービスへのトラフィックはパブリックインターネットを経由します。これは意図した動作ではない場合があります。プライベート VPC でこの問題を検出するのは簡単です。トラフィックが通過するのを防ぎ、エラーを受信できるためです。ただし、パブリック向け VPC では何も表示されません。

  • アプリケーションの依存関係を含める – アプリケーションに言語ランタイムパッケージなどの依存関係がある場合、環境の作成中にインターネットからダウンロードおよびインストールしようとして失敗する可能性があります。このエラーを回避するには、アプリケーションのソースバンドルにすべての依存関係パッケージを含めます。

  • 現在のプラットフォームバージョンを使用する – ご使用の環境で、2020 年 2 月 24 日以降にリリースされたプラットフォームバージョンが使用されていることを確認してください。具体的には、Linux 更新プログラム 2020-02-28Windows 更新プログラム 2020-02-24 の 2 つの更新プログラムのいずれか後にリリースされたプラットフォームのバージョンを使用します。

    注記

    プラットフォームのバージョンを更新する必要がある理由は、古いバージョンに [Enable DNS name (DNS 名を有効にする)] オプションで作成された DNS エントリが Amazon SQS で正しく機能しないという問題があったためです。