🙆

Elastic Beanstalkのデプロイポリシーまとめ

2020/07/30に公開

Elastic Beanstalkのデプロイポリシーまとめ

デベロッパーアソシエイトを勉強中です。

公式がこちらのページで説明していますが、 文章が分かりづらく、整理のために投稿します。 https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html

前提

  • ELBが1つ
  • ELBに4つのEC2インスタンスが紐付いている

ローリングの時に使用するバッチについて説明

設定の画面で、バッチサイズの割合を決めることができると思います。

その割合と、インスタンス数を掛け算したものが、 バッチのインスタンス数になります。

例 バッチサイズ:25% インスタンス数:4台 0.25(25%) × 4(台) = 1(台)

All at once(一度に全て)

説明

名前の通り、全てのEC2インスタンスに対して、 同時にデプロイを行います。

デメリット

短時間ではありますが、サービスが停止する時間があります。

それぞれのインスタンスで、デプロイ完了までの時間差が生まれ、 新旧アプリが混在する時間が存在します。

Rolling (ローリング)

説明

  1. バッチサイズ分のインスタンスをデタッチします。

  2. デタッチしたインスタンスに対して、デプロイをします。

  3. デプロイしたインスタンスにヘルスチェックをかけ、問題なければELBにアタッチされます。

全てのインスタンスにデプロイされるまで、1~3を繰り返します。

デメリット

デタッチされている分、ELBで捌けるインスタンス数が減るので、パフォーマンスに影響が出る可能性がある。

新旧アプリが混在する時間が存在します。(All at onceより基本長い時間)

Rolling with additional batch (追加バッチによるローリング)

説明

  1. バッチサイズ分のインスタンスを新規立ち上げ、デプロイを実行します。

  2. ヘルスチェックをし、問題なければ、ELBにアタッチします。

  3. 2でアタッチした分、ELBからデタッチし、デプロイを実行

  4. デプロイ済みのインスタンスをELBにアタッチします。

3~4を繰り返すことで、全てのインスタンスを更新します。

Rollingでは、一時的にリクインスタンスの数が減っていたが、 こちらでは、新規立ち上げするため、減りません。

実際の本番環境では、こちらが一番よく使われるみたいです。

デメリット

すごく短時間だが、EC2インスタンスの数が増え、料金がかかってしまう。

こちらも新旧アプリが混在する時間が存在します。

Immutable (変更不可)

説明

  1. EC2インスタンス実際に稼働している分とを同じ数、用意し、そちらにデプロイします。

  2. ヘルスチェックに通るかどうかを確認します。

  3. 問題なければ、EC2インスタンスを実際に稼働しているELBにアタッチします。

  4. 古いEC2インスタンスをデタッチし、終了させます。

デメリット

一時的に、EC2インスタンスの数が倍増し、費用がかかる。

こちらも新旧アプリが混在する時間が存在します。

新旧アプリが混在する時間をなくしたい場合

Blue-Green Deploymentを使いましょう。

Blue-Green Deploymentとは

Elastic Beanstalkのクローンを作成し、 そちらにデプロイをします。

動作に問題なければ、環境URLのスワップを行うことで、 新旧アプリが混在する時間がなくなります。

詳しくはこちら https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html

GitHubで編集を提案

Discussion