レッドハットでソリューションアーキテクトを務める伊藤智博氏とMicrosoftでクラウドアドボケイトを務める寺田佳央氏が第3回にわたってクラウドネイティブを語る本連載。第2回はクラウドネイティブに注目が集まる理由、クラウドネイティブの最終目的について。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Web系テクノロジー企業の間で取り組みが広まっている「クラウドネイティブ」について、レッドハットのソリューションアーキテクトを務める伊藤智博氏とMicrosoftでクラウドアドボケイトを務める寺田佳央氏が語る本連載。第2回は、クラウドネイティブという考え方をどう捉えていくべきか語った。
――ビジネス要求の変化に対応する形で、ここ数年でさまざまな技術や方法論が登場してきました。特に注目されている技術や方法論はありますか。
伊藤氏 私が注目しているのは「プロセス」と「文化」です。ビジネス部門からの要求を実現するには、プロセスや文化も変える必要があると考えています。ここでいうプロセスとは自動テストや自動構築など作業内容のつながりのことです。文化とはアジャイル開発などシステム開発全体の考え方を意味しています。しかし、プロセスと文化を変革させることは容易ではありません。システム開発だけではなく、パートナーとの契約も見直す必要があるからです。従来は多大な要件を決めて、パートナーから見積もりを受けて請負契約を結ぶ形が多かったと思います。これからは、一定のリソースを契約して、そのリソース内で開発を始め、環境の変化に合わせて要件も変えていくスタイルの開発にシフトさせる必要があります。企業によっては購買部門がなかなか良しと言ってくれないことも多くあると聞いていますが、ビジネスの存続を踏まえた要求の変化に答えるためには不可欠です。
うまくいっているシステムはアーキテクチャ、プロセス、文化を三位一体で変革させています。昨今はクラウドネイティブに注目が集まっていますが、プロセスと文化が整っていないと、クラウドネイティブのメリットを最大限に受け取るのは難しいか、失敗すると見ています。
寺田氏 ビジネス課題を解決するために、以前から「リーンスタートアップ」「スクラム」「アジャイル」などの開発手法が取り上げられてきました。現在はコンテナ仮想化技術や「Kubernetes」を活用して、迅速にマイクロサービス環境を構築する手法が注目されています。システム開発に利用されてきたJavaもKubernetesも日々新しいライブラリやフレームワークが開発、公開されているため、エコシステムは拡大し続けている状況です。
あえて、私が今注目している技術は伏せておきたいと思います。私も伊藤さんがおっしゃるように、ビジネス課題を解決するために重要なポイントは、こうした手法や特定技術の採用ではないと考えています。あるビジネス課題を解決するために、特定の技術だけを利用したり精通したりしておけばよいのではなく、その時に何が最善な方法なのか、最適な採用技術は何なのかを個別に考えて検討すべきでしょう。
私がとあるお客さまと会話をしたときの話です。相談の時点で「モダンな手法や技術を採用すると良いだろう」と考えていましたが、詳しくヒアリングする中で、納期、コスト(初期、ランニング、教育)や人的リソースなどの要因を踏まえ、新しい手法や技術を採用すると失敗するリスクが高いという判断に至った例があります。おそらく当初考えていたようなはやりの手法を採用していたらプロジェクトは失敗していたでしょう。
こうした経験も踏まえ、お客さまから製品選定に悩んでいると問い合わせを受けた際、いつも「何が一番重要なのか優先順位をつけて考えてください」と伺うようにしています。例えば以下のような項目ですね。
今ある技術や手法がいつも、そしていつまでも新しく正しいわけではありません。新しいとされていた技術もすぐに古くなっていきます。今置かれた状況で、何が最適なのかを考えて選択するのが重要だと考えています。
製品の選び方に関しては2020年9月に開催された「Cloud Native Day Tokyo 2020」というイベントでも解説しました。気になる人はこちらの動画もご覧いただければと思います(Cloud Native Architecture ことはじめ 最適な実行環境を選ぶポイント〈YouTube〉)。
――昨今、クラウドネイティブという言葉を目にすることが多くなりましたが、どのようなビジネス要求を解決する技術(方法論)だと見ていますか。
伊藤氏 クラウドネイティブの考え方はSoE(System of Engagement)、SoR(System of Record)の両方に適用できます。またモノリスを排他するものでもありません。ビジネス変化がない機能は重厚長大なモノリスで構成し、変化が激しい機能はクラウドネイティブの考え方に沿って構成して、それらを組み合わせてシステムを開発する例もあります。モノリスな既存システムがある場合は、素早く新しいビジネスを始めたい部分だけクラウドネイティブで作成することを推奨しています。
クラウドネイティブを実現する技術としてはGoやNode.jsなどのプログラミング言語・フレームワークとクラウドベンダーが提供するSaaSやPaaSを組み合わせて実現していることが多い印象です。Web系企業といわれる企業から広まっていることも大きな理由だと思います。
従来のITシステムは1度起動したらメンテナンスがあるまでずっと起動させていました。クラウドネイティブでも同じようなことができますが、別のアプローチを取ることもできます。高い可用性を保ったり、性能要求に動的に対応したりするために、あえて頻繁に起動、停止させるのです。
寺田氏 クラウドネイティブという言葉は広義的には「クラウド環境を有効的に活用できるシステム」を意味して使われているかと思いますが、Cloud Native Computing Foundation(CNCF)では下記のように定義しています。
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測通りに行うことができます。
私も伊藤さんの考えと同じで、クラウドネイティブ化を進めるための技術や手法は、クラウド環境に限らずオンプレミス環境でも、SoE、SoR、モノリス、マイクロサービスに限らず、どこでも適用できます。むしろ、何を持ってクラウドネイティブ化が完了したのかを示すことがとても困難で、所属する企業やプロジェクトに応じて異なるでしょう。
クラウドネイティブ化の実現に向けて知っておくべきキーワードの一部を紹介します。
上記のどれか一つまたは全てを実践しているからといってクラウドネイティブとはなりません。クラウドネイティブのゴールは、CNCFの定義にある「変更を最小限の労力で頻繁かつ予測通りに行うことができます」を達成できることだと考えています(「変更」が重要なキーワードです)。
クラウド環境を利用すると、マシンの調達がしやすく、すぐ新しいマシンを立ち上げてサービスを提供できます。しかし、簡単にマシンを導入できるようになった一方で、クラウドを利用するならではの注意点も出てきます。
例えば、一般公開したサービスに対して、更新や修正が必要になるケースです。従来は週末や夜中に出社してローリングアップデートなどの手法でバージョンアップを実施していたと思います。しかし、ローリングアップデートで更新したサービスが本番環境で正常に動作する保証はどこにもありません。新しいバージョンに更新して再起動した際にサービスが動かない経験をされた方もいるのではないでしょうか。その時の絶望と焦りは2度と味わいたくないでしょう。
このメンテンナンス方法はクラウドが利用される以前、つまり2010年より前のエンタープライズJavaアプリケーション、サーバ運用では当たり前のように行われていた手法です。当時はマシンの調達にも時間がかかり、物理サーバも高価で、導入までに多くの時間を要していました。検証環境は別途用意して事前に検証するものの、検証環境と本番環境の設定やアーキテクチャの微妙な違いにより検証環境では起きなかった問題が本番環境では起きるということもしばしばありました。
しかし、現在はクラウド環境を利用することでOSのイメージもアーキテクチャも全く同じサーバを簡単に用意できます。つまり検証環境と本番環境を同一にそろえたり、本番環境の複製を作成したりするのがとても容易になっています。クラウド時代において、従来のローリングアップデートで危険を冒して、今動いているサービスを全停止し、新しいバージョンに入れ替えるのはハイリスクです。
例えば、今動いているサービスはそのまま手を加えずに稼働させて、新しいバージョンのサービス用に別のサーバを用意し、正しく動作していることを確認した後に、新旧を切り替える手法を採用できます。そしてこちらの方がローリングアップデートに比べ安全です。仮に新しいサーバで問題があった場合に、古いバージョンが残っているため素早く切り戻しをすることも可能だからです。
アプリケーションのバージョンアップを例に、クラウドネイティブならではの改善方法を示しました。クラウドを利用することで、従来は困難だったことが簡単にできるようになる一方で、別の運用課題も出てきます。しかしその新しい運用課題の習得に比べても、クラウド環境だからこそできる変更に強いシステムを構築できるようになります。変更に強いシステムを作りたい場合は検討してみてください。
――クラウドネイティブなアプリケーションやサービスに対する日本企業や開発者の反応はどうでしょうか。
伊藤氏 私はRed Hatでクラウドネイティブ技術を担当していますが、話を聞きたいという件数は年々増えてきています。ビジネス要求の変化を早く市場へ投入したいということ、ビジネス規模に合わせたコストで、ダウンタイムゼロのシステムを開発したいという理由で注目している企業が多い印象です。また、重厚長大なシステムをどうにかしたいという課題感からエンタープライズでも注目されているように感じます。ただ、クラウドネイティブに注目をするものの、失敗を恐れるあまりに先に進めない例も多いのが現実ですね。
クラウドネイティブをRed Hat製品で実現する場合は「Red Hat OpenShift」とシステムを組み合わせて実現することがほとんどです。システムを開発するプログラミング言語はさまざまですが、Javaを使っていた歴史があるため、Javaでクラウドネイティブな開発をしたいという要望も多くあります。
寺田氏 私が観測する範囲での企業側の現状ですが、オンプレミスからクラウドへの移行を進めている企業の多くはクラウドネイティブに向けた取り組みを進めていると思います。オンプレミスからクラウドへの移行の際に、最初に考えることはリフト&シフトです。ただ、既存のオンプレのサービスをクラウドにリフトしただけでは、稼働環境が変わっただけで、クラウド環境にするメリットはありません。使った分だけの従量課金になる、サーバ調達の時間が短縮されるという利点はありますが、それだけではクラウドプロバイダーが提供する機能を十分に活用しているとはいえませんし、恩恵も十分に得られていません。クラウドプロバイダーが提供するサービスを有効活用し作業効率を改善するためにも、クラウドネイティブ化が必要になってきます。
そしてクラウドネイティブを実現することで、アプリケーションの開発からデプロイまでの開発プロセス全体を改善できるようになる他、運用管理においてもコストの最適化、障害通知、障害対応、テスト環境と本番環境の構築や入れ替えが容易になるというメリットが得られます。高負荷時のオートスケールなども容易になるでしょう。これまで人間が手動で労力を費やしていた部分を減らし自動化できるようになり、大幅に作業効率を改善できるようになります。結果として昔、週末や深夜にしていた作業も、日中の時間帯に安心してできるようになるため、エンジニアの働き方改革にまでつながります。
私が所属するMicrosoftでは、クラウドネイティブなアプリケーションやマイクロサービスを実現する環境の選択肢を豊富に用意しています。Red Hatと共同で開発、提供しているマネージドOpenShift環境の「Azure Red Hat OpenShift」の他にもさまざまな実行環境を用意しています。
伊藤智博
OpenJDK Committer、Application Services Solution Architect@Red Hat。外資系ソフトウェアベンダでミドルウェアのコンサルタントとしてミッションクリティカルなシステムの支援、テクノロジストとしてビジネス課題を技術で解決をすることを担当して、現職。趣味では主にHotSpot JVMの機能改善に取り組む。業務ではアプリケーションランタイムのミドルウェアの技術プリセールスやJava関連の情報発信を担当。ビジネス目線でのやりたいことや課題から、システムやそのプロジェクトを改善していくことに注力している。
寺田佳央
Javaエバンジェリスト。Javaの最新技術情報の提供やJavaコミュニティー活動の活性化を日本Javaユーザーグループ(JJUG)とともに行ってきた。現在、マイクロソフト・プラットフォームにおけるJavaの利用促進/啓蒙(けいもう)活動を実施中。2016年には日本人で2人目となるJava Championに就任、海外のJava ChampionやJUGリーダとも多数交流。JJUG幹事メンバー。2019年6月よりオイシックス・ラ・大地の技術顧問に就任。
Copyright © ITmedia, Inc. All Rights Reserved.