AWS Elastic Beanstalk

# AWS Elastic Beanstalk

https://d1.awsstatic.com/webinars/jp/pdf/services/20170111_AWS-Blackbelt-Elastic-Beanstalk.pdf

## Elastic Beanstalkとは

定番構成の構築・アプリデプロイの自動化サービス

  • インフラストラクチャの準備&運営からアプリケーションスタックの管理まで自動化
  • Auto Scaling
  • 利用するAWSリソースの料金のみ

 

Code 以外はElastic Bleantalk が行い、開発者はCodeに集中できる。

 

## 構成要素

  • アプリケーション
    • トップレベルの論理単位
    • バージョン、環境、環境設定が含まれている入れ物
  • バージョン(Application Version
    • デプロイ可能なコード
    • S3上でバージョン管理
    • 異なる環境に異なるバージョンをデプロイ可能
  • 環境
    • 各環境に応じて構築されるインフラ環境
    • バージョン(ソースコード)をデプロイ
    • ELB+EC2など
  • 環境設定
    • その環境に関連するリソースの動作を定義する設定パラメータ
    • インスタンスタイプ、Auto Scaling の設定

 

  • 環境のタイプ(Tier)
    • ロードバランシング、Auto Scaling 環境
      • ウェブサーバ環境(ELB+Auto Scaling
        • 環境ごとにDNS名を付与
      • ワーカー環境(SQS+Auto Scaling)
        • バッチアプリケーション
        • sqsd -> Elastic Beanstalk Application
        • 定期的なタスク実行
    • シングルインスタンス環境
      • 開発環境など
    • 複数環境

 

 

## デプロイメント

  • 方式
    • 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

 

  • デプロイ戦略
    • トレードオフを考える
    • デプロイ対象はどんな製品か
    • ロールバックのやりやすさ
    • 移行にかかる時間
    • ダウンタイム
    • DNS切り替え
    • ELB暖気
    • アップデート時にどのくらい負荷に耐えられるか
  • 更新例
    • アプリケーションのアップグレード
    • プラットフォームの更新(AMIOS、アプリなど)
    • マネージドプラットフォーム更新

 

## 環境設定

  • カスタマイズした環境設定を保存可能
  • .ebextensions に書いてコードとして管理

 

## モニタリング

  • 基本ヘルスレポート
    • 環境のヘルスステータス
    • ELBのヘルスチェック
    • CloudWatch メトリクス
  • 拡張ヘルスレポート
    • OSレベルのメトリクス
    • アプリケーションレベルのメトリクス
    • EnvironmentHealth
    • インスタンスの状態
    • リクエストの総数、各レスポンスコードごとの数
    • xパーセンタイルの完了にかかった平均時間
    • 1分間のLoadAverage
    • RootFilesystemUtil
    • CPU使用状況詳細
  • EB CLIからモニタリング
  • コンソールからモニタリング
  • CloudWatdch Logsを利用してログ監視

 

## Docker support

  • Single Container
    • EC2インスタンス内で単一のDockerコンテナを実行
    • コンテナ -> Nginx:80 の組み合わせ
  • Multi Container
    • ECSを利用して管理
    • Dockerrun.aws.json を使ったより柔軟な構成が可能

 

## tips

  • 設計上の考慮事項
  • Environment間のリンク
    • SQSのキューを利用して疎結合にする
  • 時間指定のスケーリング
  • 各種ログの有効活用
  • 複数warをデプロイ
    • 複数warのデプロイは可能だが、ヘルスチェックは一つのwarにしか行われない
    • ヘルスチェック用のwarを用意して他のwarを監視する
  • DNS
    • Route53AliasElastic Beanstalk で建てた時に利用されるURLを指定できる

 

## 雑感

昨日勉強したLightsail と比較すると、こちらの方はインフラの準備からデプロイまでやってくれるので本番運用に耐えられるし、設定ファイルの差し替えで冗長性を変えた構成ができるので開発もしやすそう。

デプロイ戦略の指定もでき、EC2を利用したアプリケーションを利用するならElastic Beanstalk が第一の選択肢になりそう。

本当にアプリ開発に必要なものが全て揃っている印象