TOP>コラム一覧>【初心者必見】クラウドネイティブとは①―なぜ必要?メリットは?実現へのプロセスは?

【初心者必見】クラウドネイティブとは①―なぜ必要?メリットは?実現へのプロセスは?

はじめに

こんにちは。CTCの朴木です。
近年、よく耳にする「クラウドネイティブ」という言葉。なんとなく理解しているつもりでも、細かな点で理解に自信がない方は意外と多いのではないでしょうか。そこで今回からシリーズで、クラウドネイティブを実現させるために必要な考え方とプロセスを、「コンテナ」や「オーケストレーション」などの技術要素を交えて、解説します。

①の今回は、

  • そもそもクラウドネイティブとは?なぜ必要?
  • クラウドネイティブ実現することでどんなメリットがある?

という基礎知識から、

  • クラウドネイティブ実現へのプロセス概要

を、初心者の方にも理解いただけるように、できるだけわかりやすく、解説します。

クラウドネイティブとは?~求められる背景と、その定義

皆さんも実感されている通り、もはやクラウドは「使うかどうか」の検討ではなく、「使う前提で、どう活かすか」を検討するステージになりました。その中で求められるのが、「クラウドネイティブ」です。

結論から述べれば、クラウドネイティブとは、「クラウド利活用前提のアーキテクチャ(考え方)」のことです。

なぜクラウドネイティブが求められるのか?その理由を理解するには、ITシステムの変化の歩みを紐解く必要があります。

まずは、クラウドコンピューティングが登場した2000年代半ば。当時のシステムおよびアプリケーションは、オンプレミス環境で稼働することが前提でした。しかしながらその頃から、以下のようなさまざまな事由によってビジネス環境の不確実性が大きく高まり、新しいIT利活用へのシフトが求められるようになりました。

そのため初期は、オンプレミス環境で稼働するシステムをそのままクラウドに移行する、載せ替える「クラウドリフト」の取り組みが盛んにおこなわれました。

そして現在では、ビジネスにおいてIaaS、PaaS、SaaSなどのクラウドサービスが広く普及しています。民間企業ではクラウド利用を最初の選択肢とする「クラウドファースト」、官公庁などでもクラウドをITシステムの構築における既定の選択肢とする「クラウド・バイ・デフォルト原則」が、提唱されるようになりました。

そのようにクラウド利活用が進む中で、そのメリットを最大化するために、初めからクラウドを使うことを前提として、基盤およびその上で利用するアプリケーションまでをクラウドに最適化する「クラウドネイティブ」が、求められるようになったのです。

現在のクラウドネイティブの定義は、オープンソースのクラウドネイティブ技術の開発と推進を担っている非営利団体CNCF(Cloud Native Computing Foundation)による、下記が広く知られています。

引用:https://github.com/cncf/toc/blob/master/DEFINITION.md#日本語版

クラウドネイティブのメリットと必要性

次に、なぜクラウドネイティブにする必要があり、実現することで具体的にどのようなメリットが得られるのか?を見ていきましょう。

一般的に、クラウド活用のメリットとして、以下が挙げられます。

  • ●IT環境構築の迅速化
  • ●自社でインフラを持たずに済む
  • ●必要なリソースを、必要な分だけオンデマンドに入手できる

クラウドを利用することでハードウェアの調達、構築などが不要なため、環境構築(および廃止)が容易かつ迅速に行えます。また、インフラを保有する必要がないことで、これまで膨大にかかっていた運用工数や人的コスト、さらにトラブル対応リスクを外部へ移転することができます。そして、ハードウェアの調達や構築といった足かせがなくなることでリソースの拡張や縮小が任意で行える、必要なときに必要な分だけを調達することができます。

こうしたクラウド化によるメリットに加えて、クラウドネイティブ化することで、以下のメリットが享受できます。

  • ●システムやアプリケーションを、信頼性を保ちつつ迅速・タイムリーに変更できる
  • ●冗長化が容易なため、可用性が担保できる
  • ●インパクトある変更も、最小限の労力で頻繁かつ予測通り実施できる

ビジネスや社会環境の変化が激しい現在、ITシステムやアプリケーションにもタイムリーで迅速な変更が頻繁に求められます。

クラウドネイティブの考え方に則った設計では、アプリケーションを小さなサービスの集合体として構築し、各サービス間を標準化されたインタフェースにより結合します。そのため、各サービスに変更がある場合も、アプリケーション全体に影響を及ぼすことがなく、サービスの信頼性を保つことができます。

また、ユーザーからのリクエストの集中などで処理負荷が高まる場合に、クラウドネイティブ化されたサービスは冗長化が容易であり、可用性も担保できます。加えて、システムの実行状態の自動的な管理や、障害発生時の自動的な修復といった機能も実現可能です。

そして、もっとも重要なメリットが3点目の「インパクトある変更も、最小限の労力で頻繁かつ予測通り実施できる」という点です。これは人の介在を可能な限り少なくする、運用の自動化や効率化を意味します。

クラウドネイティブは、開発プロセスや組織にも変化をもたらす

「クラウドネイティブ」は、別の言い方をすれば「ITシステムやアプリケーションの運用を、人の関与なしに稼働できるようにする考え方」と理解すると、分かりやすいと思います。

逆に言うと、どんなにクラウドなど高度なテクノロジーを活用していても、運用や処理に人手が介在するポイントが多い、あるいはあちこちに残っている場合、それは「クラウドネイティブ」ではないのです。

たとえば複数のサービスから構成される複雑なアプリケーションのビルドやデプロイは、手作業ではなく自動化したい。そのためには、基盤自体やパイプライン、そして利用するツール類も、クラウドネイティブなものを使う必要があります。

そして、それ(クラウドネイティブ)を実現する技術にコンテナやオーケストレーションなどがあり、それを活かすためのアーキテクチャとしてマイクロサービスなどがある、と捉えると、理解しやすいと思います。

そして、こういったクラウドネイティブな技術を使いこなすチームは、自ずとアジャイル開発手法やDevOpsといった、より柔軟な開発および運用のスタイルに変化していくでしょう。

クラウドネイティブを実践するための10のステップ

では、クラウドネイティブはどのように実現していけばよいのでしょうか。

前述のCNCFは、「Cloud Native Trail Map」として、企業がクラウドネイティブを実践していくための10のステップを紹介しています。

Cloud Native Trail Map
  • 1. コンテナ化
  • 2. CI/CD
  • 3. オーケストレーション&アプリケーション定義
  • 4. 可観測性と分析
  • 5. サービスプロキシ、ディスカバリ&メッシュ
  • 6. ネットワーク&ポリシー
  • 7. 分散データベース/分散ストレージ
  • 8. ストリーミング&メッセージング
  • 9. コンテナレジストリ&ランタイム
  • 10. ソフトウェアディストリビューション

※この10ステップはすべて実践しないとダメ、ということではありません。また、順番の前後も問題ありません。

この10ステップのうち、今回は1~3についての概要を解説します。

1. コンテナ化とは?

コンテナとは、仮想環境の一つ。一つのOS上に、複数の実行環境を作り出す技術です。従来の仮想マシンによる仮想化とは異なり、ゲストOSを介さないため、より軽量な環境構築が可能です。現在、もっとも普及しているのはDockerコンテナです。

コンテナでは、原則として「一つのコンテナで一つのプロセス」を実行します。アプリケーションを設計する際には、アプリケーションを構成する機能やサービスを、コンテナ単位で分割して設計します。

つまり、一枚岩(モノリシック)なアプリケーションでなく、コンポーネントやサービス群による複合構成でアプリケーションを作ること=コンテナ化、ということになります。

2. CI/CDとは?

CI/CDとは、Continuous Integration / Continuous Deliveryの略称。日本語で言えば「継続的インテグレーション/継続的デリバリー」という意味です。CI/CDは1つの技術を指すものでなく、ソフトウェアの変更を常にテストできる、自動で本番環境にリリース可能な状態にしておく、ソフトウェア開発の手法です。

従来、ソフトウェア開発環境では、ソースコードの修正・コンテナのビルド・テスト・各環境への適用および本番環境へのリリースといった作業は、手順書に基づく手動のオペレーションで実施されたり、複雑なスクリプトで実行されるために、多大な工数と時間を必要としてきました。CI/CDを取り入れると、デリバリーのパイプラインを自動化し、テストによってバグを素早く発見したり、変更を自動でリリースしたりすることが可能になります。

3. オーケストレーション&アプリケーション定義

オーケストレーションとは、大規模なITシステムにおけるさまざまなコンピュータリソースやアプリケーション、そしてアカウントの管理を、ソフトウェアによって自動化する機能のことです。

詳しくは次回で解説しますが、クラウドネイティブ・アプリケーションでは、コンテナを実行単位としてアプリケーションを構成します。このコンテナの実行や死活監視、各種の設定といった部分を自動的に管理するソフトウェアとして、オーケストレーションソリューション(ツール)が使用されます。

コンテナにおけるオーケストレーションを実現するソリューションとしては、CNCFがメンテナンスする「Kubernetes(K8s)」の利用が、業界標準となってきています。Amazon、Microsoft、Google、IBMなどメガクラウドベンダー各社は、Kubernetesをマネジメントサービスとして提供しており、オーケストレーションの導入を支援しています。

まとめ

いかがでしょうか。今回は、そもそもクラウドネイティブとは?なぜ必要?実現することでどんなメリットがある?という基礎知識から、実現へのプロセス概要を解説しました。

次回②では、クラウドネイティブを実現するためのアーキテクチャ解説として、「コンテナ」とは何か、その採用メリットと、その実現のためのソリューション「Kubernetes(K8s)」について、詳しく解説します。

CTCは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

お問い合わせ

関連コラム

【著者プロフィール】

朴木 瞳(ほうのき ひとみ)

伊藤忠テクノソリューションズ株式会社 クラウドエンジニア

AWSのインフラ構築や技術QAを経験し、現在はアカウント管理に従事。従量削減のためのRIのコストシミュレーションにおいてお客様を支援中。

TOP>コラム一覧>【初心者必見】クラウドネイティブとは①―なぜ必要?メリットは?実現へのプロセスは?

pagetop