AWS Elastic Beanstalkの特徴（AWSでWEBアプリケーションを最速で稼動させるサービスの説明）

# はじめに
AWS Elastic Beanstalkの特徴を説明したいと思います。

最初にこの記事のまとめを・・・

**AWS Elastic BeanstalkはAWSが提供するサービスのひとつで、インフラ系の知識がなくとも簡単にアプリケーションを稼働させるサービス**

「ローカルで実行できるアプリケーションを今すぐAWSで実行したい！！」と思っても簡単にはいかないと思います。
クラウドのインフラ知識やセキュリティ知識が必要です。何より時間もかかります。
それがわずか数クリックで実現出来てしまう凄いサービスなんです。
手軽さ以外にも、こんな特徴があります。

- パッチ適用は意識しなくても良い。
- Java、C#、Node.js、PHP、Ruby、Python、Goといった一般的な開発言語をサポートしている。
- ヘルスチェックやCPU使用率の監視といった一般的なモニタリングが行える。
- アプリケーションを自動的にスケールするように設定出来る。
- 使用したAWSリソースに対しての料金はかかるがAWS Elastic Beanstalkの追加料金は発生しない。

それでは詳しく説明したいと思います。

# AWS Elastic Beanstalkの概要
AWSが提供するサービスのひとつで、インフラ系の知識がなくとも簡単にアプリケーションを稼働させるサービスです。
利用者はアプリケーションを作成し、Elastic Beanstalkにアップロードするだけで自動的に実行に必要なAWSリソース（EC2、S3等）が作成され環境構築が完了します。
ちなみにElastic Beanstalkは**エラスティック ビーンストーク**と読みます。

AWS Elastic Beanstalkの公式紹介動画です。日本語字幕付きです。

https://youtu.be/e2W4BTR_9eA

# AWS Elastic Beanstalkの特徴

## 手軽さ（簡単で速い）
何より一番の特徴はその手軽さだと思います。
AWSの公式でもAWS Elastic Beanstalkを下記のように紹介しています。

>AWS Elastic Beanstalk は、AWS でウェブアプリケーションを立ち上げて稼動させるのに最も速い方法です。

公式が最も早いと言っているのでそうなんだと思います。
実際にマネージメントコンソールを数クリックするだけでWEBアプリケーションを立ち上げられます。

## 学習コストの低さ
インフラの準備を自動でやってくれるので専門知識を勉強する必要がないです。
しかも、ありがたいことにネットで「elastic beanstalk best practices」と検索すれば先人達が導き出したイケてる設定が色々と出てきます。

## 自動パッチ適用
サーバー運用者にとって避けては通れないパッチ適用も意識しなくても良くなります。
設定によって環境の最新プラットフォームバージョンや新しいパッチを自動的に取得するように選択できます。

下記のAWSの責任共有モデルを見るとEC2のセキュリティについてこんな記載があります。

> Amazon Elastic Compute Cloud (Amazon EC2) などのサービスは Infrastructure as a Service (IaaS) に分類されているため、必要なすべてのセキュリティ構成および管理のタスクをお客様が実行する必要があります。

https://aws.amazon.com/jp/compliance/shared-responsibility-model/

つまりEC2では自分で必要なすべてのセキュリティ設定を行わねばなりません。
AWS Elastic BeanstalkはPaaSでありインフラのセキュリティはAWSが担います。
当然セキュリティをAWSに任せられるのであれば任せた方が安心だと思います。
ちなみにリリースノートを見ると月2回程度更新されているようです。

https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/relnotes-2022.html

## 多彩なアプリケーションプラットフォーム
Java、C#、Node.js、PHP、Ruby、Python、Goといった一般的な開発言語をサポートしています。
会社や部署によっては文化的にJavaしか開発出来ないといった事情もあると思うので広くサポートされているのはありがたいです。

## モニタリング
AWS Elastic Beanstalkには、アプリケーションの状態のモニタリングと管理のための統一されたユーザーインターフェイス (UI) が用意されています。
ヘルスチェックやCPU使用率の監視といった一般的なモニタリングは行えます。
Amazon CloudWatch等と連携しているため、モニタリング結果を監視して閾値を超えた場合にメールでの通知が来るよう設定することもできます。

## スケーリング
AWS Elastic BeanstalkはElastic Load BalancingとAuto Scalingを使用してアプリケーションを自動的にスケールするように設定出来ます。
この設定を使用することで、オンプレ時代には出来なかったコストを最小限に抑えながら一時できな高負荷に耐えられるようになるので、過不足のない運用が実現します。
複数のアベイラビリティーゾーンを使用することで、さらにアプリケーションの信頼性と可用性を高めることが可能です。

:::note info
下記はAWS Elastic Beanstalkのデベロッパーガイドで紹介しているアーキテクチャの例
:::
![アーキテクチャの例](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/aeb-architecture2.png)

## 料金
AWS Elastic Beanstalkを使うことでの追加料金は発生しません。
もちろん「無料でアプリケーションを公開できる」という訳ではなく、アプリケーションの保存と実行に実際に使用したAWSリソースに対しての料金がかかります。
EC2の料金がかかるので、決して「EC2で自前で環境構築するより安い」なんてことはないです。

# デメリット
ここまでAWS Elastic Beanstalkの特徴を説明しましたが、最後にデメリットを紹介します。

## リソースの無駄
AWS Elastic Beanstalkの裏側ではEC2インスタンスが生成されますが、そのEC2インスタンスがリソースを持て余して『リソースの無駄』が発生することがあります。
例えば「Dockerプラットフォーム」を利用している場合、AWS Elastic Beanstalkでは1台のEC2インスタンスに対して1コンテナが立ち上がります。もし1つのコンテナがリソースをそんなに使わない場合はリソースを効率的に利用するために1台のEC2インスタンスに対して複数のコンテナを立ち上げる方が無駄のないリソース利用が出来ます。

# まとめ
導入の速さと手軽さを考えると、WEBアプリケーションを稼働させるサービスの中でも選択肢の上位に来るのではないかなと思います。
インフラ知識に自信がないけどクラウドでWEBアプリケーションを立ち上げたい人などは是非利用を検討してみてください。

# 関連資料

https://aws.amazon.com/jp/elasticbeanstalk/

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/Welcome.html