クラウドネイティブとは|概要や注目機能、従来のクラウドとの違いを解説

クラウドネイティブとは|概要や注目機能、従来のクラウドとの違いを解説

近年はクラウドの活用が当たり前となり、これに伴いクラウドネイティブという概念が生まれました。クラウドを最大限活用するにあたって、非常に重要なキーワードです。

是非とも理解してもらいたい内容ですが、まだまだ詳細が浸透しているとはいえません。今回は、クラウドを理解するにあたって重要となるクラウドネイティブについて、概要や今までのクラウドとの違いを解説します。

クラウドネイティブの概要と従来との違い

クラウドネイティブには基本なる考え方があるため、それらについて理解しておきましょう。

クラウドネイティブとは

クラウドネイティブとは、最初からクラウド環境の利用を前提として、アプリケーションを開発したり実行したりすることです。従来は、オンプレミスでアプリケーションを開発し、クラウドでリリースするようなことがありました。しかし、クラウドネイティブではこのような進め方ではなく、開発からすべてクラウド上で完結させるとイメージすれば良いでしょう。

クラウドを前提に開発されるため、クラウドの良さを最大限に引き出せます。例えば、オンプレミスでは難しいようなアーキテクチャを利用したシステムを設計できるのです。難しいイメージがあるかもしれませんが「クラウドを前提としたクラウドに特化した設計」と理解しておくと良いでしょう。

従来のクラウドとの違い

今まで一般的に利用されてきたクラウドは「オンプレミスをクラウドに置き換える」という考え方が中心でした。今まで、オンプレミスで動作させていたアプリケーションを、クラウド環境に移行するという考え方です。オンプレミスを廃止することで、ランニングコストを抑えたり障害を防いだりしやすくなることから、このような考え方が広まりました。

それに対して、クラウドネイティブには「置き換える」という考え方がありません。最初からクラウド前提で考えられているため、この点で大きく違っているといえるでしょう。オンプレミスで利用することは、最初から想定されていない考え方なのです。

クラウドネイティブで重要な5つの機能


クラウドネイティブの設計にあたっては、重要な要素がいくつもあります。その中でも「Cloud Native Computing Foundation」が提唱する5つの要素を紹介すると以下の通りです。

コンテナ

コンテナとは、ホストOSの環境(リソース)を活用して、仮想環境を立ち上げるための技術を指します。今まで、仮想環境といえば「仮想サーバー」を利用することが大半でしたが、現在はスムーズに構築できるコンテナが利用されるようになっているのです。

コンテナは、仮想マシンと比較すると、環境構築がスムーズかつ設定も簡単に済ませられます。また、設定ファイルが軽量であることから、同様のコンテナを異なる環境で構築することも簡単です。そのため「テスト用のクラウド環境」と「本番用のクラウド環境」で同じ環境を構築することは難しくありません。

また、個々のコンテナは独立しているため、何かしらトラブルが起きても影響範囲を最小限に抑えられます。例えば、プログラムの設計に問題があり無限ループが発生しても、他のコンテナで実行されているプログラムには影響を与えずに済むのです。

マイクロサービス

マイクロサービスは、アプリケーションを可能な限り細かい単位へと分解することを指します。細分化することによって、開発効率を高めたり処理を再利用したりできるようにするのです。また、それぞれの処理をコンテナで実行させるようにすれば、1つの処理に問題が生じても、別の処理に影響を与えることを防げます。

従来のシステムは「仮想サーバー」で実行されていたため、このような細分化が思うようにすすめられませんでした。1つのサーバーにすべてのアプリケーションが揃っていないと、スムーズに処理できない設計だったのです。しかし、クラウドネイティブでは最初からマイクロサービスを前提とし、細かく開発したり運用したりできるようになっています。

また、クラウドネイティブに限った観点では、マイクロサービスの一部をクラウドのサービスに置き換えることが可能です。例えば、データベースは自分たちで構築するのではなく所定のデータベースサービスを利用します。クラウドネイティブでは、一般的なマイクロサービスよりもさらに踏み込んだ細分化が求められます。

サービスメッシュ

サービスメッシュとは、サービス間で発生する通信を管理するための仕組みや考え方を指します。クラウドネイティブは上記の通りマイクロサービスが基本であり、どうしてもサービス間の通信が多くその関係性も複雑です。結果、マイクロサービスで得たはずのメリットが、通信の複雑性によって相殺される問題が生じます。

そこで、サービスメッシュを導入すると、このような複雑な通信や大量の通信による負荷を分散したり最適化したりできます。大量の通信が生じても、それらを適切に管理することができれば、クラウドネイティブの良さを最大限発揮できるようになるのです。

なお、サービスメッシュには通信の最適化だけではなく、暗号化認証などの機能が用意されているものがあります。これらを利用すると、通信の安全を担保することも可能となるのです。

宣言型API

宣言型APIとは「最終的にあるべき姿」を指示するAPIを指します。例えば「常にコンテナ5台体制でプログラムを処理すること」と定義されているならば、自動的にこの状態を担保できるようにAPIが動作しなければなりません。途中でトラブルなどが発生しても、宣言型APIでは自動的に普及することが求められるのです。

なお、宣言型APIに対応するものとして「命令形API」と呼ばれるものがあります。これは、何かしら外部から起動されることによって動作するAPIです。宣言型APIのように、状況を踏まえて自動的に動作するものではなく、自分自身で動作させることが求められるのです。

つまり、宣言型APIを採用していて、運用担当者などが監視したり必要に応じてリカバリーしたりする必要はなくなります。運用の手間が大きく軽減できるため、クラウドネイティブではこれを意識しなければならないのです。

イミュータブルインフラストラクチャ

イミュータブルには「不変的な」などの意味があり、直訳すると「不変的なインフラストラクチャ」という意味を持ちます。これは、同じインフラストラクチャを利用し続けるのではなく、その都度、新しい環境を立ち上げて古い環境を廃棄するという考え方です。

一般的に、オンプレミスのサーバを利用している場合、OSのアップデートやストレージの増設などさまざまな対応が求められます。ただ、変更の結果としてアプリケーションが動作しなくなることもあり、対応を見送るケースも多いことが現状です。例えば、本来はパッチを適用するべきですが、アプリケーションへの影響を懸念して適用しないなどが考えられます。

しかし、クラウドネイティブではこのような運用ではなく、常に新しい環境を構築して作業を実施する運用です。例えば、既存の環境にパッチを適用するのではなく、既存の環境をコピーしてそこにパッチを適用します。問題がなければこちらを「現環境」として扱い、使い終わった環境を「旧環境」として管理したり廃棄したりするのです。

このような運用はクラウドだからこそ実現できるものであり、インフラストラクチャに変更が生じないため「イミュータブル」と表現されます。

クラウドネイティブを採用する3つのメリット


クラウドネイティブの概要や機能を踏まえると、採用することで以下のメリットを感じられます。

運用の効率化

クラウドを前提としたアプリケーションであり、クラウドらしい運用の効率化を実現できます。例えば、オンプレミスよりもインフラストラクチャを短時間で変更したり、アプリケーションの変更を容易にしたりできるのです。

また、クラウド事業者によっては、運用を自動化するためのサービスを提供していることがあります。このようなサービスを活用できれば、運用をさらに効率化できるでしょう。人間が作業する時間を短くできるだけではなく、そもそも人間が対応する必要すらなくなるのです。オンプレミスでは難しい運用を、クラウドならば簡単に実現してくれます。

他にも、クラウドは「無停止」で動作しているものが多くあります。そのため、サービスを停止することなく、インフラストラクチャなどを変更できることが特徴です。オンプレミスでは、夜中に作業するなどの制約が生じやすいですが、クラウドネイティブならば制約も少なくて済みます。

コストの削減

すべてをクラウドに配置することで、コストの削減に繋げられるメリットがあります。特に、オンプレミスでアプリケーションを運用する場合と比較すると、大きくコストを削減できるでしょう。

例えば、クラウドネイティブでアプリケーションを開発したり運用したりすると、サーバーを購入する必要がありません。購入費用はもちろん、サーバーを設置するためのデータセンタなどのコストも不要になります。初期コストの削減にクラウドネイティブは寄与してくれるのです。

また、クラウドは従量課金制が基本であり、利用していない状況ではコストがほとんど生じません。対して、データセンタなどは利用していなくとも、契約している限り、コストが生じ続けます。初期コストも運用コストも、クラウドネイティブのほうが削減しやすいのです。

可用性の向上

マイクロサービスを軸とした設計とすることで、可用性の向上が期待できます。アプリケーションが小さな単位に分割されているため、問題が発生してもその部分だけを停止すれば良いのです。一般的な設計のアプリケーションは、全体を停止することが求められがちですが、クラウドネイティブならばそれを回避して他の部分は起動できます。

もちろん、非常にコアな部分にトラブルが発生すると、可用性は落ちてしまうかもしれません。例えば、ログイン機能に問題があると、他の機能に問題がなくとも運用することは難しいでしょう。そのため「クラウドネイティブ=可用性が高い」と一概に言い切れるわけではありません。

可用性の向上はメリットですが、これは可用性を意識した設計のもとに成り立つものです。設計に誤りがあると、メリットを活かせなくなるため、非常に応じて専門家にアドバイスをもらいましょう。

クラウドネイティブの採用には準備が求められる

解説したとおり、クラウドネイティブは最初からクラウドで開発したり運用したりすることを想定したものです。つまり、オンプレミスでの開発や運用のテストは基本的にできません。もし、現時点でオンプレミスを多用しているならば、環境の整備など事前準備が求められます。

例えば、クラウドに開発環境が整っていないならば、これを整備しなければなりません。アカウントを作成して環境を構築するだけではなく、必要に応じてVPNの設定なども必要になるでしょう。事前準備には、想像以上に時間が必要になることも考えられます。

また、クラウドはサービスの進化が激しいため、一度環境を構築したら終わりとは限りません。時には、改めて開発や運用の環境を整備し直すこともあり得ます。常に準備や修正がつきまとうため、採用にあたってはその点を認識することが重要です。

まとめ

クラウドネイティブの考え方について解説しました。最初から、クラウド環境での開発や実行を前提としたもので、今までのようにオンプレミスのアプリケーションをクラウドに移行するものではありません。根本的に違った考え方であり、正しい認識が必要です。

実装にあたっては、今回解説したとおり5つの機能を軸に考えると良いでしょう。明確な定義はありませんが、世界的に認知されている要素であるため、これを踏まえた設計とすれば失敗する確率が下がります。

SHAREこの記事をシェアする

admin