○クラウドネイティブ・アプリケーションとは

クラウドコンピューティングの機能をフル活用して構築・展開されたアプリケーションのことを「クラウドネイティブ・アプリケーション」と呼ぶ。IaaS(Infrastructure as a Service)やPaaS(Platform as a Service)などのクラウド・プラットフォーム上で実行することを前提として設計されるため、クラウドの規模やパフォーマンスに合わせて最適化することができるという強みがある。

クラウドネイティブのより厳密な定義に言及した文書としては、Cloud Native Computing Foundation(CNCF)が公開している「CNCF Cloud Native Definition v1.0」などがある。

CNCFはAWSやGoogle、Microsoftといった主要なクラウドベンダーも参加する、クラウドネイティブ技術の普及を推進している団体である。この文書では、クラウドネイティブへのアプローチの例としてコンテナやマイクロサービス、サービスメッシュ、イミュータブル・インフラストラクチャ、宣言型APIなどが挙げられている。

これらのうち、マイクロサービスやコンテナは、クラウドネイティブ・アプリケーションを目指す上で極めて重要な要素である。

マイクロサービスとは、アプリケーションがマイクロサービスと呼ばれる独立した小さなモジュールに分割されており、複数のマイクロサービスが連携して1つのアプリケーションとしての動作するようなアーキテクチャを指す。従来のモノリシックなアーキテクチャと比較すると、マイクロサービスでは個々のサービスの独立性が高く、構成の変更や障害に対して柔軟に対応できるという特徴がある。

コンテナは、1つのOSインスタンスの中でも複数の独立した環境を構築することができるため、標準的な仮想マシンと比較して作成や破棄が容易であり、マイクロサービスをデプロイする理想的な選択肢と言える。

これらの技術を組み合わせることによって、変化に強く、かつ、柔軟で高品質なアプリケーションを提供することが、クラウドネイティブ・アプリケーションの目的である。ビジネスの変化のスピードが速い今日では、顧客のニーズに合わせて迅速にアプリケーションを構築することが求められており、クラウドネイティブ・アプリケーションの需要はますます高まっていくものと思われる。

○クラウドネイティブ・アプリへの道筋

企業の業務システムをクラウドに移行する手法は、一般的にいくつかのパターンに分類することができる。

比較的リスクの少ない手法は「リフト・アンド・シフト」と呼ばれるものだ。これは、まずは既存システムをそのままクラウド上に移動し(リフト)、その後に随時クラウドにフィットするように改修していく(シフト)というものである。

IaaSを使えば既存のインフラと同様の環境をクラウド上に構築できるため、初期の段階でアプリケーションの大幅な改修を必要としないというメリットがある。ただし、単にインフラをクラウドに置き換えただけではクラウドの能力を充分に活かすことはできないので、必ず次のステップ(シフト)とセットにして考えなければならない。

クラウド移行の別のパターンとしては、先にアプリケーションの改修を行った上で、その後でクラウドに持っていくという手法もある。改修の内容としては、コンテナ化やデータベース・システムの移行、アーキテクチャの再構成などが挙げられる。この場合、使い慣れたインフラ上でアプリケーションの近代化を進めることができるため、段階的にノウハウを積みながら移行を行える点がメリットと言える。

より思い切った移行の手段として、既存のシステムをクラウドに合う形に再設計し、クラウド上でイチから作り直すというものもある。既存のアプリケーションが最新のビジネス要件を満たしていない場合、クラウドに移行してもメンテナンスに行き詰まりそうな場合はこのような思い切った選択も必要になるだろう。この手法においては、既存のシステムをただ作り直すのではなく、ビジネス要件の整理や運用プロセスの最適化などと並行して行うことが望ましい。

クラウド移行のパターン

いずれの手法にしても、最終的な目標はクラウドの能力を100%活用できるアプリケーションを構築することである。そのためにはクラウドサービスの特性を把握し、どのようにしてアプリケーションに統合していけばいいのかを知る必要がある。

本連載では、クラウドプラットフォームとしてMicrosoft Azureを使用して、クラウドネイティブ・アプリケーションを作成する方法を紹介する。プログラミング言語は主にJavaをおよびSpringフレームワークを用いるが、必要に応じて他の言語やフレームワークについても取り上げていきたい。