

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

# Elastic Beanstalk の概念を理解する
<a name="concepts"></a>

概念と用語に精通すると、Elastic Beanstalk でアプリケーションをデプロイするために必要な理解を得るのに役立ちます。

![\[Elastic Beanstalk アプリケーションとウェブ/ワーカー環境の関係を示す説明図。\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/aeb-overview.png)


## アプリケーション
<a name="concepts-application"></a>

Elastic Beanstalk *アプリケーション*は、*環境*、*バージョン*、*環境設定*などの Elastic Beanstalk コンポーネントのコンテナです。Elastic Beanstalk アプリケーション内で、コードの実行に関連するすべてのリソースを管理します。

## アプリケーションバージョン
<a name="concepts-version"></a>

Elastic Beanstalk では、*アプリケーションバージョン*とは、ウェブアプリケーションのデプロイ可能コードの特定のラベル付きイテレーションのことです。アプリケーションバージョンは、Java の WAR ファイルなどのデプロイ可能コードが含まれている Amazon Simple Storage Service（Amazon S3）オブジェクトを指します。

アプリケーションバージョンはアプリケーションの一部です。アプリケーションは多数のバージョンを持つことができ、各アプリケーションバージョンは一意です。実行中の環境では、アプリケーションに既にアップロードしてあるアプリケーションバージョンをデプロイしたり、新しいアプリケーションバージョンをアップロードしてすぐにデプロイしたりできます。例えば、複数のアプリケーションバージョンをアップロードして、それらの違いをテストできます。

## 環境
<a name="concepts-environment"></a>

*環境*は、アプリケーションバージョンを実行する AWS リソースのコレクションです。各環境が実行するのは一度に 1 つのアプリケーションバージョンだけですが、同じアプリケーションバージョンや複数の異なるアプリケーションバージョンを多数の環境で同時に実行できます。環境を作成すると、Elastic Beanstalk は、指定したアプリケーションバージョンを実行するために必要なリソースを AWS アカウントでプロビジョニングします。

## 環境階層
<a name="concepts-tier"></a>

Elastic Beanstalk 環境を起動したら、まず環境枠を選択します。環境枠は環境で実行するアプリケーションのタイプを指定し、それをサポートするために Elastic Beanstalk でプロビジョニングするリソースを決定します。HTTP リクエストを処理するアプリケーションは、[ウェブサーバー環境枠](concepts-webserver.md)で実行されます。Amazon Simple Queue Service (Amazon SQS) キューからタスクを取り出すバックエンド環境は、[ワーカー環境枠](concepts-worker.md)で実行されます。

## 環境設定
<a name="concepts-environmentconfig"></a>

 *環境設定*は、環境とその環境に関連付けられているリソースの動作を定義するパラメータと設定のコレクションを識別します。環境の設定を更新すると、(変更の種類に応じて) Elastic Beanstalk が自動的に既存のリソースを変更または削除し、新しいリソースをデプロイします。

## 保存された設定
<a name="concepts-configuration"></a>

*保存された設定* は、一意の環境設定を作成するための開始点として使用できるテンプレートです。保存済み設定を作成および変更し、Elastic Beanstalk コンソール、EB CLI、 AWS CLIまたは API を使用して環境に適用できます。API と は、保存された設定*を設定テンプレート*として AWS CLI 参照します。

## プラットフォーム
<a name="concepts-platform"></a>

*プラットフォーム*は、オペレーティングシステム、プログラミング言語ランタイム、ウェブサーバー、アプリケーションサーバー、および Elastic Beanstalk コンポーネントの組み合わせです。ウェブアプリケーションを設計し、プラットフォームをターゲットとします。Elastic Beanstalk は、アプリケーションを構築できるさまざまなプラットフォームを提供します。

詳細については、[Elastic Beanstalk プラットフォーム](concepts-all-platforms.md) を参照してください

# Elastic Beanstalk ウェブサーバー環境
<a name="concepts-webserver"></a>

次の図は、ウェブサーバー環境枠の Elastic Beanstalk アーキテクチャの例と、そのタイプの環境枠でのコンポーネントの連携を示しています。

![\[AWS Elastic Beanstalk ウェブサーバー階層のアーキテクチャ図。\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/aeb-architecture2.png)


環境はアプリケーションの中心です。この図では、環境は最上位の実線内に示されています。環境を作成すると、Elastic Beanstalk はアプリケーションの実行に必要なリソースをプロビジョニングします。環境用に作成された AWS リソースには、1 つの Elastic Load Balancer (図の ELB)、Auto Scaling グループ、1 つ以上の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが含まれます。

すべての環境に、ロードバランサーを指定する CNAME (URL) が含まれます。環境には、`myapp.us-west-2.elasticbeanstalk.com` などの URL があります。この URL は、[Amazon Route 53](https://aws.amazon.com/route53/) で CNAME レコードを使用することによって、`abcdef-123456.us-west-2.elb.amazonaws.com` のような別名の Elastic Load Balancing URL になります。[Amazon Route 53](https://aws.amazon.com/route53/) は、可用性と拡張性に優れたドメインネームシステム (DNS) ウェブサービスです。このサービスは、インフラストラクチャに対して安全で信頼できるルーティングを提供します。DNS プロバイダに登録したドメイン名は、CNAME にリクエストを転送します。

ロードバランサーは、Auto Scaling グループに属する Amazon EC2 インスタンスの前に配置されています Amazon EC2 Auto Scaling は、アプリケーションへの負荷の増大に対応するために追加の Amazon EC2 インスタンスを自動的に開始します。アプリケーションへの負荷が軽減されると、Amazon EC2 Auto Scaling はインスタンスを停止しますが、少なくとも 1 つのインスタンスは実行されたままです。

Amazon EC2 インスタンスで実行するソフトウェアスタックは、*コンテナタイプ*に応じて変わります。コンテナの種類によって、その環境に使用するインフラストラクチャのトポロジとソフトウェアスタックが定義されます。例えば、Apache Tomcat コンテナを含む Elastic Beanstalk 環境は、Amazon Linux オペレーティングシステム、Apache ウェブサーバー、および Apache Tomcat ソフトウェアを使用します。サポートされているコンテナタイプのリストについては、「[Elastic Beanstalk でサポートされているプラットフォーム](concepts.platforms.md)」を参照してください。これらのコンテナタイプのいずれかが、アプリケーションを実行する各 Amazon EC2 インスタンスによって使用されます。さらに、各 Amazon EC2 インスタンスでは、*ホストマネージャー (HM)* と呼ばれるソフトウェアコンポーネントも実行されます ホストマネージャーは以下を行います。
+ アプリケーションのデプロイ
+ イベントとメトリクスの収集と取得（コンソール、API、またはコマンドラインを使用）。
+ インスタンスレベルのイベントの生成
+ アプリケーションログファイルで重大エラーがないかどうかを監視
+ アプリケーションサーバーの監視
+ インスタンスコンポーネントへの修正プログラムの適用
+ アプリケーションのログファイルのローテーションと、Amazon S3 への公開

ホストマネージャーは、メトリクス、エラーとイベント、サーバーインスタンスのステータスをレポートします。これらの情報は、Elastic Beanstalk コンソール、API、CLI を通じて利用できます。

この図では、Amazon EC2 インスタンスが 1 つの*セキュリティグループ*に属しています。セキュリティグループは、インスタンスのファイアウォールのルールを定義します。デフォルトでは、Elastic Beanstalk によって 1 つのセキュリティグループが定義されます。この場合、全員がポート 80 (HTTP) を使用して接続できます。複数のセキュリティグループを定義することもできます。たとえば、データベースサーバーに対してセキュリティグループを定義できます。Amazon EC2 セキュリティグループの詳細、および Elastic Beanstalk アプリケーションに対してこのセキュリティグループを設定する方法については、「[EC2 セキュリティグループ](using-features.managing.ec2.console.md#using-features.managing.ec2.securitygroups)」を参照してください。

# Elastic Beanstalk ワーカー環境
<a name="concepts-worker"></a>

AWS ワーカー環境階層用に作成された リソースには、Auto Scaling グループ、1 つ以上の Amazon EC2 インスタンス、IAM ロールが含まれます。また、ワーカー環境枠で Amazon SQS キューがない場合、Elastic Beanstalk によって Amazon SQS キューが作成され、プロビジョニングされます。ワーカー環境を起動すると、選択したプログラミング言語に必要なサポートファイルとデーモンが、Elastic Beanstalk によって Auto Scaling グループの各 EC2 インスタンスにインストールされます。デーモンは Amazon SQS キューからのメッセージを読み取ります。デーモンは、読み取る各メッセージから処理のためにワーカーアプリケーションを実行しているウェブアプリケーションにデータを送信します。ワーカー環境に複数のインスタンスがある場合、各インスタンスに独自のデーモンがありますが、読み取りはすべて同じ Amazon SQS キューからです。

次の図は、さまざまなコンポーネントと、環境と AWS サービス間の相互作用を示しています。

![\[AWS Elastic Beanstalk ワーカー階層アーキテクチャ図。\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/aeb-architecture_worker.png)


Amazon CloudWatch は、アラームとヘルスモニタリングに使用されます。詳細については、「[ベーシックヘルスレポート](using-features.healthstatus.md)」を参照してください。

ワーカー環境枠の仕組みの詳細については、「[Elastic Beanstalk ワーカー環境](using-features-managing-env-tiers.md)」を参照してください。

# Elastic Beanstalk アプリケーションの設計上の考慮事項
<a name="concepts.concepts.design"></a>

を使用してデプロイされたアプリケーションは AWS クラウド リソースで AWS Elastic Beanstalk 実行されるため、アプリケーションを最適化するには、*スケーラビリティ*、*セキュリティ*、*永続的ストレージ*、耐*障害性*、*コンテンツ配信*、*ソフトウェアの更新とパッチ適用*、*接続*など、いくつかの設定要素に留意する必要があります。このトピックでは、これらのそれぞれについて個別に説明します。アーキテクチャ、セキュリティ、経済などのトピックを網羅した技術 AWS ホワイトペーパーの包括的なリストについては、[AWS 「クラウドコンピューティングホワイトペーパー](https://aws.amazon.com/whitepapers/)」を参照してください。

## スケーラビリティ
<a name="concepts.concepts.design.scalability"></a>

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

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

また、必要に応じてスケールアウトすることができる耐障害性に優れた疎結合コンポーネントを使用して、すべての Elastic Beanstalk アプリケーションを可能な限り*ステートレス*に設計することをお勧めします。のスケーラブルなアプリケーションアーキテクチャの設計の詳細については AWS、[https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)」を参照してください。

## セキュリティ
<a name="concepts.concepts.design.security"></a>

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

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

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

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

## 永続ストレージ
<a name="concepts.concepts.design.storage"></a>

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


| ストレージサービス | サービスのドキュメント | Elastic Beanstalk の統合 | 
| --- | --- | --- | 
| [Amazon S3](https://aws.amazon.com/s3/) | [Amazon Simple ストレージ Service ドキュメント](https://aws.amazon.com/documentation/s3/) | [Amazon S3 で Elastic Beanstalk を使用する](AWSHowTo.S3.md) | 
| [Amazon Elastic File System](https://aws.amazon.com/efs/) | [Amazon Elastic File System ドキュメント](https://aws.amazon.com/documentation/efs/) | [Amazon Elastic File System で Elastic Beanstalk を使用する](services-efs.md) | 
| [Amazon Elastic Block Store](https://aws.amazon.com/ebs/) |  [Amazon Elastic Block Store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) [特徴ガイド: Elastic Block Store](https://aws.amazon.com/articles/1667)  |  | 
| [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | [Amazon DynamoDB ドキュメント](https://aws.amazon.com/documentation/dynamodb/) | [Amazon DynamoDB で Elastic Beanstalk を使用する](AWSHowTo.dynamoDB.md) | 
| [Amazon Relational Database Service (RDS)](https://aws.amazon.com/rds/) | [Amazon Relational Database Service ドキュメント](https://aws.amazon.com/documentation/rds/) | [Amazon RDS で Elastic Beanstalk を使用する](AWSHowTo.RDS.md) | 

**注記**  
Elastic Beanstalk は EC2 インスタンス上のアプリケーションディレクトリの所有者としてセットアップするための *webapp* ユーザーを作成します。[2022年2月3日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-02-03-linux.html#release-2022-02-03-linux.changes) 以降にリリースされた Amazon Linux 2 プラットフォームバージョンの場合、Elastic Beanstalk は、新しい環境の *webapp* ユーザーに uid (ユーザー ID) と gid (グループ ID) の値 900 を割り当てます。これは、プラットフォームバージョンの更新後の既存の環境でも同じです。この方法により、*webapp* ユーザーは、永続的なファイルシステムストレージに一貫してアクセスできるようになります。  
別のユーザーまたはプロセスがすでに 900 を使用しているという可能性は低い状況では、オペレーティングシステムがデフォルトで *webapp* ユーザー uid と gid を別の値に設定します。Linux コマンドを実行する **id webapp** EC2 インスタンスで、*webapp* ユーザーに割り当てられている uid および gid 値を検証します。。

## 耐障害性
<a name="concepts.concepts.design.faulttolerance"></a>

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

## コンテンツ配信
<a name="concepts.concepts.design.cloudfront"></a>

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

## ソフトウェアの更新プログラムと修正プログラム
<a name="concepts.concepts.design.updates"></a>

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

## 接続
<a name="concepts.concepts.design.connectivity"></a>

デプロイを完了するには、環境内のインスタンスに 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 を使用する](vpc.md)」を参照してください。