近年のシステムやアプリケーション開発において、クラウドネイティブのアプローチが注目されています。これは、クラウドサービスのメリットを最大限に生かした開発手法で、従来のオンプレミス環境より、優れた拡張性、効率性、障害耐性が期待できます。
このコラムでは、クラウドネイティブとは何かを解説するとともに、代表的な技術とメリット、さらにセキュリティ面などのデメリットをみていきます。
クラウドネイティブとは、クラウドコンピューティングの利点を最大限活用するために構築・運用されるシステムやアプリケーションの考え方のことです。
従来のオンプレミス環境では必須だった物理サーバーを利用せず、クラウドサービスの利用を前提に開発を行うことで、クラウドの利点である拡張性に優れたシステムおよびアプリケーション開発が可能となります。
いわゆる、クラウドイネーブルド(オンプレミスでの運用を前提として構築したシステムやアプリケーションを基本的な考え方を変えずにクラウド上に移行した状態)と比べると、クラウドネイティブは、スケールアウトによる性能アップ、障害時のサービスの継続性、あらゆる面での自動化が期待できます。
昨今、注目されるようになった考え方に、クラウドサービスを優先的に利用する「クラウドファースト」があります。クラウドネイティブとはどのような違いがあるのでしょうか。
クラウドネイティブを推し進めている団体である「Cloud Native Computing Foundation」(CNCF)は、2018年にリリースした「CNCF Cloud Native Definition v1.0」で、クラウドネイティブを次のように定義しています。
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
出典:CNCF Cloud Native Definition v1.0
|
クラウドネイティブは、従来型のシステムが混在するクラウドファーストとは違って、クラウドサービスのみを利用して構築されます。それにより、クラウド最大のメリットである「スケーラビリティ(拡張性)」を最大化し、より効率的なシステムやアプリケーションの構築が可能になることが示されています。簡単にいえば、クラウドファーストよりもクラウドネイティブのほうが、より拡張性が高く効率的といえるでしょう。
クラウドネイティブを実現するには、頻繁な変更にも少ない労力で対応できるシステムを利用することが大切です。変更に強いシステムを構築するために必要な、クラウドネイティブに適したシステムには次のようなものがあります。
コンテナとは、サーバー内を整理して開発や管理を効率的に行えるようにする仮想化技術のことです。仮想環境の構築にはホストOSの環境を使うことで、環境の構築や管理を容易にし、開発や運用にかかるコストや手間を少なくできます。
少ないリソースで動作するため、同じサーバーの容量であればよりたくさんのアプリケーションを実行できます。また、ひとつのコンテナで問題が起きても、サーバー全体に影響を与えません。
マイクロサービスとは、さまざまな機能を持った小さなサービスを組み合わせて、大きなサイトやアプリケーションを構築するソフトウェア開発技法のことです。それぞれのサービスは自律して動き、HTTPリソースAPIなどの軽量かつシンプルな方法で通信します。
従来のモノリシックアーキテクチャに比べて、改修やスケールアウトがしやすく、障害が発生しても影響を小さく留めやすいことなどが特長です。
サービスメッシュとは、マイクロサービス間で行われる通信を、インフラストラクチャ側で管理する仕組みのことです。
マイクロサービスでは、小さなサービスを組み合わせて大きなサイトやアプリケーションを構築しますが、多数のマイクロサービスが相互に通信を行うことから通信制御が複雑になります。そこでサービスメッシュを用いると、通信トラフィックが最適化され、通信負荷も分散されます。
宣言型APIは、マイクロサービス間の連携に使用されるAPIです。宣言型APIは、最終的に得たい結果を「宣言」することで、サービス側が自律的にその結果を得られるように動作します。
従来のAPIと異なり、開発者はその状態を達成するための手順を詳述する必要がなく、仮に途中でエラーが起こっても、別の方法で結果が得られるように稼働します。そのため、運用管理者が監視しつづける必要がなくなり、運用の省力化を実現します。
クラウドネイティブを実現するために、他にもさまざまなシステムが使用されています。以下はその一例です。
・CI/CD
・イミュータブルインフラストラクチャ
・サービスディスカバリー
・分散データベース/ストレージ
クラウドネイティブにはさまざまなメリットがあります。ここでは、代表的なメリットを4つご紹介します。
クラウドネイティブのアプローチは、比類のないスケーラビリティを提供し、アプリケーションがリアルタイムの要求に基づいてリソースを動的に調整できるようにし、最適なパフォーマンスとコスト効率を保証します。
クラウドネイティブで構築されたシステムやアプリケーションは、従来のオンプレミス環境で構築されたものに比べて機能の追加・更新(アップデート)が容易にできます。
マイクロサービスを利用することで、サービスを停止せずにアップデートや修正などができるようになるため、今までメンテナンスのために設けていたサービス停止期間がなくなり、ユーザーの利便性が向上します。
また、オンプレミス環境で構築されたシステムやアプリケーションのように、夜中にサービスを停止してメンテナンスを行う必要もなくなるため、業務の負担も軽減するでしょう。
障害に強いこともクラウドネイティブのメリットです。さまざまな機能を持ったマイクロサービスを組み合わせて構築されているため、障害が起こっても全体に波及しづらい構造になっています。
障害の原因になっているマイクロサービスのみをピンポイントでチェックすればよく、その対応をしている間もソフトウェアは稼働を続けられます。サービス利用者に迷惑をかけることもなく、損失を最小限に留めることができるでしょう。
クラウドネイティブでは、クラウドサービスをフルに活用してシステムやアプリケーションを構築するため、オンプレミス環境では必須だったサーバーを用意する必要がなく、サーバーの設置や維持に費用がかかりません。
クラウドサービスは原則として従量課金制となっており、利用した分だけ料金を支払います。また、スケールアウトも容易なため、サービスを小さく低コストではじめて、徐々に大きく育てていく手法も取れます。
クラウドサービスが置かれているサーバーでトラブルが起こることはあり得ますが、その際も提供事業者が対応にあたるため、慌ててメンテナンスを行う必要はありません。
さまざまなメリットを享受できるクラウドネイティブですが、次のようなデメリットもあります。
・移行に大きな労力がかかる
・セキュリティの設定が難しい
・クラウドネイティブに精通したエンジニアが不足している
・コストが高くなることがある
従来の環境からクラウドネイティブに移行する場合、システムの設定や考え方、つまりアーキテクチャをすべて変更する必要があり、大きな労力と意識改革が必要になります。また、マイクロサービスを組み合わせて利用することから、セキュリティの調整の難易度が高く、従来のオンプレミス環境よりも設定は難しいとされています。
そして、こうした移行作業や、セキュリティ設定を確実に行うためには、クラウドネイティブに精通したエンジニアの確保が必要となりますが、まだ新しい技術であることから人材が不足している状況です。
また、クラウドサービスは従量課金制のため、大規模システムになるとオンプレミス環境のほうが維持コストが安くなるケースがあることにも注意が必要です。導入前には慎重な試算が必要といえるでしょう。
クラウドネイティブに精通したエンジニアは、まだ多くありません。分類としては「クラウドエンジニア」となりますが、クラウドネイティブの構築に必要な知識はさらに広くなり、それゆえ育成にも難しさが伴います。
クラウドネイティブに携わるエンジニアは、以下のような知識が必要です。
・AWSやAzureなどクラウドサービスへの理解
・コンテナ技術の習得
・サーバー・ネットワークの知識
・マイクロサービスに関する最新の知識
メインの業務はインフラ設計ですが、知識ベースとしてさまざまな知識が必要となり、開発体制によってはセキュリティに関する専門的な知識も求められるでしょう。
クラウドエンジニアとして経験を積んでいくことが必須といえ、スキルの習得には一定の時間がかかりますが、現状、クラウドネイティブに精通したエンジニアの需要は今後も増えるものと予想されており、時間をかけるだけの意味があるといえそうです。
従来のオンプレミス環境から、クラウドネイティブ環境に移行することで、サービスの柔軟性や、コスト効率の向上が実現し、市場の変動に迅速に対応できるようにもなるでしょう。
一方で、移行の労力やセキュリティの課題など、考慮すべきデメリットも存在し、また導入に際しては意識的な改革も重要です。クラウドネイティブ環境のメリットを最大限享受するためには、組織文化の変化も必要になるといえるかもしれません。
掲載日:2024年4月16日