第2回:クラウド特性を最大限にいかすクラウドネイティブ 【連載】クラウドネイティブ:ビジネスの競争力を高める革新的なアプローチ
- クラウド
- クラウドネイティブ
- クラウドインテグレーション
- AWS
- CI/CD
- IaC
- 自動化
- DX
- デジタルトランスフォーメーション
- サーバレス
- モダナイゼーション
- モダンアプリケーション
第2回目となる今回のコラムでは、クラウド特有の機能や特性を最大限に活用し、アプリケーション開発やシステム構築・運用を行うための方法論であるクラウドネイティブについて述べたいと思います。
クラウドネイティブとは
クラウドネイティブの定義には様々な解釈がありますが、クラウドネイティブコンピューティング技術を定義、推進している非営利団体であるCloud Native Computing Foundation(以降、CNCF)は、クラウドネイティブテクノロジーを、
「パブリッククラウド、プライベートクラウド、ハイブリットクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築、実行するための能力を組織にもたらす」
と定義しています。つまり、クラウドの提供する機能を最大限に活用しながら、モダンなアプリケーションを開発する際の有効な手段の1つとしてクラウドネイティブが挙げられます。
クラウドネイティブがなぜ注目されるのか
近年、企業にはイノベーションを促進し、変化に迅速に対応できる俊敏性が求められています。提供するサービスやアプリケーションにおいても、よりスピーディーな市場投入、柔軟なパフォーマンス、スケーラビリティ、セキュリティレジリエンシー、最適なTCO、高い生産性など、継続的に変化に対応し続けることが求められます。ビジネスの進化や改善を目指すためには、アプリケーションがボトルネックになる可能性を排除し、常に最新のテクノロジーを活用できる状態にしておく必要があります。これらを実現する1つの方法として、クラウドネイティブが注目されています。
クラウドネイティブは、顧客の需要や要望に合わせて規模を調整できる性質を持っているため、柔軟性に優れています。また、アプリケーションは頻繁に変更されることを前提としており、その結果、柔軟で自由度の高いシステムを構築することが可能です。
クラウドネイティブアーキテクチャ
スケーラブルなクラウドネイティブアプリケーションを構築および実行するために使用するソフトウェアコンポーネントの組み合わせが、クラウドネイティブアーキテクチャと呼ばれます。
CNCFでは、クラウドネイティブアーキテクチャの技術的要素として、イミュータブルインフラストラクチャ、マイクロサービス、宣言型 API、コンテナ、およびサービスメッシュを挙げています。これらのアーキテクチャ要素を採用することで、疎結合で復元力があり、管理しやすく、オブザーバビリティに優れたシステムを構築することが可能となります。
イミュータブルインフラストラクチャ
一度構築したら、その後はパッチ適用の管理を行わずに、インフラ全体を特定の状態で固定化します。インフラ構成の変更等が必要な場合には、新規にインフラ環境を構築し、既存環境から新環境に全体を切り替えて運用します。 IaC(Infrastructure as Code)という手法を採用してインフラ構築をすべてコード化することにより、構築や廃棄、起動などの作業の負担を軽減することが可能となります。
マイクロサービス
マイクロサービスアーキテクチャは、複数の独立した小規模なサービスを組み合わせて、一つの大きなアプリケーションを構築するためのアーキテクチャです。このアーキテクチャはアプリケーションのスケーリングを容易にし、開発期間を短縮できるため、イノベーションの実現と新機能の市場投入の加速に効果的と言われています。
宣言型API
宣言型APIはサービスがどのような状態にあるべきかを宣言するAPIです。例として、コンテナ数の制御をあげた場合、従来の命令型APIではコンテナ数の調整(追加、削除など)をその都度実行する必要がありました。宣言型APIを利用してコンテナ数を維持するように宣言することで、自立的なコンテナ数の増減が可能となり、結果としてアプリケーションの柔軟性が高まり、サービス運用の複雑さも軽減されてシステムがシンプルになります。
コンテナ
アプリケーションを実行するための依存関係をコンテナイメージとしてパッケージ化し、任意の場所で実行されるコンテナランタイムによりコンテナとして実行するテクノロジーです。コンテナを利用することで、アプリケーションが可搬性を得るため、開発環境や本番環境など様々な環境で一貫性のある形でアプリケーションを実行することができます。また、起動時間の短縮、リソースの使用率の向上、アプリケーションのライフサイクル管理の改善も期待できます。
サービスメッシュ
分散コンピューティング向けのサービスマネージャの一種で、マイクロサービスなどのサーバ側アプリケーションを構成する小さなコンポーネント群が互いに動的にリンクされ、1つのアプリケーションとして機能できるようになります。サービスメッシュが提供する代表的な利点として、分散システムのセキュリティ、オブザーバビリティ(可観測性)、トラフィック制御の向上があげられます。
クラウドネイティブに利用される開発手法
コンテナやマイクロサービスといったクラウドネイティブアーキテクチャを用いて、クラウドネイティブなシステム開発に利用される開発手法をいくつかご紹介します。
ここでは開発現場でも広く浸透している分散トレーシング、継続的インテグレーション、継続的デプロイメント、DevOpsについて取り上げます。
これらの開発手法を用いることでより高速なアプリケーション開発、デプロイを実現することができます。
分散トレーシング | 分散トレーシングは1つのリクエストに対する処理を複数のマイクロサービスにより構成する際に、各マイクロサービスのトレースデータを収集、管理する仕組みです。例として、リクエストに対するパフォーマンスが著しく低下するなどの状況に陥った場合、分散トレーシングを利用することで各マイクロサービスの状況を可視化し、収集したトレースデータからボトルネックを素早く特定することができます。 | ・トラブルシューティングの加速 ・開発コラボレーションの強化 ・市場投入時間の短縮 |
継続的インテグレーション(CI) | DevOpsソフトウェア開発手法の一つで、アプリケーションのビルドとテストを自動化します。開発者が変更したプログラムコードを定期的にセントラルリポジトリにマージし、自動化されたビルドとテストを実行することで、バグの早期発見とソフトウェアの品質を高めることができます。 | ・ビルドとテストの自動化 ・バグの早期発見 ・リリース作業の労力軽減 |
継続的デプロイメント(CD) | 継続的インテグレーション(CI)を拡張したもので、コードを変更した際に自動で本番環境などへのリリースを行う仕組みです。リリース準備までを行い、本番環境へのリリースは手動で行う仕組みとして継続的デリバリがあります。 | ・作業の簡素化 ・リリース速度の向上 ・ヒューマンエラーの減少 |
DevOps | 開発 (Development) と運用 (Operations) を組み合わせたソフトウェア開発手法の一つです。DevOpsを導入することで、アプリケーション開発のプロジェクトにおいて、開発チームと運用チームが協力してスムーズな開発と運用を行うことができます。 | ・開発スピードの向上 ・生産性の向上 ・信頼性の向上 |
クラウドネイティブの落とし穴
クラウドネイティブテクノロジーを理解し、クラウドネイティブに適したアプリケーションやクラウドサービスを選択することで、市場ニーズに迅速に対応できるシステムを開発・運用することができます。一方で、クラウドネイティブのアプリケーションアーキテクチャ、クラウド特性を最大限にいかした基盤、セキュリティ対策、運用方法など適切な選択と対策を講じないと、クラウド特性を最大限にいかすことができずに失敗するケースがあります。クラウドネイティブ開発に失敗しないためには、クラウドネイティブアーキテクチャーを効果的に採用する多岐にわたる専門的な知識やスキル、人材が必要と言えるでしょう。
次回のコラム(第3回:クラウド特性を活かし、柔軟性と拡張性を兼ね備えたアプリケーションを開発し安定稼働させるには)では、これらの課題を解決するための「当社の取り組み」をご紹介します。これが最終回となりますので、ぜひお楽しみに。
執筆者
- 米山 勝也
- 基盤サービス事業部 システム技術統括部 クラウド技術担当
- オープン系システム開発、組み込み開発、WEBアプリケーション開発など様々な技術領域の開発に従事。現在はパブリッククラウド(AWS)によるシステム開発のインフラを担当。