2019年に発生した新型コロナウイルス感染症のパンデミックからすでに2年以上が経過しました。withコロナの時代となった現在では、テレワークの普及によって、クラウドの需要がますます高まっています。
そして、Oracle Container Engine for Kubernetes(以下OKE)等、クラウドネイティブ・システムを実現するための機能が日々登場し、オンプレミス環境の既存システムをクラウド上へ移行する事例も増えています。
本ブログでは、そもそもクラウドネイティブとはいったい何なのかについて解説します。
クラウドネイティブとは
クラウドネイティブとは、Cloud Native Computing Foundation(CNCF)という団体から提唱されたもので、クラウド上で使用することを前提に、クラウドの利点に対して最適化したシステムを構築するための技術の総称です。単純にクラウドを用いただけのシステムはクラウドネイティブには該当せず、スケーラブルである等、"クラウドの利点を生かしている"システムがクラウドネイティブに該当します。クラウド上でKubernetesやDocker等のコンテナ技術を用いたシステムは、クラウドネイティブ・システムの代表例です。
CNCFでは、クラウドネイティブを下記の様に定義しています。
=========================================
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。
このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミューダブルインフラストラクチャ、および宣言型APIがあります。
=========================================
引用元:CNCF Cloud Native Definition v1.0
https://github.com/cncf/toc/blob/master/DEFINITION.md#日本語版
なお、クラウドネイティブとよく似た言葉として、クラウドファースト、クラウドバイデフォルトがありますので、あわせてご紹介します。
- クラウドファースト
システムを構築する際にクラウドを利用することを“優先して”検討する考え方になります。
- クラウドバイデフォルト
システムを構築する際に、クラウドを利用することを“第一に”検討する考え方になります。
一見、クラウドネイティブと変わらないように見えますが、クラウドファースト、クラウドバイデフォルトの場合はあくまでクラウドを利用することのみについての考え方になります。クラウドネイティブの場合は、クラウドファースト、クラウドバイデフォルトと違い、クラウドを利用することを“第一に”検討し、かつ“クラウドの利点を生かす”ことが条件になります。
クラウドネイティブの利点
クラウドネイティブの利点は下記の4つとなります。
- コスト削減
オンプレミス・システムの様に自社にサーバを持たなくてよいため、コストの削減につながります。また、DockerやKubernetes等のクラウドネイティブを使用しているため、仮想マシンを使用した場合と比べて低コストで実装できます。 - 環境構築・開発・削除の高速化
クラウドネイティブの特性上、仮想マシンで一からシステム構築を行うよりも高速に構築・削除ができます。このため、お客様の要求に応えられるシステム開発が迅速に行えます。 - スケーリングの柔軟性向上
オンプレミス・システムの場合は全て自分でスケーリングをする必要があり、スケーリングのためのコストも相応にかかりますが、クラウドネイティブの特性上、簡単かつ柔軟にスケーリングを行うことができます。 - 障害時の復旧高速化
クラウドネイティブでは、故障を前提とするDesign for Failureという考え方でシステムが設計されており、障害を起こさないことよりも、障害発生後の復旧を重要視しています。例えば、仮想マシンの場合は障害が発生するとOSレベルの復旧が必要になりますが、クラウドネイティブの場合はコンテナの再作成のみで済むため、簡単かつ高速に復旧ができます。
クラウドネイティブの代表的な技術
クラウドネイティブの代表的な技術例を5つご紹介します。
コンテナ
仮想化技術の一種で、プログラム実行環境とアプリケーションをパッケージ化した一式のことを指します。1つのアプリに対して都度OSを用意する必要が無いため、仮想マシン上にアプリを導入する場合と比べて軽量で構築可能です。コンテナは、Docker等のコンテナエンジンで管理します。
マイクロサービス
1つのシステム内に独立した小さなサービス群を組み合わせた集合体です。複数のコンテナを用いて1つのシステムを構築した場合もマイクロサービスに当たります。それぞれのサービスが独立しているため、サービスごとにチームを分けて開発することも可能です。
サービスメッシュ
マイクロサービス構築の際、各サービス間の通信が複雑になることで課題が発生します。このマイクロサービス特有の課題を解決するための独自の機能を提供する概念がサービスメッシュです。
イミューダブルインフラストラクチャ
構築後にソフトウェアのバージョンアップやパッチ適応を必要としない構築方式です。コンテナに対してソフトウェアのバージョンアップやパッチ適応を行うことは無いため、コンテナ技術はイミューダブルインフラストラクチャに該当します。
宣言型API
宣言型APIとは、実行するコマンドやステップを逐一明記する命令型APIと違い、アプリケーションのあるべき姿を明記し、システム側で自律的に動作、制御させるAPIです。コンテナでは、YAML形式という宣言型APIでマニュフェストファイルを作成します。
Oracle Cloud Infrastructureのクラウドネイティブ・サービス
Oracle Cloud Infrastructureでは、以下の様なクラウドネイティブ・サービスがあります。
Oracle Container Engine for Kubernetes (OKE)
OKEは、OCIで用意されているマネージド・サービスの一種で、OCI側でKubernetesの環境が用意されるため、クラウド上で手軽にコンテナ技術を使用できます。また、OCIのコンソール画面から自由にスケーリング可能です。
コンテナ・レジストリ
OCIで用意されているマネージド・サービスです。Docker等のコンテナエンジンで使用できるコンテナイメージを管理するためのリポジトリを作成・使用できます。リポジトリは認証不要で自由に使えるパブリック・リポジトリと、認証が必要な代わりにリポジトリに格納したコンテナイメージをセキュアに使用できるプライベート・リポジトリが存在します。
イベント・サービス
OCIで用意されているマネージド・サービスです。CNCFが提唱している Cloud Eventsという、クラウドにおけるイベントを通知する際の指標に準拠しています。Functionsで通知する際のトリガーを、Streamingに書き込んだり、Notificationsを送信したりして、リアルタイムにアクションを実行するルールを作成できます。
おわりに
クラウドネイティブの登場により、従来のオンプレミスやクラウドファースト、クラウドバイデフォルトよりも低コストでスケーラブルなシステムをスムーズに構築することが可能となりました。
また、アジャイルで臨機応変な変更が可能であるコンテナ技術を利用するアプリケーション開発が一般化し、いずれはクラウドネイティブ・システムが常識化することでしょう。
今後、クラウドネイティブ・システムの需要はますます増えるとみられることから、クラウドネイティブに対応できることが求められます。クラウドネイティブの不明点がありましたら、システムエグゼにご相談ください。
- カテゴリ:
- エンジニアリング