クラウド・ネイティブとは何か?導入のメリットや技術要素について紹介
本記事では、クラウド・ネイティブとはどのようなものなのか、導入した場合のメリットは何かについて解説します。
本記事では、クラウド・ネイティブとはどのようなものなのか、導入した場合のメリットは何かについて解説します。
知識・情報
2022/07/29 UP
- クラウド
- 技術
開発現場においてクラウドの活用が一般的となりました。近年では、このクラウド技術を徹底的に活用する、クラウド・ネイティブと呼ばれる概念が広まっています。
本記事では、クラウド・ネイティブとはどのようなものなのか、導入した場合のメリットは何かについて解説します。
クラウド・ネイティブとは
クラウド・ネイティブとは、どのようなシステムでしょうか。開発現場におけるクラウドとの関わり方が、どのように変わってきたかを踏まえて説明します。
クラウド・ネイティブはクラウドを徹底的に活用すること
クラウド・ネイティブとは、クラウド技術の利点を徹底的に活用することを指す言葉です。「クラウド・ネイティブなシステム」といった形で表現をします。
インフラからアプリケーションまでのすべてをクラウド上で実行することを前提としており、近年のクラウド技術の発展により実現できるようになりました。
クラウド・ネイティブは、クラウド利用を前提とした技術の導入で、より効率的なシステム構築ができると注目されています。クラウド・ネイティブを推進するのは、非営利団体であるCNCF(Cloud Native Computing Foundation)。コンテナの運用管理などを行なうソフトウェアであるKubernetesの開発や、企業がクラウド・ネイティブに向かうための指針の公開などの活動を行なっています。
注目される背景
クラウドが登場した2000年代半ばはオンプレミス環境が一般的で、必要に応じてシステムをクラウド上に載せ替えていました。その後、オンプレミスよりも低コストで運用することを目的としたクラウド利用が進み、初めからクラウドの活用を目的にシステムを構築する「クラウド・ファースト」の考え方が広まります。
そして近年のITシステムは、クラウド上で動かすことが一般的となりました。またユーザーの要求に応じて迅速な開発体制を整えることが求められるようになり、アジャイル開発 やDevOpsといった開発手法が登場します。コンピュータのリソースを柔軟に確保/削減できるクラウドはアジャイルやDevOpsと相性がよく、インフラ面から支えることで迅速な開発を実現しています。
クラウド・ネイティブで用いられる技術要素
クラウド・ネイティブを推進するCNCFは、クラウド・ネイティブの定義のなかで代表的な4つの技術を挙げています。各技術の概要について解説します。
マイクロサービス
マイクロサービスとは、アプリケーションを機能ごとに細かく分割し、各機能を連携させてシステムを動かす仕組みのこと。小さいサービス単位に分割することで、開発やテストが容易になり、障害発生時の分離やリソースの最適化がしやすいといったメリットもあります。
マイクロサービスを実現するには、個々のマイクロサービスを実行する土台となるコンテナ技術が不可欠です。コンテナは1つのOSで独立した実行環境を作るので、複数のOSを起動させる仮想マシンよりも柔軟できめ細かい対応が可能です。
なお、マイクロサービスについては、こちらの記事も併せてご覧ください。
マイクロサービスとは?開発に取り入れるメリットと関連技術を紹介
サービスメッシュ
サービスメッシュとは、コンテナ間の通信を管理するソフトウェアのこと。マイクロサービスは、サービス間の通信が複雑になってしまうというデメリットがあります。サービスメッシュは各サービスにプロキシを配置し、サービスの依存関係やトラフィックの制御を目的として導入します。細かく分散されたマイクロサービス同士の連携を容易にし、開発者が各サービスの開発に専念できるようになります。
宣言型API(Declarative APIs)
マイクロサービス同士は、API(Application Programming Interface)によって連携します。実行させるコマンドを指定する「命令型」ではなく、最終的に得られる結果を指定する「宣言型」を用いることが特徴です。
宣言型APIは最終的に実現したい結果の内容に関する指示を出すため、ユーザーが意図しないトラブルが起きた場合でもシステムが自律的に調整します。そのためユーザーがシステムを監視して状況判断し、コマンド操作する必要がありません。宣言型APIを用いることで、サービス間の連携箇所が多くなってもユーザーの負担を低減できます。
なお、一般的な命令型のAPIについては、こちらの記事も併せてご覧ください。
APIとはなにか?使われ方や活用するメリットを徹底解説
イミュータブルインフラストラクチャ
イミュータブルインフラストラクチャとは、直訳すると「変更不可能なインフラ」を意味します。従来はインフラ側でOSアップデートや設計変更などを行ないたい場合でも、アプリケーションの動作に影響する可能性があるため、気軽に実施できないという課題がありました。
※その場合、古いOSを使用し続けることになり、セキュリティ上の問題が放置されてしまいます。
イミュータブルインフラストラクチャでは、そもそも変更ができない+変更できない前提で設計するため、こうしたトラブルがなくなります。
仮に変更が必要な場合、新規にインフラを立ち上げ、本番環境を新しいインフラに切り替えてから古いインフラを破棄します。インフラの状態が途中で変わらず不変となるため、状態変更によるトラブルを回避できます。
クラウド・ネイティブでのシステムイメージ
ここまでを踏まえて、クラウド・ネイティブのイメージをつけるために、Kubernetesを使用したシステムのイメージを紹介します。
・システムはKubernetesで管理
・すべてのPodはイミュータブルである
⇒イミュータブルなため、状態変更によるシステムダウンなどを考慮しなくてよくなる
・さまざまなシステムがマイクロサービスとして動いている
⇒管理のためにサービスメッシュが必要になる
・とあるマイクロサービスで必要としているPod数の理想は5(設定しておく)
・例えば、Podが実際には4つしか起動していない場合、1つ足りないため、管理しているコントローラが1つ起動し、起動数を5に修正する
⇒宣言型APIによって自動的に管理される
必要なインフラ(Pod)は都度起動してマイクロサービスを立ち上げ、不要になったら落とします。また複雑化するマイクロサービスは、サービスメッシュが管理し、Podは必要数を設定することで維持し続けてくれるため、システム全体を安定して維持することが可能になります。
クラウド・ネイティブのメリット
クラウド・ネイティブのシステムを採用することで、より柔軟かつ迅速な開発が可能となります。具体的なメリットの内容について解説します。
自社にインフラが不要
システムをすべてクラウドで成り立たせることから、高性能なサーバーなどを自社で用意する必要がありません。インフラの運用や保守、トラブル対応などに人手がいらず、人件費の削減にもなります。
インフラや人件費などのコストの負担が小さいことから、スモールスタートに適しています。サーバーなどを自社で導入した場合、リソースの想定が間違っており過不足が生じてしまうリスクもあるでしょう。クラウドならリソース変更も容易であるため、最初は最小限の設備のみ導入し、あとから規模を拡大するという運用ができます。
必要なリソースのみ調達可能
クラウドを活用すると必要なリソースのみ調達でき、削減も容易です。ビジネス環境の変化が激しい昨今では、柔軟なリソース変更が行なえることのメリットは大きいでしょう。サーバーの性能向上やストレージの追加も簡単で、自動スケーリングや負荷分散機能といったクラウドサービス上の機能も活用できます。
またクラウドシステムによっては、実際の消費リソースに対して課金が発生するサービスもあります。消費リソースの低い用途であれば、使用料を最小限に抑えることが可能です。
障害や変更に強い
クラウド・ネイティブに用いられる各技術の特徴のため、障害や変更に強いこともメリットです。
マイクロサービスで各サービスが細かい単位に分散しているため、障害が発生した際に分離しやすく、被害が全体に影響しにくいです。マイクロサービス間の通信に宣言型APIを用いることで、仮に意図しない問題が発生しても、システムが自律的に解決することが期待できるでしょう。
さらに、インフラの状態が変更されないイミュータブルインフラストラクチャを導入しているので、OSアップデートなどによるトラブルも回避できます。
クラウド・ネイティブ導入の課題
クラウド・ネイティブを導入する際には、技術面で多くのハードルがあります。それだけでなく、組織や企業文化の変革も必要となるでしょう。
開発プロセスの変更が必要
クラウド・ネイティブを導入するには、マイクロサービスや宣言型APIといったクラウド環境に適した技術をベースに開発プロセスを変更しなければなりません。CNCFでは、クラウド・ネイティブ技術を活用するための推奨プロセスである「Cloud Native Trail Map」を公開しています。全部で下記の10ステップがありますが、ステップ3以降はすべてオプションであるため、状況に応じて選択すればよいでしょう。
1.コンテナ化
2.CI/CD(継続的インテグレーション/継続的デリバリー)
3.オーケストレーションとアプリケーションの定義
4.観測性と分析
5.サービスプロキシ、ディスカバリー、メッシュ
6.ネットワーク、ポリシー、セキュリティ
7.分散型データベース&ストレージ
8.ストリーミングとメッセージング
9.コンテナレジストリとランタイム
10.ソフトウェアの配布
組織や企業文化の変化が必要
クラウド・ネイティブの技術を活かそうとすると、設計や実装など開発プロセスの幅広い領域において変化が要求されます。既存のやり方を脱却して、新しい概念を受け入れなければメリットを十分享受できないため、組織全体の変化も求められます。
技術者だけでなく、経営陣も組織や企業文化の変化を受け入れ、導入を進める必要があります。しかし従来の方式を変えようとすると反発も大きく、利害の調整も必要となる場合もあるでしょう。これまで行っていた仕事が無くなる人も発生しますが、クラウド・ネイティブの意義を理解してもらい、新しい仕事へのシフトを進めなければなりません。
クラウドを前提として迅速な開発体制を構築
クラウド・ネイティブとは、クラウド技術をインフラからアプリケーションまで徹底的に活用するシステムのこと。クラウド環境の活用が一般的となったことで実現できるようになりました。
自社にインフラが不要で、柔軟なリソース変更が行なえるため、迅速な開発が可能となります。またマイクロサービスや宣言型API、イミュータブルインフラストラクチャなどの技術により、障害や変更に強いこともメリットです。クラウドのメリットを享受するためには開発プロセスを変更するだけでなく、新たな概念を受け入れるよう組織や企業文化も変化しなければいけません。