なぜ今、クラウドネイティブが求められるのか
もはや、ビジネスとITは切っても切れない関係になりつつあります。DXが叫ばれる昨今では、ビジネスをローンチするスピードと共にIT活用のスピードも高速化しています。
アジャイル開発に代表されるように、アジリティの高い開発手法が求められており、それを実現するためにはシステムのアーキテクチャや開発プロセスを抜本的に見直す必要があったのです。
これらの要求にハマったのがポータビリティの高いコンテナ技術とリソース調達に柔軟性のあるクラウド技術を活用した、クラウドネイティブです。
クラウドネイティブって何?
クラウドネイティブを推進するCloud Native Computing Foundation(通称CNCF)という非営利の団体があり、クラウドネイティブについて、次のように定義しています。
※CNCF Cloud Native Definition v1.0から引用
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。
重要なキーワードは、クラウド(パブリック/プライベート/ハイブリッド)の技術を活用して回復性、管理力、および可観測性のある疎結合システムを実現すること、でしょうか。
とりあえず、クラウドを使えば良い?
クラウドネイティブの目的は、「クラウド技術を使うこと」ではなく、「クラウド技術を活用してビジネス価値をユーザーに提供すること」です。
まずは目指すべきビジネス価値を測り、その上で技術を選定するべきであり、新しいプロダクトに飛びつくだけだったり、趣味で選択しないことが重要です。
ビジネス価値の測り方の1つに、「デリバリパフォーマンス」という指標があります。
- リードタイムの削減
- デプロイ頻度の増加
- MTTR(平均修復時間)の短縮
- 変更失敗率の低減
これらの指標について目標を定めておき、それに見合うアーキテクチャやプロダクトを採用することが重要です。
これはクラウドネイティブではない
いずれも、「クラウド技術を活用してビジネス価値をユーザーに提供すること」ができていないパターンです。
- ただクラウドを使っているだけ
- クラウド特性を設計や運用に反映してない
- 役割と運用プロセスが変わらない
- 手作業の運用プロセスへの依存
クラウドネイティブを実現するための考え方
サービスベースアーキテクチャ
マイクロサービスアーキテクチャもその1つ。
小さい独立したコンポーネントに分割することにより、可用性、アジリティ、スケーラビリティを向上させる。
開発者はビジネスロジックの開発に専念できる。
API
軽量かつ特定の技術に依存しない接続方法。
シンプルでアジリティも担保できるしスケールしやすい。
コンテナオーケストレーション
アプリのポータビリティを確保し、AWSでもGCPでもそのまま動く・使えるのが理想。
アプリ設計時の方法論
The Twelve-Factor-App
By Heroku
次のようなSoftware as a Serviceを作り上げるための方法論。
- セットアップ自動化のために 宣言的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコストを最小化する。
- 下層のOSへの 依存関係を明確化 し、実行環境間での 移植性を最大化 する。
- モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。
- 開発環境と本番環境の 差異を最小限 にし、アジリティを最大化する 継続的デプロイ を可能にする。
- ツール、アーキテクチャ、開発プラクティスを大幅に変更することなく スケールアップ できる。
具体的にどうすれば良いの?
CNCFがCloud Native Landscapeを定義しており、どのようなStepでクラウドネイティブを導入していくのが良いか示しています。
今回は詳細について触れませんが、まずはアプリケーションをマイクロサービス単位でコンテナ化して、CICDでビルド、テスト、デプロイまでを自動化して、Kubernetesなどのオーケストレーションで管理して・・という流れになっています。
また、役割別のおすすめプロダクトについてはこちらにまとまっています。