クラウドネイティブは、クラウドの持つスケーラビリティ・レジリエンスを活用し、その技術を通じて迅速なサービス価値向上を実現するための指針です。開発者はクラウド時代に合わせた技術や開発手法への理解が求められます。
この記事ではクラウドネイティブの概念を説明し、ご自身の組織でどうやって展開するべきか、その基礎知識を身につけていただけます。
コンテナやマイクロサービスなど、クラウドに関するさまざまな技術を活用するソフトウェア開発のアプローチがクラウドネイティブです。近年多くの企業でオンプレミス環境からクラウドへの移行が進んでいます。クラウドネイティブはそこからさらに一歩踏み込み、クラウドをどう活かすかについてさまざまな手法やツールを紹介しています。
2015年、LinuxFoundationのプロジェクトの一つとしてCloud Native Computing Foundation(CNCF)が設立されました。CNCFはコンテナ技術推進を目的としており、KubernetesをGoogleが寄贈しています。CNCFではクラウドネイティブの定義をGithub上で公開しています。
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
CNCFのメンバーには世界中の名だたるIT企業が名を連ねていることもあり、この定義が世界共通の定義として認識されつつあります。
クラウドネイティブを実現するためには、業務システムのクラウド移行が必要です。クラウドリフトとクラウドシフトはその代表的な移行方法です。
クラウドリフトはオンプレミス環境上で稼働する仮想マシンをそのままクラウド上に載せ替えます。クラウドを提供するIaaSではOS・データベース・ミドルウェアなど、業務システムに必要な実行環境を幅広くサポートしています。またオンプレミス環境からの移行ツールもクラウド事業者から提供されており、ほぼ自動でのクラウド移行が実現できます。一方デメリットとして、オンプレミス環境で利用している実行環境がそのまま引き継がれるため、移行後もアップデート作業など運用管理業務が残り続けます。
クラウドシフトは業務システムをクラウド上で1から作り直す移行方法です。最新の実行環境にあわせてアプリケーションの設計・開発を行うため、クラウドリフトに比べて移行にかかる期間・コストが膨大です。一方で一度移行が完了すれば、自動化などで運用管理業務の時間を大幅に削減できます。
クラウドファーストはシステム開発を行うにあたって、クラウド利用を第一とする考え方です。政府や官公庁のシステム開発ではクラウド・バイ・デフォルトとも呼ばれます。クラウド・バイ・デフォルトは2018年6月に日本国政府が発表した「政府情報システムにおけるクラウドサービスの利用に係る基本方針」で提示されました。クラウドファーストは、クラウド導入そのものを目的とした考え方です。そのためクラウドファーストとクラウド・バイ・デフォルトを推進した先に、クラウドネイティブという考え方があると言えます。
クラウドネイティブが提唱された背景には、クラウド技術の発展だけではなく、クラウドに関わる開発手法・プロジェクト・概念の存在があります。これらは近年のソフトウェア開発現場の共通言語として急速に広まりつつあります。
インターネットとクラウドによりビジネス環境は大きく変化しました。従来、買い切り型で提供されていたITサービスは、定額型のサービスが一般的になりつつあります。このようなサービスでは、利用傾向や顧客の要望が運営企業に日々フィードバックされます。フィードバックを素早く・継続的にサービスに反映することを目的とした開発手法が、アジャイルとDevOpsです。
一般的に、アジャイルは開発プロジェクトの期間を機能単位で短く区切ります。その結果、機能のリリース頻度が多くなり、顧客からのフィードバックを迅速に集め、開発に反映できるのです。またリリース後には必ずチーム内で振り返りを行い、開発プロセスそのものについても改善を行います。
DevOpsは開発と運用の距離をできる限り縮めて組織的な課題を解決し、迅速なサービスの価値向上を行うソフトウェア開発手法です。従来、ITサービスは一度開発が完了すると、そこから先は運用担当が管理を行なっていました。しかし定額型のサービスでは、開発と運用の業務が交互に発生します。そのためシステム開発者・インフラ担当者・サポートチームなど異なる職種の壁を越えて、サービスの開発と運用の課題を定義します。そして組織文化の変化に伴う改善活動を全員で行うのです。
柔軟にコンピュータリソースの確保や削減ができるクラウドは、アジャイル・DevOpsと非常に相性がいい開発手法です。クラウド・アジャイル・DevOpsを適用することで、状況の変化が非常に早いビジネス環境にも追随して価値提供を行えます。
CNCFは2015年の設立以来、117のクラウド技術に関するプロジェクトをホストしています。これらのプロジェクトは成熟度のレベル順にSandbox、Incuvated、Graduatedとして分類されます。CNCFがこれらのプロジェクト運営を行うことで、クラウド技術に関する世界標準が示されているのです。特にGraduatedに含まれるKubernetesはクラウドの代表的な技術です。クラウドネイティブを自社で推進する上でも、CNCFがホストするクラウド技術は必ずチェックしておきましょう。
コンウェイの法則は「システム設計は、組織構造を反映させたものになる」という概念です。例えば一つの大きな組織で開発したシステムはモノリシックな構成となります。一方で複数の小さなチームで開発したシステムは、小さなシステムが連携するマイクロサービスの形となります。この考えを逆手にとって、システム設計にあわせて組織構造を反映させる考えが「逆コンウェイの法則」です。クラウドネイティブを推進する上で、システム設計は開発効率に大きな影響を持ちます。組織体制と理想とするシステム設計に乖離があり、システム設計があらぬ方向に進まないように、組織とシステム両面の検討が必要です。
コンテナやマイクロサービスはクラウド時代の代表的な技術です。クラウドが普及したことで、多くの概念やソフトウェアが新たに登場し、今後もその数は増えることが予想されます。ここではCNCFが定義するクラウドネイティブの中でも紹介された、5つのクラウドに関する技術を紹介します。
コンテナはホストOSの環境を利用して、アプリケーション環境に必要な仮想環境を構築する技術です。仮想マシンに比べて環境構築が高速かつ、設定ファイルが非常に軽量で再配布が容易です。従来、仮想環境構築にはOSのインストールが必要で、立ち上げにかかる時間やファイル容量が膨大でした。コンテナはその課題を解決する技術として広く普及しています。
マイクロサービスは独立した複数の小さなシステムで、一つのサービスを構成するソフトウェアアーキテクチャです。個々のシステム間はHTTPやgRPCなどで通信を行います。ここのシステムを独立して開発・運用できるため、並行した機能開発や高頻度のリリース、システム毎に異なる技術選定などを実現できます。
一方でマイクロサービスはシステム数に比例して実行環境を構築しなければなりません。これらの環境はコンテナで構築されますが、数が増えると管理コストも肥大化します。Kubernetesではそのような多数のコンテナの監視やデプロイを自動化してくれます。
マイクロサービスを構成するシステム数の増加は、システム間の通信複雑化にもつながります。このような複雑化した通信の、負荷分散や通信トラフィックの最適化の課題をサービスメッシュは解決します。サービスメッシュの代表的なツールはIstioです。
宣言型APIはサービスのあるべき状態を支持するプログラムです。コンテナオーケストレーションツールのKubernetesは宣言型APIの代表的なソフトウェアです。例えば、Kubernetesを利用するユーザはコンテナの起動数を5つと指定します。Kubernetesは5つのコンテナが常に起動するように、コンテナの削除や追加を自律的に制御します。もしKubernetesが命令型APIであった場合、ユーザはコンテナの削除や追加を都度実行しなければなりません。
従来、長期間のシステム運用ではOSやミドルウェアを個別に更新していました。そのためシステムのインフラはその変更毎に状態が変化します。しかしこのような繰り返しの変更はアプリケーションの動作への影響範囲が不明瞭で、動作保証が難しいという課題を抱えていました。
イミュータブルインフラストラクチャでは運用中の実行環境に変更を加えません。変更が適用された実行環境を新たに立ち上げ、古い環境と入れ替えます。もしデプロイ後にアプリケーションが動作しない場合は、即座に古い環境に戻すことも可能です。実行環境の状態管理が不要となるため、障害や管理コストの削減につながります。
クラウドネイティブアプリケーションはクラウド上での動作を前提としたアプリケーションです。クラウドネイティブの技術により構成することで、スケーラブルで高可用なサービスを実現できます。
クラウドネイティブアプリケーション開発で広く受け入れられているのが、「Twelve-Factor Application」という考え方です。2012年にPaaSのHerokuから提唱された考え方で、12個の原則で構成されます。2016年にはクラウド普及を背景に、3つの原則を加えた「Beyond the Twelve-Factor App」が提唱されています。
クラウドネイティブアプリケーションを実現する上ではクラウドの特性に関する深い理解と、それを考慮した設計が求められます。大手IaaSであるAWS・GCP・Azureでは各社毎に基準となる設計指針を公開しています。
AWSでのクラウドネイティブアーキテクチャは「AWS Well-Architected」と呼ばれ、6つの柱で構成されます。
GCPでのクラウドネイティブアーキテクチャは5つの原則で構成されます。
設計に自動化を組み込む
Azureでのクラウドネイティブアーキテクチャは「Azure Well-Architected Framework」と呼ばれ、5つの原則で構成されます。
各社毎に表現が異なるものの、その中身はおおむね共通しています。従量課金を考慮した適切なコスト管理。不特定多数からの攻撃を想定した堅ろうなセキュリティ対策。システムの回復性や可用性の実現。利用者数に応じたコンピュータリソースの効率的な利用。システム運用業務の自動化。この5つの要素がクラウドネイティブアーキテクチャを構成する要素と考えられます。
クラウドネイティブを実現する上で、CNCFが公開しているCloud Native Trail MapとCloud Native Landscapeが役立ちます。
Cloud Native Trail MapはCNCFが公開している、クラウドネイティブを実現するための推奨ステップです。ステップは全部で10個あり、その全てを適用する必要はありません。またその順番についても、自社の状況や実現したいシステム環境によって大きく変わります。自社でクラウドネイティブを実現する上で、技術の全体像を把握する指針としての活用がオススメです。10個のステップは以下の通りです。
CNCF Trail Map より引用し翻訳
Cloud Native Landscapeはクラウドネイティブ実現を考える企業や開発者を支援するリソースマップです。その全体像はGithubで公開されており、Trail Mapもその一つの要素として公開されています。人によっては、Cloud Native Interactive Landscapeという「クラウド技術を検索できるWebページ」のことをCloud Native Landscapeとして想起する方もいます。クラウドネイティブを実現する過程で、さまざまな角度からソフトウェアの比較を行えます。
クラウドは従来のオンプレミス環境と共通する側面も多く残す一方、クラウドならではの特徴も多いです。その可能性を最大限引き出すためには、クラウド技術への深い理解が求められます。そんな中クラウドネイティブはクラウドを推進する企業や開発者にとっての指針となります。
標準化されたアプリケーション実行環境を手軽に利用できるサービスです。リリースプロセスを自動化し、開発者自身がセルフサービスで実行環境を準備できるようになります。
条件に該当するページがございません