DX
クラウドネイティブとは|類似語との違いやメリットを解説
クラウドネイティブとは、クラウドの利用を前提としてクラウドの利点を活用するアプリケーションやシステムを指します。
クラウドネイティブを活用することでアプリケーションとインフラのメンテナンス管理を分けることができたり、ランニングコストを最適化できたりするメリットがあります。
クラウドネイティブとは「クラウドの利点を活用するシステム」
クラウドネイティブは、プラットフォームにクラウドを採用するだけではなく、クラウドの利用を前提として考え、クラウドならではの特徴を活かすように設計されたシステムのことです。
従来のシステムはオンプレミス環境で動かすことを前提に作られており、オンプレミス環境に最適化されたシステムがそのままクラウド環境へ移行されていました。
クラウドが普及したことで、クラウド環境の利点を最大限活用するように提唱されたのが「クラウドネイティブ」です。
クラウドネイティブでは、仮想化技術やサービスを分割する手法などを利用し、クラウドの利点である柔軟性や可用性、拡張性を最大化しています。
クラウドネイティブを推進する団体「CNCF」とは
CNCF(Cloud Native Computing Foundation)とはクラウドネイティブコンピューティング技術を定義し、推進している非営利団体です。
CNCFは2015年にLinux Foundationのプロジェクトとして創設されました。
CNCFによるとクラウドネイティブは下記のように定義されています。
クラウドネイティブの技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャー、および宣言型APIがあります。
これらの技術を活用することにより、回復性、管理力、および可観測性のある疎結合システムが実現します。
これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
CNCFは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えています。
私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。
出典:CNCF Cloud Native Definition v1.0
クラウドファーストとの違い|クラウドを「優先」するか「前提」とするか
クラウドネイティブと混同されがちな言葉に「クラウドファースト」があります。
クラウドファーストとはシステム構築の際に、オンプレミス環境ではなくクラウドの利用を優先することです。
クラウドネイティブでは、クラウドの利用を前提としたうえで、クラウドの利点を活かすためにどのようにシステムを構築するかということを考えます。
クラウドファーストはシステムの導入を検討する段階での方針であり、クラウドネイティブはシステムを開発する際の設計のあり方を示すものです。
クラウド・バイ・デフォルト | 政府情報システムにおけるクラウドの活用方針
クラウドネイティブと似た言葉に「クラウド・バイ・デフォルト」があります。
クラウド・バイ・デフォルトとは、「政府情報システムにおいて、クラウドサービスの利用を優先する」という国の方針です。
クラウド・バイ・デフォルトは2023年の「政府情報システムにおけるクラウドサービスの利用に係る基本方針」では下記のように定義されています。
政府情報システムは、クラウド・バイ・デフォルト原則、すなわち、クラウドサービスの利用を第一候補として、その検討を行うものとする。
引用:政府情報システムにおけるクラウドサービスの利用に係る基本方針
クラウド・バイ・デフォルトは国や地方公共団体のデジタル化・DX化を推進するためにクラウドサービスの利用を第一とする方針です。
「クラウド導入における方針」という意味では、クラウドファーストに近い考え方であるといえます。
クラウドネイティブの3つのメリット
クラウドネイティブの考え方を用いることで下記3つのメリットがあります。
- 初期費用やランニングコストの削減
- 障害時に影響を受けづらく、管理が容易
- 修正やアップデートが簡単
初期費用やランニングコストの削減
クラウドネイティブでは、クラウドサービスを利用することで下記のようにコストを削減できます。
- ハードウェアの購入費用が不要
- 必要に応じてリソースを増減させ、ランニングコストを削減できる
- 不要になったら契約を終了できる
さらにクラウドネイティブによってリソースの最適化を図れるため、ランニングコストの削減も可能です。
障害時に影響を受けづらく、管理が容易
クラウドネイティブはマイクロサービスにより複数の小さなサービスに分割されているため、障害時に影響を受けづらいというメリットがあります。
また、障害からの復旧時にも、コンテナの再作成のみで済むため、簡単かつ高速に復旧が可能です。
リクエストが集中した際は、処理負荷を分散させることが容易にできます。
障害が発生した場合、原因となったサービスを切り離すことで、障害の影響を最小化できるのも強みでしょう。
また、マイクロサービスにより他のサービスへの影響を限定することは、障害の復旧という視点から見てもメリットとなります。
修正やアップデートが簡単
マイクロサービスにより複数の小さなサービスに分割されていることで、他のサービスへ影響することなく修正やアップデートが可能になります。
オンプレミス環境の場合、修正版をリリースするためにシステムを停止しないといけないため、夜間などのアクティブユーザーが少ない時間帯にリリースするのが一般的です。
クラウドネイティブであれば、サービスを停止することなく修正やアップデートができるため、ユーザーの業務を停止せずに済み、担当者が夜間に作業をする必要もありません。
クラウドネイティブのデメリット
クラウドネイティブにはデメリットも存在します。
デメリットも適切に把握したうえで、導入時や導入後のフローを検討する必要があります。
導入の際はクラウドネイティブの知識やスキルを持った人材を確保するなどして、デメリットを適切に把握し、対応できるように準備しておきましょう。
セキュリティ対策や環境設定が漏れてしまう可能性がある
クラウドネイティブでは利用するクラウドサービスによって対応しなければならない範囲が異なります。
そのため、セキュリティや環境設定をどこまでおこなうべきかわかりにくいというデメリットがあります。
理由は下記2点です。
- 開発者が環境を簡単に追加できるため、管理が行き届かないリスクがある
- マイクロサービスによりサービスが分割される分、構成が複雑になる
セキュリティ対策や環境設定に漏れが発生すると、情報漏洩やシステム障害などの重大なトラブルを引き起こす可能性があります。
設計書やセキュリティポリシーを作成し、運用ルールを明確化することが大切です。
クラウドネイティブを構成する技術要素
CNCFではクラウドネイティブを構成する技術要素として下記の5つを挙げています。
- コンテナ
- マイクロサービス
- サービスメッシュ
- イミュータブルインフラストラクチャー
- 宣言型API
クラウドネイティブを構築するためには、これらの5つの技術に対する理解が必要です。
それぞれ詳しく解説します。
コンテナ
コンテナとは仮想技術の1つで「ホストOS上に複数の仮想環境を構築すること」を指します。
従来の仮想化技術では、1つのOS上に複数のゲストOSを設置していたため、構築に時間がかかったり、ゲストOS分のリソースを消費したりしていました。
しかし、コンテナではホストのOSを利用して仮想環境を動作させます。
これにより、ゲストOS分のリソースを削減し、処理速度を高速化できます。
マイクロサービス
マイクロサービスとは、アプリケーションを複数のサービスに分割し、それぞれのサービスを連携させてシステムを動かすことです。
機能ごとにサービスを分割することで、アプリケーション内の各機能が独立したプロセスとして実行されるため、アプリケーション全体を停止させずに機能を更新できます。
サービスごとに独立して動作できるため、開発・テストを複数人で並行して実施でき、開発期間を短縮できる点もメリットです。
サービスメッシュ
サービスメッシュとは、サービス間の通信を管理するソフトウェアです。
サービスメッシュがサービス間の通信をすべて管理することで、複雑な通信コントロールが可能になります。
サービスメッシュの具体的な機能は、トラフィックコントロールや通信負荷の分散、通信のセキュア化などです。
イミュータブルインフラストラクチャー
イミュータブルインフラストラクチャーは、本番環境と同じ環境を複製し、複製した環境にアップデートを適用したうえで本番環境として切り替えることです。
オンプレミス環境の場合、OSのアップデートやセキュリティの更新が原因で不具合が起きることがあり、不具合を恐れてアップデートをおこなっていないケースも少なくありません。
イミュータブルインフラストラクチャーを使用すれば、本番環境に影響を与えずにアップデートを試すことができ、万が一問題が発生した場合は環境を容易に元に戻せます。
イミュータブルインフラストラクチャーは、システムの安定運用を可能とする機能です。
宣言型API
宣言型APIとは、目的とする状態をサービスにAPIで指示し、常に指示された状態を保つ仕組みです。
宣言型の対照となるのが命令形で、宣言型が「目的とする状態」を指示しているのに対して、命令形は「具体的なコマンド」を指示します。
命令形の場合、コマンドにエラーが起きるとシステムが停止してしまう可能性があります。
宣言型APIでは「目的とする状態」に向けて自律的な動作や制御がおこなわれるため、エラーによるシステムの停止を防ぎ、管理者がコマンドを実行する手間も省略可能です。
まとめ
クラウドネイティブは、アプリケーションの実行やシステムの開発をする際にクラウドの利用を前提とし、クラウドのメリット を利用することを指します。
クラウドネイティブでは初期費用の削減やランニングコストを最適化できるほか、障害時の対応やシステムのアップデート、設定の更新が容易にできます。
クラウドの利点を最大化するために、クラウドネイティブの意味や特徴を把握したうえで、システムを設計しましょう。