MENU

Elastic Beanstalkのデプロイ方式5つ、お店の改装に例えたら整理できた

Elastic Beanstalkのデプロイ方式5つ、お店の改装に例えたら整理できたことを説明する画像

おはようございます、YASUです。

以前、CodeDeployのBlue/Greenデプロイを整理しましたが、DVAの勉強を進めると、Elastic Beanstalkにも「デプロイポリシー」という、似た名前の仕組みが何種類も出てきます。All at once、Rolling、Immutable…と並ぶと、どれがどれだか分からなくなり、模擬試験でも選択肢を取り違えました。今日は、これを「お店の改装」に例えて整理します。

目次

結論

Elastic Beanstalkのデプロイポリシーは5種類ありますが、判断軸は「ダウンタイムを許せるか」「デプロイ中も処理能力を保ちたいか」「失敗した時にすぐ戻したいか」の3つに絞れました。この3つの質問に答えていくと、選ぶべきポリシーがほぼ決まります。

まず5種類を、お店の改装で例える

複数のEC2インスタンスで動くアプリを、お店の複数の店舗だと考えると分かりやすくなりました(これは自分なりの例えです)。新しいバージョンのデプロイは、お店の改装です。

  • All at once:全店舗を一斉に閉めて、まとめて改装する。一番早いが、改装中はお客さんが入れない
  • Rolling:店舗を数店ずつのグループに分けて、順番に改装する。全店が閉まることはないが、改装中は店舗数が減るので、お客さんをさばく力は落ちる
  • Rolling with additional batch:先に臨時の店舗を出してから、順番に改装していく。店舗数が減らないので、処理能力を保てる。その分、時間とコストはかかる
  • Immutable:今の店舗はいじらず、新しい店舗を丸ごと一式建てる。問題なければ新店舗に切り替え、ダメなら新店舗を取り壊すだけなので、元に戻すのが簡単
  • Traffic splitting:Immutableと同じく新店舗を建てたうえで、最初は一部のお客さんだけを新店舗に案内する。問題がなければ、全員を新店舗に案内して、旧店舗を閉じる

公式ドキュメントの説明と照らし合わせる

AWS公式ドキュメントでも、それぞれの特徴は次のように書かれていました。

  • All at once:最も迅速なデプロイ方法で、短時間の停止が許容できる場合に適している。新バージョンを各インスタンスにデプロイしたあと、ウェブサーバーなどを再起動するため、一時的に利用できなくなる
  • Rolling:ダウンタイムを避け、可用性の低下を最小限に抑えられるが、デプロイ時間は長くなる。デプロイ中は、旧バージョンと新バージョンのインスタンスが混在する
  • Rolling with additional batch:追加のバッチを先に起動するので、可用性の低下を避けられるが、Rollingよりさらに時間がかかる
  • Immutable:新バージョンは常に新しいインスタンスにデプロイされる。別のAuto Scalingグループで起動し、ヘルスチェックに通らなければ新インスタンスを破棄するだけで、元のインスタンスには手を付けないので、素早く安全にロールバックできる
  • Traffic splitting:Immutableのデプロイを行ったうえで、決められた時間だけ、トラフィックの一部を新しいインスタンスに流す。問題なければ全トラフィックを新しい側に移す

3つの質問で選ぶ

Q1. 短時間のダウンタイムを許せる?
    → 許せる:All at once(最速)

Q2. デプロイ中も、処理能力を落としたくない?
    → 落ちてもよい:Rolling
    → 落としたくない:Rolling with additional batch

Q3. 失敗した時、すぐ元に戻したい?
    → すぐ戻したい:Immutable
    → 一部のユーザーで様子を見たい:Traffic splitting

試験では、問題文の要件から「ダウンタイム」「処理能力」「ロールバックの速さ」「段階的な切り替え」といったキーワードを拾って、この3つの質問に当てはめれば、迷いにくくなりそうです。

試験で狙われそうな落とし穴:環境の種類で使えないポリシーがある

調べていて意外だったのが、環境の種類によって、使えるポリシーが変わるという点です。

  • All at once:ロードバランサー環境も、単一インスタンス環境も使える
  • Rolling / Rolling with additional batch:ロードバランサー環境のみ。単一インスタンス環境では使えない
  • Immutable:ロードバランサー環境も、単一インスタンス環境も使える
  • Traffic splitting:Application Load Balancerを使うロードバランサー環境のみ

考えてみれば当然で、インスタンスが1台しかないのに「数台ずつ順番に」は成立しませんし、トラフィックを分けるにはロードバランサーが必要です。ただ、「単一インスタンス環境で、ダウンタイムを避けたい」という問題が出たら、Rollingではなく、Immutableが候補になる、という判断ができるようにしておきたいところです。

ちなみに、デフォルトはAll at onceです。ただし、EB CLIでスケーラブルな環境を作った場合は、Rollingがデフォルトになる、という例外もあるようでした。

CodeDeployのBlue/Greenとの関係

以前整理したCodeDeployのBlue/Greenデプロイは、「新しい環境をまるごと用意して、通信の向き先を切り替える」という方式でした。Elastic Beanstalkでは、ImmutableやTraffic splittingが、この発想に近いポリシーです。一方、環境そのものを2つ用意して、URLを入れ替えるBlue/Greenは、5つのデプロイポリシーとは別の運用方法として扱われます。名前が似ていて混同しやすいので、「Beanstalkのデプロイポリシー(5種類)」と「Blue/Greenデプロイ」は、別の枠で覚えておくと整理しやすそうです。

まとめ

  • Elastic Beanstalkのデプロイポリシーは、All at once・Rolling・Rolling with additional batch・Immutable・Traffic splittingの5種類
  • 「ダウンタイムを許せるか」「処理能力を保ちたいか」「すぐ戻したいか」の3つの質問で選べる
  • Immutableは新しいインスタンスを別に用意するため、失敗しても元の環境に影響せず、ロールバックが早い
  • 単一インスタンス環境では、RollingやTraffic splittingは使えない
  • デフォルトはAll at onceだが、EB CLIでスケーラブルな環境を作った場合はRollingになる

名前だけ見ると似たものが並んでいて混乱していましたが、お店の改装に例えて整理すると、それぞれの違いがかなり見えやすくなりました。それでは、また明日!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次