今日のアプリケーションの移行または構築の最終目標として「クラウド ネイティブ」になることがよく挙げられます。しかし、質問する相手によって、正確な意味の定義はさまざまです。まとめると、大部分は次のことに集約されます。クラウド ネイティブとは、クラウドベースのサービスと配信モデルを最大限に活用するために、スケーラブルなアプリケーションを構築して実行するためのアプローチです。
クラウド ネイティブとは、従来のオンプレミス インフラストラクチャに比べて、クラウドで提供される多くの新しい可能性(ただし、アーキテクチャ上の制約は大きく異なる)に適応することを意味しています。
モノリシック アプリケーションは単一ユニットとしてビルド、テスト、デプロイが必要ですが、クラウドネイティブ アーキテクチャはコンポーネントを疎結合したサービスに分解することで、複雑さの管理とソフトウェア デリバリーのスピード、アジリティ、規模の向上を実現します。
同業他社と比較して、自社組織のソフトウェア デリバリー パフォーマンスがどの程度の位置にあるのか、ご関心がおありでしょうか?DORA DevOps クイック チェックを行って確認してください。
クラウドネイティブ アプリケーションは、クラウドの弾力性と分散型の特性を生かすためにゼロから設計されます。クラウドネイティブ アプリケーションとは何かをより深く理解するには、クラウドネイティブ アプリケーションではない、従来のモノリシック アプリケーションから始めることをおすすめします。
モノリシック アプリケーションは、多くの場合、アプリケーションごとにカスタムビルドのオペレーティング システム、ミドルウェア、言語スタックを使用して、単一のユニットとして機能します。また、ほとんどのスクリプトとプロセスは、ビルド、テスト、デプロイ専用に構築されています。全体として、このアプリケーション アーキテクチャは密接な依存関係を生み出し、時間の経過とともに拡大するシステムの変更、テスト、デプロイ、運用をより困難にします。最初は設計とデプロイがシンプルだったものが、すぐに複雑で進化と運用が困難になります。
それに対して、クラウドネイティブ アプリケーションは、最新のインフラストラクチャの動的で分散型の性質を最大限に活用して、スピード、アジリティ、スケーラビリティ、信頼性、費用対効果を向上させます。
クラウドネイティブ アプリケーションは、通常、テクノロジーと手法(DevOps、継続的デリバリーと継続的インテグレーション、コンテナ、マイクロサービス、宣言型 API)を使用して、複数の自己完結型のサービスに分割されます。これにより、チームはコンポーネントを個別にデプロイしてスケーリングできるため、どのサービスも中断することなく、更新、問題の修正、新機能の提供が可能になります。
それでも、クラウドネイティブ アーキテクチャの基礎は、次の 5 つの柱に基づいています。
マイクロサービス: ほぼすべてのクラウド アーキテクチャはマイクロサービスに基づいていますが、その主なメリットはコンポーザビリティです。つまり、アプリケーションをアプリケーション プログラミング インターフェース(API)を介して簡単に構成および相互接続できる、より小さく軽量なサービスのコレクションに分割します。たとえば、e コマース アプリケーションは、ショッピング カート用の特定のサービス、支払い用の別のサービス、在庫管理に関してバックエンドと通信する別のサービスで構成されたりします。また、コンポーザビリティにより、チームはアプリケーションの他の部分を中断することなく、新しいビジネス要件を満たすためにコンポーネントの入れ替えや再コンポーズを行うことができます。
コンテナとオーケストレーション: コンテナは軽量で実行可能なコンポーネントであり、あらゆる環境でコードを実行するために必要なすべての要素(アプリのソースコードや依存関係など)が含まれています。コンテナは「一度のビルドで、どこでも実行」できるコードをサポートするワークロードのポータビリティを実現し、開発とデプロイを大幅に簡素化します。また、これらは個別にデプロイできるため、言語、ライブラリ、フレームワーク間の摩擦を減らすのにも役立ちます。このポータビリティと柔軟性により、コンテナはマイクロサービス アーキテクチャの構築に最適です。
マイクロサービスの数が増えると、コンテナを管理してアプリケーションとしてスムーズに実行できるようにするために、コンテナ オーケストレーションも不可欠です。Kubernetes のようなコンテナ オーケストレーション プラットフォームは、コンテナが実行される場所と方法の監視と制御、障害の修復、コンテナ間の負荷の分散を行います。
DevOps: クラウドネイティブ アプリケーションの開発では、DevOps のようなアジャイルなデリバリー手法に移行する必要があります。DevOps では、デベロッパーと IT 運用チームが協力して、インフラストラクチャとソフトウェア デリバリー プロセスを自動化します。DevOps を使用すると、開発チームと運用チームが共通の目的に沿ってより緊密にコミュニケーションをとり、団結して、アプリケーションの構築、テスト、リリースをより迅速に行う文化と環境を形成できます。
継続的インテグレーションと継続的デリバリー(CI/CD): 自動化により、人よりもはるかに迅速にシステムを修復、スケーリング、デプロイできるようになります。CI / CD パイプラインにより、ダウンタイムをスケジュールしたり、メンテナンスの時間枠を待ったりすることなく、アプリケーション変更のビルド、テスト、デプロイを自動化できます。継続的デリバリーによってソフトウェア リリースの信頼性が高まり、リスクが軽減されるため、チームは新しいサービスや機能を迅速かつ頻繁に提供できます。
実際、クラウドとクラウド ネイティブには違いがあります。クラウドとはクラウド コンピューティングのことであり、企業や個人がコンピューティング リソースにオンデマンド サービスとしてアクセスするために料金を支払います。
「クラウド ネイティブ」という用語は、クラウドでソフトウェアを開発するために使用されるツールや手法の包括的な説明としてよく使用されますが、クラウド導入だけを意味するわけではありません。単にアプリケーションをデプロイする場所ではなく、アプリケーションをどのように構築して提供するかを指します。場合によっては、アプリケーションがクラウド上で実行されないこともあります。クラウドネイティブの原則に基づいてアプリケーションを構築し、オンプレミス環境やハイブリッド環境で実行することもできます。
イノベーションの加速 より小規模で疎結合されたサービスにより、チームは自律的に作業と開発を行うことができます。クラウドネイティブなアプローチは、デベロッパーの生産性と速度を向上させ、デベロッパーによるイノベーションを起こしやすくします。 | 信頼性の高いリリース クラウドネイティブ アーキテクチャにより、デベロッパーは新しいサービスと既存のサービスを迅速にビルド、テスト、デプロイできます。これにより、プロダクトやサービスをより迅速に市場に投入でき、デプロイのリスクを軽減できます。 | スケーラビリティ クラウドネイティブ アーキテクチャでは、インフラストラクチャの自動化が採用されているため、人為的ミスによるダウンタイムをなくすことができます。需要に基づいて負荷を分散することで、費用とパフォーマンスをより効果的に最適化できます。 |
コスト削減 合理化されたソフトウェア デリバリー プロセスにより、新しいアップデートや機能の提供にかかるコストを削減できます。クラウドネイティブ アプリケーションでは、リソースの共有とオンデマンドの利用もできるため、運用コストを大幅に削減できます。 | 高可用性 クラウドネイティブ アーキテクチャは、運用の複雑さの軽減、構成変更の簡素化、自動スケーリングと自己回復の機能を備えているため、高可用性と信頼性を提供します。 | ポータビリティ クラウドネイティブ アプリは、ほぼどこでも実行できるように設計されているため、アプリケーション全体に変更を加えることなく、ある環境から別の環境に簡単に移動できます。 |
セキュリティの強化 クラウドネイティブ アプリケーションを使用すると、攻撃対象領域が縮小され、攻撃や新たな脆弱性の検出と対応がしやすくなります。また、デプロイと管理が標準化されているため、パッチの適用や更新がはるかに容易になります。 | コンプライアンスの強化 ほとんどのデータ セキュリティ コントロールがプラットフォーム レベルで実装されるため、クラウド ネイティブ アプリケーションによるコンプライアンスの実装と証明の方が、はるかに簡単で安価です。また、クラウド プロバイダはリスク管理フレームワークのコンプライアンスを維持しているため、お客様は残りを管理することでコンプライアンス基準を満たしやすくなります。 |
イノベーションの加速
より小規模で疎結合されたサービスにより、チームは自律的に作業と開発を行うことができます。クラウドネイティブなアプローチは、デベロッパーの生産性と速度を向上させ、デベロッパーによるイノベーションを起こしやすくします。
信頼性の高いリリース
クラウドネイティブ アーキテクチャにより、デベロッパーは新しいサービスと既存のサービスを迅速にビルド、テスト、デプロイできます。これにより、プロダクトやサービスをより迅速に市場に投入でき、デプロイのリスクを軽減できます。
スケーラビリティ
クラウドネイティブ アーキテクチャでは、インフラストラクチャの自動化が採用されているため、人為的ミスによるダウンタイムをなくすことができます。需要に基づいて負荷を分散することで、費用とパフォーマンスをより効果的に最適化できます。
コスト削減
合理化されたソフトウェア デリバリー プロセスにより、新しいアップデートや機能の提供にかかるコストを削減できます。クラウドネイティブ アプリケーションでは、リソースの共有とオンデマンドの利用もできるため、運用コストを大幅に削減できます。
高可用性
クラウドネイティブ アーキテクチャは、運用の複雑さの軽減、構成変更の簡素化、自動スケーリングと自己回復の機能を備えているため、高可用性と信頼性を提供します。
ポータビリティ
クラウドネイティブ アプリは、ほぼどこでも実行できるように設計されているため、アプリケーション全体に変更を加えることなく、ある環境から別の環境に簡単に移動できます。
セキュリティの強化
クラウドネイティブ アプリケーションを使用すると、攻撃対象領域が縮小され、攻撃や新たな脆弱性の検出と対応がしやすくなります。また、デプロイと管理が標準化されているため、パッチの適用や更新がはるかに容易になります。
コンプライアンスの強化
ほとんどのデータ セキュリティ コントロールがプラットフォーム レベルで実装されるため、クラウド ネイティブ アプリケーションによるコンプライアンスの実装と証明の方が、はるかに簡単で安価です。また、クラウド プロバイダはリスク管理フレームワークのコンプライアンスを維持しているため、お客様は残りを管理することでコンプライアンス基準を満たしやすくなります。
クラウドネイティブのメリットは多数ありますが、このモデルには考慮すべきトレードオフがいくつかあります。クラウドネイティブ コンピューティングは、必ずしも簡単に実装できるわけではありません。新しいツールやテクノロジーを導入するだけでなく、その活用を成功に導くには文化的な変革も必要です。
クラウドネイティブの一般的な課題は次のとおりです。
ただし、適切な専門知識と戦略があれば、上記のどれも手に負えないわけではありません。たとえば、クラウドへの移行にシンプルな「リフト&シフト」アプローチを採用するのは、出発点としては最適ですが、前述のクラウドネイティブのメリットの多くが得られるわけではありません。多くの組織は、クラウドネイティブ アーキテクチャへの再構築にかかる費用と複雑さを予測していなかったために、この段階で行き詰まります。
クラウド ネイティブを複数年に及ぶ大規模なプロジェクトとして扱うことはおすすめしません。それよりも、試行錯誤を繰り返しながら学び、改善していくことと捉えてください。