近年、クラウドファーストの概念が一般化しつつあり、時代の潮流はクラウドネイティブへと加速しています。そこで本記事では、クラウドネイティブの概要やメリットについて解説するとともに、具体的なアーキテクチャと開発手法をご紹介します。クラウドネイティブな開発環境の構築を推進している企業は、ぜひ参考にしてください。
クラウドネイティブとは
クラウドネイティブとは、クラウドコンピューティングをベースとしたシステム環境を前提に、その利点を最大限に活用する設計や思想を指します。2010年に米国政府がクラウドサービスの利用を優先するクラウドファーストを提唱し、クラウドコンピューティングが大きな注目を集めるようになりました。クラウド市場の規模は年々拡大傾向にあり、総務省の調査では国内企業の68.7%(※)が何らかのクラウドサービスを活用していると回答しています。
もはやクラウドコンピューティングは優先的に利用するものから、活用して当たり前の技術となりつつあります。そこで注目を集めているのが、プラットフォームからアプリケーションに至るまで、クラウドコンピューティングに最適化された環境を構築するクラウドネイティブという概念です。
詳しくは後述しますが、コンテナ型仮想化技術によるマイクロサービスや宣言型APIなど、クラウドネイティブなアーキテクチャを用いることで、従来よりも敏捷性や柔軟性に優れるシステム環境を構築できます。こうしたアーキテクチャを用いてクラウドコンピューティングの利点を最大化し、変化の加速するビジネス環境に対応していくことがクラウドネイティブの基本的な考え方です。
クラウドファーストやクラウド・バイ・デフォルトとの違い
クラウドネイティブの定義を明確化するためにも、クラウドファーストとクラウド・バイ・デフォルトとの違いについて見ていきましょう。先述したように、クラウドファーストは米国政府が提唱した概念で「クラウドサービスの利用を優先する」と定義されています。クラウド・バイ・デフォルトは日本政府が掲げる方針で「クラウドサービスの利用を第1候補とする」という原則です。
クラウドファーストとクラウド・バイ・デフォルトは、クラウドコンピューティングの積極的な活用を推進しているものの、いわゆるクラウド活用の領域に留まる思想といえます。一方でクラウドネイティブは、クラウドコンピューティングの活用がそもそも大前提であり、さらにその特性を最大限に活かす環境を構築することが目的です。
クラウドネイティブのメリット
クラウドコンピューティングの一般的なメリットは、サーバーやネットワーク機器などのハードウェアが不要な点です。物理的なITインフラが必要ないため、導入費用と運用コストを大幅に削減できることに加え、BCP対策としても機能します。しかし、これらはクラウドファーストやクラウド・バイ・デフォルトでも得られる利点であり、クラウドネイティブのメリットはもう一歩先にあります。
メリットの一例として挙げられるのが、マイクロサービスの活用による敏捷性の最大化です。たとえば、従来のモノリシックな開発環境では、変更時の追加や結合に多大な時間を要し、リリースの遅滞を招く原因となります。アプリケーションの構造を独立した小さなサービスの集合体として構築するマイクロサービスを活用することで、仕様やスコープの変更が発生してもリリースの遅滞を最小限に抑えられます。
また、ゲストOSを起動することなく仮想環境を構築するコンテナを基盤とすることで、拡張性が高く柔軟なアプリケーションの構築が可能です。こうしたクラウドネイティブなアーキテクチャを整備できれば、最小単位でのテストやデプロイが可能なため、大きな変更が生じた際も最小限の労力で柔軟に対応できます。このように俊敏性や拡張性の高い、モダナイズされた開発環境を構築できる点がクラウドネイティブの最も大きなメリットです。
クラウドネイティブを構成する技術
先述したクラウドネイティブのメリットを享受するためには、クラウドコンピューティングの利点を最大化するアーキテクチャが必要です。クラウドネイティブな環境を構成するアーキテクチャの代表格として以下の5つが挙げられます。
- マイクロサービス
- サービスメッシュ
- 宣言型API
- イミュータブルインフラストラクチャ
- コンテナ
マイクロサービス
マイクロサービスは、アプリケーションを構成するサービスや機能を分割し、ネットワーク経由でひとつの集合体として設計する方法です。モノリシックなアーキテクチャと異なり、小さなサービスを組み合わせることでテストやデプロイが容易になり、開発サイクルの短縮化や問題を局所的に抑えられるなどのメリットがあります。
サービスメッシュ
サービスメッシュは、アプリケーション間のデータ通信やサービス間の連携を管理して最適化するための仕組みです。先述したマイクロサービスは敏捷性の向上というメリットがあるものの、サービス間の通信が複雑化する点がデメリットといえます。サービスメッシュはこうした複雑な通信を連結し、マイクロサービス同士の相互連携を強化します。
宣言型API
宣言型APIは、最終的な目的や得たい結果を宣言することで自律的に動作するAPIです。マイクロサービスでは基本的にサービス同士の連携はAPIによって実行されます。宣言型APIは複雑な命令や細かい調整が不要なため、マイクロサービスの自動運用や管理業務の負担軽減といったメリットを得られます。
イミュータブルインフラストラクチャ
イミュータブルインフラストラクチャは、ITインフラに変更を加えない運用方法です。具体的には、既存のアプリケーションやミドルウェアに変更を加える際に状態を変化させるのではなく、新たに入れ替える手法を指します。テスト環境のリソースを本番環境に乗せ換えられる、変更前のリソースへの差し戻しが容易になるといったメリットがあります。
コンテナ
コンテナは、コンテナ型仮想化技術を用いてホストOS上に仮想環境を構築するアーキテクチャです。ゲストOSを起動することなくアプリケーション実行環境を構築できるため、従来の仮想サーバーと比較してCPUやメモリーのリソース消費量が少なく、動作性が俊敏で可搬性が高いというメリットがあります。マイクロサービスは基本的にコンテナ上で稼働するため、クラウドネイティブな環境の構築には必須であるといえるでしょう。
クラウドネイティブにおすすめの開発手法
コンテナやマイクロサービスといったアーキテクチャを用いて、クラウドネイティブなシステム環境を構築できれば、以下のようなモダンアプリケーション開発が可能となります。
DevOps
DevOpsは、システムの開発チームと運用チームが連携・協力し、迅速かつ柔軟な開発を進めていく手法です。開発チームと運用チームが協調し合うことで、システム開発の効率化を図るとともに、ビジネスが創出する付加価値の最大化を目的とします。DevOpsを実現するためには、仕様やスコープの変更などに柔軟に対応できるクラウドネイティブな環境が不可欠です。
アジャイル開発
アジャイル開発は、企画・計画・設計・実装・テストの開発工程を段階的に完了させていく開発手法です。従来のウォーターフォール開発では、プロジェクトに変更や追加が生じた際に全体的な予定が狂い、工数やコストの増大を招きます。開発工程を機能単位の小さなサイクルで繰り返すアジャイル開発では臨機応変な対応が可能となり、柔軟かつスピーディーに修正や変更ができます。
リフト&シフト
リフト&シフトは、オンプレミス環境で運用している既存システムをクラウドマイグレーションする手法を指します。既存システムのコードを変更せず、IaaSやPaaSなどのクラウド環境へ漸進的に移行していく手法です。クラウドマイグレーションにおける最もスタンダードな手法であり、「リホスト」とも呼ばれます。
まとめ
クラウドネイティブとは、クラウドコンピューティングの活用を前提とした設計や思想を指します。コンテナやマイクロサービスなどのアーキテクチャを用いることで、敏捷性や拡張性に優れるクラウド環境の構築が可能です。クラウドネイティブな開発環境を整備するためにも「Microsoft Azure」の導入をご検討ください。