はじめに
Elastic Benstalkでは、アプリケーションのデプロイ時にデプロイメントポリシーなるものを指定できるらしい。
Beanstalk自体は使ったことはないが、現在勉強中のAWS SOAで問われたのと、また将来受験しようかなと考えているAWS DVAの勉強も兼ねてまとめてみることにした。
デプロイメントポリシー
大きく分けると以下の4つ。
- All at Once
- Rolling
- Rolling with additional batch
- Immutable
All at Once
同時にすべてのインスタンスにデプロイするポリシー。
すべてのインスタンスに一気にデプロイするのでダウンタイムは発生するが、デプロイメントポリシーの中では一番簡単かつ早い。
Rolling
バッチサイズを指定してデプロイするポリシー。
バッチサイズというのは、「デプロイを進める割合もしくはインスタンスの個数」のことである。
たとえば、「4つのインスタンスを稼働させていて、デプロイ時に半分は稼働させた状態にしておきたい…」といったときに、バッチサイズで「50%」と指定してあげることで、半分の数のインスタンスに対してデプロイを行い、終わったら残りのインスタンスにデプロイする、といったことができる。
Rolling with additional batch
バッチサイズを指定しつつ、インスタンスを追加してデプロイするポリシー
同じくインスタンス数は4、バッチサイズは50%とした場合…
①バッチサイズ分のインスタンスを新規で追加し、新規のインスタンスに対してデプロイを実施する。
↓
②新規インスタンスへのデプロイが完了したら、既存のインスタンスのうち50%のインスタンスに対してデプロイを実施する
↓
③既存のうち50%のインスタンスにデプロイが完了したら、残った二つのインスタンスは削除する。
キャパシティを維持したままデプロイ可能なので、本番環境などで採用されやすい。
Immutable
既存のインスタンスは利用せず、新規インスタンスを作成してデプロイするポリシー。
4つのインスタンスが稼働しているのであれば、新規でさらに4つインスタンスを作成し、そこにデプロイする。
その後、古い方のインスタンスをすべて終了する。
全てにおいて一切のダウンタイムが発生しないことが特徴。
その分時間もかかる。
おわりに
SOAの問題として問われたときに「こんなのほかで聞いた事ねーし覚えられねーよー」と思ってたけど、蓋を開けてみればなんてことない内容だった。