ある企業はAWS Elastic Beanstalkで本番Webアプリケーション(負荷分散環境・複数EC2インスタンス)を運用しています。新バージョンのデプロイにあたり、(1)デプロイ中も常に本番容量を100%維持する、(2)デプロイが失敗した場合は新規インスタンスを破棄するだけで即座に元の状態へ戻す、(3)新旧バージョンが同一インスタンス群に混在する状態を最小化する、という要件があります。一時的な追加インスタンスのコストは許容できます。最も適したデプロイポリシーはどれですか。
Immutableデプロイは、既存のAuto Scalingグループとは別に一時的な新ASGを作成し、そこに新バージョンのインスタンスを起動します。ヘルスチェックに合格したインスタンスのみを元のASGへ移行し、失敗時は新ASGを破棄するだけで既存インスタンスはそのまま残るため即座にロールバックできます。本番容量は常時維持され、新旧バージョンは別ASGに分離されるため混在も最小化されます。 選択肢のRolling with additional batchは容量は維持しますが、同一環境内で新旧バージョンが一時的に並存します。 選択肢のRollingはバッチ単位で既存インスタンスを更新するため、その間は本番容量が低下します。 選択肢のAll at onceは全インスタンスを同時更新するためダウンタイムが発生し、容量維持要件を満たしません。