AWS ElasticBeanstalkについて

##　はじめに
　こんにちは！今回はDVAを学習中にElasticBeanstalkについてもう少し詳しくなりたいと思いこちらの記事を投稿しました
　よろしくお願いします(｡･ω･)ﾉﾞ

##　AWS ElasticBeanstalkとは
　**定番構成の構築・アプリデプロイの自動化サービス**



　◆特徴
　　・早く簡単にアプリケーションをデプロイ可能
　　・インフラストラクチャの準備＆運営からアプリケーションの管理まで自動化
　　・AutoScallingによりコストを抑えながらスケーラビリティを確保
　　・Java、PHP、Ruby、Python、Node.js、.NET、Docker、Goに対応
　
　◆価格体系
　　・追加料金なし
　　・アプリケーションの保存、実行に必要なAWSリソースに対してのみ課金される
![スクリーンショット 2021-06-29 094824.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993659/f5dca143-08fb-2554-a17b-74c9f9ef81ec.png)

##　実はCloudFormastionで構築されている
　ElasticBeanstalkは実際のデプロイ時はCloudFormastionと連携を行い、CloudFormastionで環境をデプロイしている

##　デプロイメントに関する用語

　●**In Place**
　　インスタンスは現行環境のものをそのまま利用し、新しいリビジョン（改正版）のコードをその場で反映させる
　
　●**Blue/Green**
　　新しいリビジョンのコードを、新しいインスタンスに反映させ、インスタンスごと入れ替える。

##　ElasticBeanstalkにおけるデプロイの選択肢

　◆**All at once（一度に）：In Place**
　　同時にすべてのインスタンスに新しいバージョンをデプロイする。環境内のすべてのインスタンスはデプロイが実行される間、短時間だがサービスが停止する。
　　最も早い展開方式になる。
　
　◆**Rolling（ローリング）：In Place**
　　バッチに新しいバージョンをデプロイします。デプロイフェーズ中バッチはサービス停止状態になり、バッチのインスタンスによる環境容量への負荷を低減します。
　　一度にいくつか対象を分けて更新する。
　
　◆**Rolling with additional batch（追加バッチによるローリング）：In Place＆Blue/Green**
　　バッチに新しいバージョンをデプロイしますが、デプロイ中に総容量を維持するためインスタンスの新しいバッチをまず起動します。
　　更新前にインスタンスが構築されその後にインスタンスをRollingする。そして最後にRollingが終了したら初めの構築されていたインスタンスを削除。
　
　◆**Immutable（変更不可）：Blue/Green**
　　本番用に適したパターン。変更不可な更新を実行し新しいバージョンをインスタンスの新しいグループにデプロイし、失敗した場合ロールバック処理がされる。

　　１：新しくASGを作成し新しいインスタンスを作成する
　　２：その後、既存のASGから新しいASGのインスタンスに移動させる
　　３：移動が終わったら古いほうのインスタンスを削除する

##　EB Command Line Interface（EB CLI）
　ハイレベルな操作が可能なコマンドラインツール。頻繁にデプロイが繰り返される環境かでの自動化に便利です
　EB CLIコマンドからもElasticBeanstalkアプリケーション・環境の構築ができる。継続的なデプロイも可能。

　●代表的なコマンド
　　・eb init
　　・eb create
　　・eb deploy

　**□eb init**
　　　アプリケーションを作成とパラメーターの指定ができる。
　　
　　**●eb initのプロンプト：リージョンの選択**

```
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-southeast-1 : Asia Pacific (Singapore)
7) ap-southeast-2 : Asia Pacific (Sydney)
8) ap-northeast-1 : Asia Pacific (Tokyo)
9) sa-east-1 : South America (Sao Paulo)
10) cn-north-1 : China (Beijing)
(default is 3):
```
　　**●eb initのプロンプト：アプリ名/SSH/Keypair**

```
Enter Application Name
(default is "eb-node-express-sample"): 
```

```
It appears you are using Node.js. Is this correct?
(y/n): y
Do you want to set up SSH for your instances?
(y/n): y
```

```
Select a keypair.
1) mykey
2) [ Create new KeyPair ]
(default is 2): 1
```
　　**●eb initのプロンプト：スタック**

```
Select a platform.
1) Node.js
2) PHP
3) Python
4) Ruby
5) Tomcat
6) IIS
7) Docker
8) Multi-container Docker
9) GlassFish
10) Go
11) Java
```
　**□eb create**
　　　環境名を指定して、アプリケーションの環境を作成します。

　　**●eb createのプロンプト：Environment/CNAME/Deploy**

```
Enter Environment Name
(default is eb-node-express-sample):
Enter DNS CNAME prefix
(default is eb-node-express-sample):
```
```
Creating application version archive "5529".
Uploading eb-node-express-sample/5529.zip to S3. This may
take a while.
Upload Complete.
Environment details for: eb-node-express-sample
Application name: eb-node-express-sample
Region: us-west-2
Deployed Version: 5529
27 Environment ID: e-ufxx79fmkc
```
　**□eb deploy**
　　　環境の更新デプロイを実行します

　　**●eb createのプロンプト：デプロイ**

```
$ eb deploy
2018-07-11 21:05:22    INFO: Environment update is starting.
2018-07-11 21:05:27    INFO: Deploying new version to instance(s).
2018-07-11 21:05:53    INFO: New application version was deployed to running EC2 instances.
2018-07-11 21:05:53    INFO: Environment update completed successfully.
```
##　.ebextensions
　ElasticBeanstalk設定ファイル（**.ebextensions**）を追加すると、環境のカスタマイズができます。コマンドを実行するディレクトリに「.ebextensions」ディレクトリを作成し、その配下に拡張子を**.config**とする**JSONまたはYAML**フォーマットのファイルを作成します。
　
　◆ユースケース
　　・カスタム環境変数の指定
　　・ソフトウェアのインストール
　　・インストールしたソフトウェアの実行
　　・デフォルトの環境には用意されていないAWSリソースの作成

## .ebextensions で実行可能な操作
• **packages**: yumやrpmを利用したパッケージのインストール
• **sources**: 外部からのアーカイブ(tarなど)をダウンロードして指定した場所に展開
• **files**: 指定した場所にファイルを作成
• **services**: serviceを起動したり、起動設定を変更したりする
• **users/groups**: 任意のユーザー/グループを作成
• **commands**: デプロイ処理前に実行すべきコマンドやスクリプトを指定
　➡例)OSやミドルウェアの設定変更
• **container_commands**:新バージョンの展開後に実行すべきコマンドやスクリプトを指定
　➡例)アプリ内のリソースや設定の環境に応じた変更など
• **option_settings**: 環境変数の設定
• **Resources**: 追加のリソースを定義　
　➡例) SQSのキュー、DynamoDBのテーブル、CloudWatchのアラーム

　
##　デプロイに関する設定
　**◆バッチタイプ**：一度にデプロイを反映させる台数（バッチ）をどう決めるかを設定
　　　➡**割合（％）**：現在起動中のインスタンスの合計数に対する割合で構成
　　　➡**固定**：決まった台数を絶対値で指定
　**◆バッチサイズ**：各バッチにデプロイするインスタンスの数または割合
　　　
##　おわりに
　ElasticBeanstalkについて少しまとめてみました。４つのデプロイ方式や.ebextensions設定ファイルはSAAを学習しているときは見たこともないものでした。
　本試験まであと2週間ちょっと頑張っていきたいと思います！

(｡･ω･)ﾉﾞバイバイ