設計上の考慮事項 - AWS Elastic Beanstalk

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

設計上の考慮事項

AWS Elastic Beanstalk を使用してデプロイされたアプリケーションは AWS クラウド リソースで実行されるため、アプリケーションを最適化するには、スケーラビリティセキュリティ永続的ストレージ耐障害性コンテンツ配信ソフトウェアのアップデートとパッチの適用、および接続性について考慮する必要があります。このトピックでは、これらのそれぞれについて個別に説明します。アーキテクチャ、セキュリティ、エコノミクスなどのトピックが記載されている技術的な AWS ホワイトペーパーの包括的なリストについては、AWSクラウドコンピューティング・ホワイトペーパーを参照してください。

スケーラビリティ

物理ハードウェア環境で作業する場合は、クラウド環境とは対照的に、2 つの方法のいずれかでスケーラビリティにアプローチできます。垂直スケーリングでスケールアップすることも、水平スケーリングを使用してスケールアウトすることもできます。スケールアップアプローチでは、ビジネスの需要の高まりをサポートできる強力なハードウェアに投資する必要があります。スケールアウトアプローチでは、分散型の投資モデルに従う必要があります。そのため、ハードウェアとアプリケーションの取得でよりターゲットを絞れるようになり、データセットをフェデレーションしたり、設計をサービス指向にすることができます。スケールアップアプローチは非常に高くつく可能性があるにもかかわらず、需要が容量を超えてしまうというリスクは依然として存在します。この点で、スケールアウトアプローチは通常、より効果的です。ただし、これを使用する場合は、一定の間隔で需要を予測し、その需要を満たすようにインフラストラクチャをチャンクに展開できる必要があります。その結果、このアプローチでは余剰容量が発生することがよくあるため、注意深くモニタリングする必要があります。

クラウドに移行することで、クラウドの伸縮性を利用して、需要に合わせてインフラストラクチャを作成できます。伸縮性は、リソースの取得とリリースを合理化するのに役立ちます。これにより、需要の増減に合わせてインフラストラクチャを迅速にスケールイン/スケールアウトできるようになります。これを使用するには、環境内のリソースからのメトリクスに基づいてスケールアップまたはスケールダウンするように、Auto Scaling 設定を行います。たとえば、サーバー使用率やネットワーク I/O などのメトリクスを設定できます。Auto Scaling を使用すると、使用量が増加するたびにコンピューティングキャパシティが自動的に追加され、使用量が減少するたびに削除できます。システムメトリクス (CPU、メモリ、ディスク I/O、ネットワーク I/O など) を Amazon CloudWatch に発行できます。次に、CloudWatch を使用して Auto Scaling アクションをトリガーしたり、これらのメトリクスに基づいて通知を送信したりするアラームを設定できます。Auto Scaling を設定する方法については、Elastic Beanstalk 環境用の Auto Scaling グループ を参照してください。

また、必要に応じてスケールアウトすることができる耐障害性に優れた疎結合コンポーネントを使用して、すべての Elastic Beanstalk アプリケーションを可能な限りステートレスに設計することをお勧めします。AWSのスケーラブルなアプリケーションアーキテクチャ設計の詳細については、AWSWell-Architected フレームワークを参照してください。

セキュリティ

AWS のセキュリティは責任共有です。Amazon Web Services は、お客様の環境の物理リソースを保護し、クラウドがお客様のアプリケーションを実行するための安全な場所であることを保証します。お客様の Elastic Beanstalk 環境で送受信されるデータのセキュリティおよびお客様のアプリケーションのセキュリティに対しては、お客様に責任があります。

アプリケーションとクライアントの間で流れる情報を保護するため、SSL を設定します。SSL を設定するには、AWS Certificate Manager (ACM) からの無料の証明書が必要です。外部証明機関 (CA) からの証明書がすでにある場合は、ACM を使用し、ACM を使用してその証明書をインポートできます。それ以外の場合は、AWS CLI を使用してそれをインポートできます。

ACM がAWS リージョン で使用できない場合は、VeriSign や Entrust などの外部 CA から証明書を購入できます。その場合、AWS Command Line Interface (AWS CLI) を使用して、AWS Identity and Access Management (IAM) にサードパーティーの証明書または自己署名証明書とプライベートキーをアップロードしてください。証明書の公開キーにより、ブラウザに対してサーバーが認証されます。また、公開キーは、双方向のデータを暗号化する共有セッションキーを作成するための基盤となります。SSL 証明書の作成、アップロード、および環境に割り当てる方法については、Elastic Beanstalk 環境の HTTPS の設定 を参照してください。

環境に SSL 証明書を設定する場合、クライアントとお客様の環境の Elastic Load Balancing ロードバランサーの間でデータが暗号化されます。デフォルトでは、暗号化はロードバランサーで終了し、ロードバランサーと Amazon EC2 インスタンス間のトラフィックは暗号化されません。

永続的ストレージ

Elastic Beanstalk アプリケーションは、永続的ローカルストレージがない Amazon EC2 インスタンスで実行されます。Amazon EC2 インスタンスが終了した場合、ローカルファイルシステムは保存されません。新しい Amazon EC2 インスタンスは、デフォルトのファイルシステムから始まります。永続的データソースにデータを保存するようアプリケーションを設定することをお勧めします。AWS には、アプリケーションに使用できる複数の永続的ストレージサービスが用意されています。以下の表にそれらの設定を示します。

注記

Elastic Beanstalk は EC2 インスタンス上のアプリケーションディレクトリの所有者としてセットアップするための webapp ユーザーを作成します。2022年2月3日 以降にリリースされた Amazon Linux 2 プラットフォームバージョンの場合、Elastic Beanstalk は、新しい環境の webapp ユーザーに uid (ユーザー ID) と gid (グループ ID) の値 900 を割り当てます。これは、プラットフォームバージョンの更新後の既存の環境でも同じです。この方法により、webapp ユーザーは、永続的なファイルシステムストレージに一貫してアクセスできるようになります。

別のユーザーまたはプロセスがすでに 900 を使用しているという可能性は低い状況では、オペレーティングシステムがデフォルトで webapp ユーザー uid と gid を別の値に設定します。Linux コマンドを実行する id webapp EC2 インスタンスで、webapp ユーザーに割り当てられている uid および gid 値を検証します。。

耐障害性

簡単に言うと、クラウドでのアーキテクチャ設計は、悪いことを想定しながら行うことをお勧めします。それが提供する伸縮性を活用。いつも故障から自動回復できるように設計、実行、およびデプロイしてください。Amazon EC2 インスタンスおよび Amazon RDS については、複数のアベイラビリティーゾーンを使用します。アベイラビリティーゾーンは概念的には論理データセンターに似ています。Amazon CloudWatch は、Elastic Beanstalk アプリケーションのヘルスを詳しく確認するときに使用してください。これにより、ハードウェア障害やパフォーマンス低下が発生した場合に適切な措置を講じることができます。問題のある Amazon EC2 インスタンスを新しいインスタンスに置き換えられるように、一連の Amazon EC2 インスタンスのサイズを一定に保ちながら維持するには、Auto Scaling を設定します。Amazon RDS を使用してバックアップの保存期間を設定すると、Amazon RDS によって自動バックアップを実行できます。

コンテンツ配信

ユーザーがウェブサイトに接続している場合、そのユーザーのリクエストは複数の個別のネットワークを介してルーティングされる可能性があります。その結果、レイテンシーが増え、パフォーマンスが低下することがあります。Amazon CloudFront は、世界各地に設置されたエッジロケーションのネットワークを介して画像や動画などウェブコンテンツを配信することで、こうしたレイテンシーの問題を改善します。ユーザーのリクエストがルーティングされるのは最寄りのエッジロケーションです。したがって、コンテンツは可能な限り最良のパフォーマンスで配信されます。CloudFront は、ファイルの元の最終バージョンをしっかりと保存する、Amazon S3 とシームレスに連携します。Amazon CloudFront の使用に関する詳細については、Amazon CloudFront デベロッパーガイドを参照してください。

ソフトウェアの更新プログラムと修正プログラム

AWS Elastic Beanstalk は定期的にプラットフォームの更新をリリースし、修正やソフトウェア更新、新機能を提供しています。Elastic Beanstalk は、プラットフォームの更新を処理するためのいくつかのオプションを提供しています。マネージドプラットフォーム更新機能により、アプリケーションが稼働している間、予定済みのメンテナンスウィンドウ中に、環境を自動的に最新バージョンのプラットフォームにアップグレードできます。Elastic Beanstalk コンソールを使用して 2019 年 11 月 25 日以降に作成された環境では、マネージドアップデートは可能な限りデフォルトで有効になります。Elastic Beanstalk コンソールまたは EB CLI を使用して、手動で更新を開始することもできます。

接続

デプロイを完了するには、環境内のインスタンスに Elastic Beanstalk が接続できる必要があります。Elastic Beanstalk アプリケーションを Amazon VPC 内にデプロイする場合、接続を有効にするために必要な設定は、作成する Amazon VPC 環境のタイプによって異なります。

  • 単一インスタンス環境では、追加の設定は必要ありません。これは、これらの環境では、Elastic Beanstalk によって各 Amazon EC2 インスタンスにパブリック Elastic IP アドレスが割り当てられ、これによりインスタンスが直接インターネットと通信できるようになるためです。

  • パブリックサブネットとプライベートサブネットの両方を備えた Amazon VPC 内の負荷分散されたスケーラブルな環境の場合、次の作業を行う必要があります。

    • インターネットから Amazon EC2 インスタンスへのインバウンドトラフィックをルーティングするロードバランサーをパブリックサブネットに作成します。

    • ネットワークアドレス変換 (NAT) デバイスを作成して、プライベートサブネットの Amazon EC2 インスタンスからインターネットにアウトバウンドトラフィックをルーティングします。

    • プライベートサブネット内の Amazon EC2 インスタンスのインバウンドおよびアウトバウンドルーティングルールを作成します。

    • NAT インスタンスを使用している場合は、NAT インスタンスと Amazon EC2 インスタンスのセキュリティグループを設定して、インターネット通信を有効にします。

  • Amazon VPC 内の負荷分散されたスケーラブルな環境で、パブリックサブネットが 1 つある場合は、追加の設定は必要ありません。これは、この環境では、Amazon EC2 インスタンスがパブリック IP アドレスで設定され、これによりインスタンスがインターネットと通信できるようになるからです。

Amazon VPC で Elastic Beanstalk を使用する方法については、「Amazon VPC で Elastic Beanstalk を使用する」を参照してください。