SmartCloud コラム

クラウドネイティブがもたらす未来

2020.01.08DevOps入門

クラウドファーストからクラウドネイティブへ

DevOpsを推進していく上で、「クラウドネイティブ」というキーワードが出てくることが増えてきました。クラウドネイティブとはどのようなことなのでしょうか。

 

devaas-08.jpeg

クラウドファーストのその先に

クラウドネイティブに似たキーワードで「クラウドファースト」や「クラウド・バイ・デフォルト」という言葉があります。これらは従来のオンプレミスなシステム環境を自前で構築・所有するのではなく、まずクラウドで実現することを考えるというアプローチです。以前に比べるとクラウド利用に対する抵抗感がなくなってきたこともあり、これらの考えは一般的に実践されるようになってきたといえます。

クラウドネイティブの定義

クラウドネイティブという言葉は、「Cloud Native Computing Foundation」(CNCF)が定義した言葉です。CNCFはコンテナオーケストレーションツールである「Kubernetes」(K8s)を中心にクラウドネイティブを推進している団体です。

そのため、クラウドネイティブとは端的に言ってしまえば「コンテナを活用したシステム」のことですが、単にコンテナでアプリケーションを動かせばよいというわけではなく、様々な要素が合わさって、はじめてクラウドネイティブということができるというわけです。そこで、まずはやや難解ですが、CNCFの定義を以下に引用します。

クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。

これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。(以下略)
https://github.com/cncf/toc/blob/master/DEFINITION.md

 

これを読んだだけでは、様々な技術を取り入れればクラウドネイティブといえる、と解釈されてしまいます。しかし、すべてを一気に取り入れることはできません。そこで別途用意されている「CloudNative Trail Map」(クラウドネイティブへの道筋)も見てみましょう。

 

「宣言型」

 クラウドネイティブの定義の中に「宣言型API」という、あまり見慣れない言葉があります。宣言型は、命令型と対比される概念です。命令型とは、我々が通常コンピューターを使う際に行っている方法で、アプリケーションに対して具体的に実行させたいことを「命令」する方法です。1つ、ないし複数の命令が組み合わさって、我々は必要な「結果」を得ることができます。
それに対して、宣言型はこの「結果」を宣言する形で動作させるやり方です。たとえばK8sでは、「コンテナを3つ含んだPodを起動する」といった宣言を行うと、その宣言に従った状態になります。何らかの理由でコンテナが停止してしまい、宣言したのと違う状態になった場合、自動的にコンテナを別途起動して宣言通りの状態に復帰しようとします。システムが自律的に正常な状態を維持しようとするので、運用管理者はシステムの状態を常に監視したり、細かな命令を沢山実行したりしなくてもよいことになります。

CloudNative Trail Mapを読み解く

Trail Mapでは10のステップに分かれています。重要なポイントを抜き出してみましょう。(CNCF_TrailMap)
 

1. コンテナ化
  クラウドの特徴として必要なリソースを必要なだけ利用できる、という点が挙げられますが、コンテナはクラウドにおいて重要な技術となりつつあります。通常のクラウドでは仮想マシンを活用するのが普通になりつつありますが、クラウドネイティブではコンテナの活用も必要です。
  >>関連コラム:「コンテナ」との付き合い方

 

2. CI/CD
  本コラムでもDevOpsを実現するための重要な考え方としてCI/CDを何度も取り上げてきました。クラウドネイティブを実現する上でも、CI/CD、DevOpsの開発手法を取り入れることは重要だといえます。
  >>関連コラム:DevOpsを実現するには

 

3. オーケストレーション
  俊敏にCI/CDのパイプラインを廻して、次々とアプリケーションをデプロイしていくには、コンテナを管理する基盤としてK8sのようなコンテナオーケストレーションツールの活用も必要でしょう。
  >>関連コラム:コンテナを使うならKubernetesの活用を

 

4. 監視
  システムの状況を監視し、可視化、分析可能にすることはクラウドネイティブに限らずシステム運用において重要なポイントです。

 

まず、クラウドネイティブの基本として押さえておきたいのはこれらの事項でしょう。他にも様々な技術が取り上げられていますが、これらはクラウドネイティブ独自というわけでもありませんので、必要に応じて取り入れていけばよいでしょう。

なぜクラウドネイティブなのか

このように、クラウドネイティブは様々な技術に支えられて実現されるもの、と分かりますが、これらは手段であり目的ではありません。なぜクラウドネイティブを実現しなければならないのでしょうか。

 

1つは、ビジネスの要求に応えられるアプリケーションを俊敏に開発できるようにするためといえます。その言葉通りの「アジャイル(俊敏な)開発」や、「DevOps」が求められることと同じ考え方です。
たとえば、現在のビジネスでは、Webアプリケーションやスマートフォンアプリを活用するのが当たり前になりつつあります。さらにビジネスのスタイルも企業対企業のBtoBだけでなく、企業対顧客が直接繋がるBtoCも大きな広がりを見せており、より使いやすいアプリケーションが求められます。これらのニーズを満たすのが、開発手法としてのアジャイルやDevOpsであり、インフラとしてのクラウドネイティブだといえます。

 

もう1つはクラウドの特性であるスケーラビリティを最大限活かせることです。たとえばビジネスの成長に合わせてシステムの性能を向上させていくには、単にCPUやメモリを追加していく「スケールアップ」だけでなく、並列実行性を高めていく「スケールアウト」を行う必要があります。コンテナ上でアプリケーションを実行することは、このスケールアウトを容易に実行する手段といえます。
また、並列化はシステムの冗長性を高め、堅牢にしていく手段でもあります。

 

他にも自動化を推し進めることでシステム運用のコストを低減できるなど様々なメリットがありますが、いずれにしてもウォーターフォール型の開発やオンプレミスに代表されるような従来のシステムに対する考え方から脱却する必要があるでしょう。

”文化”を変える

アジャイルやDevOpsを取り入れるには「文化を変える」必要があるのと同様、クラウドネイティブなアプリケーション開発を行うにも文化を変えていく必要があるといえます。

 

CNCFの定義に出てくる「イミュータブルインフラストラクチャ」は分かりやすい例でしょう。従来であれば、構築したシステムにパッチを当てることで継続的に使用するのが普通のシステム運用管理です。しかし、イミュータブル(不変の)インフラストラクチャでは、文字通り構築した後のシステムには手を加えず、パッチを当てる必要がある場合には自動化を活用して新しい環境を再度構築し直すという、まったく異なるアプローチを採るのです。

 

このように、今までのやり方とはまったく異なる手法を積極的に取り入れていく姿勢を求められるのが、クラウドネイティブな考え方ということではないでしょうか。

 

 


(日本仮想化技術株式会社 代表取締役社長兼CEO/宮原 徹)

  

 ※記載されている会社名、製品名、サービス名は各社の商標または登録商標です。

 

関連する記事


ページトップへ

お問い合わせ

「SmartCloud」問い合わせ

資料請求・お問い合わせ

ページトップへ