AWS Elastic Beanstalk
# AWS Elastic Beanstalk
https://d1.awsstatic.com/webinars/jp/pdf/services/20170111_AWS-Blackbelt-Elastic-Beanstalk.pdf
## Elastic Beanstalkとは
定番構成の構築・アプリデプロイの自動化サービス
Code 以外はElastic Bleantalk が行い、開発者はCodeに集中できる。
## 構成要素
- アプリケーション
- トップレベルの論理単位
- バージョン、環境、環境設定が含まれている入れ物
- バージョン(Application Version)
- デプロイ可能なコード
- S3上でバージョン管理
- 異なる環境に異なるバージョンをデプロイ可能
- 環境
- 各環境に応じて構築されるインフラ環境
- バージョン(ソースコード)をデプロイ
- ELB+EC2など
- 環境設定
- その環境に関連するリソースの動作を定義する設定パラメータ
- インスタンスタイプ、Auto Scaling の設定
- 環境のタイプ(Tier)
## デプロイメント
- 方式
- All at once(destroy -> create)
- ダウンタイムあり
- In-Place (Rolling Deploy)
- x個ずつアップデートしていく
- Rolling with additional batch
- 新規に作成して、古いものを削除していく
- Blue/Green Deployment(Immutable)
- 脇に全く新しい環境を作成してLBなどで向き先を変更
- URL swap
- 新と旧のURLを入れ替える
- ELB暖気が必要
- Route53
- 向き先を変更する
- ELB暖気が必要
- デプロイ設定
- 一度に変更する割合をどう決めるかを指定
- バッチタイプ:割合or数値
- バッチサイズ:どのくらいでバッチタイプで指定したことを行うか
- Route53
- 加重ラウンドロビンの利用
- デプロイ戦略
- 更新例
- アプリケーションのアップグレード
- プラットフォームの更新(AMI、OS、アプリなど)
- マネージドプラットフォーム更新
## 環境設定
- カスタマイズした環境設定を保存可能
- .ebextensions に書いてコードとして管理
## モニタリング
- 基本ヘルスレポート
- 環境のヘルスステータス
- ELBのヘルスチェック
- CloudWatch メトリクス
- 拡張ヘルスレポート
- OSレベルのメトリクス
- アプリケーションレベルのメトリクス
- EnvironmentHealth
- インスタンスの状態
- リクエストの総数、各レスポンスコードごとの数
- xパーセンタイルの完了にかかった平均時間
- 1分間のLoadAverage
- RootFilesystemUtil
- CPU使用状況詳細
- EB CLIからモニタリング
- コンソールからモニタリング
- CloudWatdch Logsを利用してログ監視
## Docker support
- Single Container
- EC2インスタンス内で単一のDockerコンテナを実行
- コンテナ -> Nginx:80 の組み合わせ
- Multi Container
## tips
- 設計上の考慮事項
- ステートレス
- AutoScaling を利用している
- 永続データの格納場所
- Beanstalk の外に配置
- RDS
- DynamoDN
- S3
- Ref)クラウドのためのアーキテクチャ設計 -ベストプラクティス-
- Environment間のリンク
- SQSのキューを利用して疎結合にする
- 時間指定のスケーリング
- 各種ログの有効活用
- 複数warをデプロイ
- 複数warのデプロイは可能だが、ヘルスチェックは一つのwarにしか行われない
- ヘルスチェック用のwarを用意して他のwarを監視する
- DNS
- Route53のAliasをElastic Beanstalk で建てた時に利用されるURLを指定できる
## 雑感
昨日勉強したLightsail と比較すると、こちらの方はインフラの準備からデプロイまでやってくれるので本番運用に耐えられるし、設定ファイルの差し替えで冗長性を変えた構成ができるので開発もしやすそう。
デプロイ戦略の指定もでき、EC2を利用したアプリケーションを利用するならElastic Beanstalk が第一の選択肢になりそう。
本当にアプリ開発に必要なものが全て揃っている印象