NTTコムウェアのウェブサイトでは、JavaScriptを使用しています。ご使用のブラウザがJavaScriptに対応していない、またはJavaScriptの使用を許可していない設定のため、表示・機能が正しくご利用できない場合がございます。JavaScriptの設定を有効にしてご覧いただくことをお奨めします。TipsクラウドファーストからクラウドネイティブへDevOpsを推進していく上で、「クラウドネイティブ」というキーワードが出てくることが増えてきました。クラウドネイティブとはどのようなことなのでしょうか。クラウドファーストのその先にクラウドネイティブに似たキーワードで「クラウドファースト」や「クラウド・バイ・デフォルト」という言葉があります。これらは従来のオンプレミスなシステム環境を自前で構築・所有するのではなく、まずクラウドで実現することを考えるというアプローチです。以前に比べるとクラウド利用に対する抵抗感がなくなってきたこともあり、これらの考えは一般的に実践されるようになってきたといえます。Foundation」(CNCF)が定義した言葉です。CNCFはコンテナオーケストレーションツールである「Kubernetes」(K8s)を中心にクラウドネイティブを推進している団体です。そのため、クラウドネイティブとは端的に言ってしまえば「コンテナを活用したシステム」のことですが、単にコンテナでアプリケーションを動かせばよいというわけではなく、様々な要素が合わさって、はじめてクラウドネイティブということができるというわけです。そこで、まずはやや難解ですが、CNCFの定義を以下に引用します。クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。可観測性のある疎結合システムが実現します。これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。(以下略)https://github.com/cncf/toc/blob/master/DEFINITION.mdこれを読んだだけでは、様々な技術を取り入れればクラウドネイティブといえる、と解釈されてしまいます。すべてを一気に取り入れることはできません。Map」(クラウドネイティブへの道筋)も見てみましょう。「宣言型」クラウドネイティブの定義の中に「宣言型API」という、あまり見慣れない言葉があります。宣言型は、命令型と対比される概念です。命令型とは、我々が通常コンピューターを使う際に行っている方法で、アプリケーションに対して具体的に実行させたいことを「命令」する方法です。1つ、ないし複数の命令が組み合わさって、我々は必要な「結果」を得ることができます。それに対して、宣言型はこの「結果」を宣言する形で動作させるやり方です。K8sでは、「コンテナを3つ含んだPodを起動する」といった宣言を行うと、その宣言に従った状態になります。何らかの理由でコンテナが停止してしまい、宣言したのと違う状態になった場合、自動的にコンテナを別途起動して宣言通りの状態に復帰しようとします。システムが自律的に正常な状態を維持しようとするので、運用管理者はシステムの状態を常に監視したり、細かな命令を沢山実行したりしなくてもよいことになります。Mapでは10のステップに分かれています。重要なポイントを抜き出してみましょう。コンテナ化クラウドの特徴として必要なリソースを必要なだけ利用できる、という点が挙げられますが、コンテナはクラウドにおいて重要な技術となりつつあります。通常のクラウドでは仮想マシンを活用するのが普通になりつつありますが、クラウドネイティブではコンテナの活用も必要です。CI/CD本コラムでもDevOpsを実現するための重要な考え方としてCI/CDを何度も取り上げてきました。クラウドネイティブを実現する上でも、CI/CD、DevOpsの開発手法を取り入れることは重要だといえます。オーケストレーション俊敏にCI/CDのパイプラインを廻して、次々とアプリケーションをデプロイしていくには、コンテナを管理する基盤としてK8sのようなコンテナオーケストレーションツールの活用も必要でしょう。することはクラウドネイティブに限らずシステム運用において重要なポイントです。クラウドネイティブの基本として押さえておきたいのはこれらの事項でしょう。他にも様々な技術が取り上げられていますが、これらはクラウドネイティブ独自というわけでもありませんので、必要に応じて取り入れていけばよいでしょう。クラウドネイティブなのかこのように、クラウドネイティブは様々な技術に支えられて実現されるもの、と分かりますが、これらは手段であり目的ではありません。クラウドネイティブを実現しなければならないのでしょうか。1つは、ビジネスの要求に応えられるアプリケーションを俊敏に開発できるようにするためといえます。その言葉通りの「アジャイル(俊敏な)開発」や、「DevOps」が求められることと同じ考え方です。現在のビジネスでは、Webアプリケーションやスマートフォンアプリを活用するのが当たり前になりつつあります。ビジネスのスタイルも企業対企業のBtoBだけでなく、企業対顧客が直接繋がるBtoCも大きな広がりを見せており、より使いやすいアプリケーションが求められます。これらのニーズを満たすのが、開発手法としてのアジャイルやDevOpsであり、インフラとしてのクラウドネイティブだといえます。1つはクラウドの特性であるスケーラビリティを最大限活かせることです。ビジネスの成長に合わせてシステムの性能を向上させていくには、単にCPUやメモリを追加していく「スケールアップ」だけでなく、並列実行性を高めていく「スケールアウト」を行う必要があります。コンテナ上でアプリケーションを実行することは、このスケールアウトを容易に実行する手段といえます。並列化はシステムの冗長性を高め、堅牢にしていく手段でもあります。他にも自動化を推し進めることでシステム運用のコストを低減できるなど様々なメリットがありますが、いずれにしてもウォーターフォール型の開発やオンプレミスに代表されるような従来のシステムに対する考え方から脱却する必要があるでしょう。”文化”を変えるアジャイルやDevOpsを取り入れるには「文化を変える」必要があるのと同様、クラウドネイティブなアプリケーション開発を行うにも文化を変えていく必要があるといえます。CNCFの定義に出てくる「イミュータブルインフラストラクチャ」は分かりやすい例でしょう。従来であれば、構築したシステムにパッチを当てることで継続的に使用するのが普通のシステム運用管理です。イミュータブル(不変の)インフラストラクチャでは、文字通り構築した後のシステムには手を加えず、パッチを当てる必要がある場合には自動化を活用して新しい環境を再度構築し直すという、まったく異なるアプローチを採るのです。このように、今までのやり方とはまったく異なる手法を積極的に取り入れていく姿勢を求められるのが、クラウドネイティブな考え方ということではないでしょうか。徹)※記載されている会社名、製品名、サービス名は各社の商標または登録商標です。