開発コラム:AWS認定資格対策-デプロイ戦略-
9月に入っても暑い日が東京は続きますね…
今年はいつにも増して秋が待ち遠しく感じます。
さて今回の開発コラムは、AWS認定資格対策-デプロイ戦略-についてです。
ーーーーーーーーーーーーーーーーーーーーーーーーー
開発を担当している、クラウドサービス開発部の原です。
今回はAWS認定資格のプロフェッショナル認定にて頻出テーマであるデプロイ戦略についてご紹介します。
デプロイ戦略は、アプリケーションをサーバにデプロイする際の更新方法であり、デプロイ時間の短縮やダウンタイムの回避、リリース前のテストなど様々な目的に応じて複数のデプロイ戦略があります。
試験では複数のデプロイ戦略のメリット・デメリットを把握したうえで、特定のユースケースに対してどれが適したデプロイ戦略で、それをどのようなアーキテクチャで実現できるかという知識を問われます。
本記事ではWebアプリケーションの実行管理サービスであるAWSサービスAWS Elastic Beanstalkで提供されているデプロイオプションを例にデプロイ戦略について触れつつ、そのデプロイ戦略を実現する際に利用するその他のAWSサービスについてもご紹介します。
※本記事は2024年6月時点の情報です。
・AWS Elastic Beanstalk
AWS Elastic Beanstalkは、Webアプリケーションの実行に必要なリソースプロビジョニングやデプロイなどの管理を行えるサービスです。Webアプリケーションの様々なデプロイオプションが提供されており、それを例にデプロイ戦略についてご紹介いたします。
・ All at once(一度にすべて)
一度にすべてのサーバを更新するデプロイ戦略です。特徴としては以下が挙げられます。
>デプロイ時間が短い
>ダウンタイムが発生する
>新旧バージョンが混在しない
デプロイの流れは以下のようになっており、一度サービスを停止させ、すべてのサーバを更新したあとサービスを再開する流れになっています。ダウンタイムは発生しますが、短時間で一斉に更新するシンプルで分かりやすいデプロイ戦略です。
・Rolling(ローリング)
一定台数(バッチ)ごとに順番にサーバを更新するデプロイ戦略です。特徴としては以下が挙げられます。
>デプロイ時間が長い
>ダウンタイムは発生しないが、処理キャパシティは一時的に減少する
> 新旧バージョンのアプリケーションが混在する時間が存在する
デプロイの流れは以下のようになっており、一定台数(例えば1台)ずつ順番に 切り離して更新完了後に戻すという処理をすべてのサーバが更新完了になるまで繰り返す流れになっています。ダウンタイムが発生しない点は優れていますが、更新中のサーバ台数分だけ処理能力が低下するうえ、新しいバージョンと古いバージョンのアプリケーションが混在する時間が発生します。
・Rolling with additional batch(追加バッチによるローリング)
Rollingデプロイにおいて処理キャパシティを維持するため新しいサーバを順次追加して更新していくデプロイ戦略です。特徴としては以下が挙げられます。
>デプロイ時間はRollingデプロイよりも長い
>ダウンタイムは発生せず、処理キャパシティも維持される
> 新旧バージョンのアプリケーションが混在する時間が存在する
デプロイの流れは以下のようになっており、Rollingデプロイと違い、最初に更新をかけるサーバ台数(例えば1台)分を追加して処理能力を維持したうえで、Rollingデプロイと同様の流れで更新していく流れになっています。ダウンタイムが発生しないうえ処理能力を維持できる点は優れていますが、Rollingデプロイと同様に新しいバージョンと古いバージョンのアプリケーションが混在する時間が発生します。
・Immutable(イミュータブル)
既存のサーバを変更せず、新しいサーバを追加して入れ替えるデプロイ戦略です。特徴としては以下が挙げられます。
>デプロイ時間が非常に長い
>ダウンタイムは発生せず、処理キャパシティも維持される
>新旧バージョンのアプリケーションが混在する時間が存在する
>ロールバックが容易である
デプロイの流れは以下のようになっており、新しいサーバを追加していって元の台数分を追加できたら古いサーバを削除する流れになっています。Rolling with additional batchと特徴が似ていますが、このデプロイ戦略では既存サーバに変更を加えず新しいサーバにデプロイしているため、トラブル発生時のロールバックが非常に容易です。
・ Traffic splitting(トラフィック分割)
トラフィックの一部で新バージョンを一定時間テストしたうえで問題が無ければ新バージョンに切り替えるデプロイ戦略です。このデプロイ戦略はカナリアデプロイなどとも呼ばれます。特徴としては以下が挙げられます。
>デプロイ時間が非常に長い
>ダウンタイムは発生せず、処理キャパシティも維持される
>新旧バージョンのアプリケーションが混在する時間が存在する
>ロールバックが容易である
デプロイの流れは以下のようになっており、新規サーバを追加したあと、一部トラフィックのみを新バージョンに移してテストを行い、問題が無かった場合にトラフィックをすべて新バージョンに切り替える流れになっています。Immutableと特徴が似ていますが、このデプロイ戦略では一部のトラフィックでのみ一定時間テストを行うため、問題が発生した場合はロールバックを行い影響を最小限に抑えることができます。ただし、本番環境のトラフィックでテストしているため本番影響は発生してしまいます。
・URLスワップ
既存環境(Blue環境)はそのままに。新しい環境(Green環境)を作成・更新し、新しい環境でテストを行い問題が無かった場合にDNSの向き先を切り替えることで新バージョンに切り替えるデプロイ戦略です。このデプロイ戦略はBlue/Greenデプロイなどとも呼ばれます。特徴としては以下が挙げられます。
>デプロイ時間が非常に長い
> ダウンタイムは発生せず、処理キャパシティも維持される
> 新旧バージョンのアプリケーションは混在しない
> 新バージョンのテストやロールバックが容易である
デプロイの流れは以下のようになっており、同じ構成の環境を複製して新バージョンに更新したあと、テストで問題が無ければ既存環境のURLの向き先を旧バージョンから新バージョンに切り替える流れになっています。Traffic splittingと異なり本番環境のトラフィックには影響を与えず、専用の環境でテストを行うことができるため問題があった場合も本番影響はありません。新旧バージョンが混在することもないうえ、環境を保持している限り新旧の切替が可能なため問題発生時のロールバックが容易です。ただし、同じ構成の環境を2つ保持する必要があるため、保持している間は常にコストが発生します。
・デプロイ戦略に利用可能なその他サービス
AWS Elastic Beanstalk以外にもデプロイ戦略に利用可能なサービス・機能が複数あります。
・Amazon Route53
Amazon Route53は、DNSサービスです。
DNSの向き先を切り替えることでBlue/Greenデプロイを実現可能です。また、様々なルーティングオプションが提供されており、加重ルーティング機能によりカナリアデプロイを実現することも可能です。
・Amazon CloudFront
Amazon CloudFrontは、コンテンツ配信ネットワーク(CDN)のサービスです。
オリジンの無記載を切り替えることでBlue/Greenデプロイを実現可能です。また、CloudFront FunctionsやLambda@Edgeを利用することでレスポンスをカスタマイズすることが可能で、カナリアデプロイを実現することも可能です。
・Elastic Load Balancing
Elastic Load Balancingは、トラフィックの負荷分散を行うロードバランサーのサービスです。ターゲットグループの向き先を切り替えることでBlue/Greenデプロイを実現可能です。また、Application Load Balancerでは加重ターゲットグループ機能を利用することでカナリアデプロイを実現することも可能です。
・Amazon API Gateway
Amazon API Gateway は、APIの作成や管理を行うサービスです。ステージ機能を利用することでBlue/Greenデプロイを実現可能で、トラフィック割合を設定してカナリアデプロイを実現することも可能です。
・AWS Lambda
AWS Lambdaは、サーバレスでコードを実行できるサービスです。バージョンとエイリアス機能を利用してBlue/Greenデプロイを実現可能です。また、加重エイリアス機能によりカナリアデプロイを実現することも可能です。
・AWS CodeDeploy
AWS CodeDeployは、アプリケーションのデプロイを自動化するサービです。デプロイ対象のコンピューティングサービスによって利用可能なデプロイ戦略が変わりますが、Blue/Greenデプロイもカナリアデプロイも実現可能です。
おわりに
今回はAWS Elastic Beanstalkを例にデプロイ戦略の流れやその他デプロイ戦略として利用可能なサービスについて簡単にご紹介しました。
試験対策としては、それぞれのデプロイ戦略のメリットやデメリットを把握したうえでユースケースごとにどのデプロイ戦略が適切か整理することや、そのデプロイ戦略を実現できるサービスや設定を理解することが有効です。
例えば、デプロイ時間を短くしたい、ダウンタイムを発生させたくない、障害発生時に迅速にロールバックをしたい などの要件が提示された際に、適切なデプロイ戦略を判断できるようにすることがポイントです。
また、提示されたシステム構成において、指定のデプロイ戦略やデプロイ要件を実現するために、適切なAWSサービスおよび設定方法を判断できるようにすることもポイントです。システム構成によっては採用するAWSサービスも変わってくるため、デプロイ戦略に利用可能なサービスを広く把握しておくことが重要です。
プロフェッショナル認定の試験対策だけでなく、実際に開発をする際にも有用な知識ですので、デプロイ戦略について学習してみてはいかがでしょうか?
AWS試験ガイド(AWS Certified Solutions Architect - Professional)
https://aws.amazon.com/jp/certification/certified-solutions-architect-professional/
AWS試験ガイド(AWS Certified DevOps Engineer - Professional)
https://aws.amazon.com/jp/certification/certified-devops-engineer-professional/
ーーーーーーーーーーーーー
キヤノンITソリューションズでは、お客様が安心・安全に利用できるよう、確かな技術力を活かしてAWS・クラウドなど、DXに関する技術習得をおこなっております。高い技術力を元にDXにお役にたてるソリューションを多数ご用意しております。なにかお困りごとがございましたら、どうぞお気軽にご相談ください。
※本記事に記載されている会社名、製品名は、それぞれの会社の商標または登録商標です。
★―☆。.:*:・゜――――――――――――――――――――――――
キヤノンITソリューションズ 公式Webサイト
開発コラムのマガジンはこちら