こんにちは!アイスリーデザインのオオタケです。
突然ですが皆さん、こんな悩みはありませんか?「システム構築のコストや時間がネックで新しいサービス展開に踏み切れない…」もしこのような悩みに心当たりがあるなら、クラウドネイティブが解決の糸口になるかもしれません。
「言葉は聞いたことがあるけれど、具体的に何のことかわからない…」という方も多いのではないでしょうか? 実は私もそのひとりでした。
この記事では、クラウドネイティブの基礎知識から導入メリットや活用事例に加え、導入時に考慮すべき課題についてもわかりやすく解説します。
クラウドネイティブとは?
クラウドネイティブとは、インターネット上のクラウドサービス(Amazon Web Services(AWS)、Microsoft Azure、Google Cloud Platform(GCP) など)を活用して、必要な時に必要な分だけリソース(サーバーやストレージ、ネットワークなど)を利用できる技術のこと。
たとえば、旅行用のカバンを想像してみてください。荷物をどんどん詰めていくと、カバンがパンパンになってしまいますよね。別のカバンを準備すれば荷物はもっと入りますが、その分持ち運びも大変になります。
このカバンを「ストレージ(データを保存する場所)」に置き換えると分かりやすいでしょう。ストレージを増やせばデータは入りますが、その分コストがかかりますし管理も大変になります。クラウドネイティブはそんな時に役立つ「〇次元ポケット」のような存在。必要な時だけリソースを使い、使わない時には手放せるんです。
クラウドネイティブの具体例
クラウドネイティブはすでにさまざまな形で私たちの生活に浸透しています。意識していないところで、当たり前のように利用しているサービスやアプリケーションの多くも、クラウドネイティブ技術に支えられています。
- インターネットバンキング
インターネットバンキング、つまり銀行のオンラインサービスでは、クラウドネイティブ技術を使うことで、24時間365日、安定したサービスを受けられるようになっています。
もしこれが、自社でサーバーを持って運営する「オンプレミス」で作られていたとしたら、やり取りが今よりずっと重くなってしまい、スマートフォンで送金したり残高を確認したりするのに時間がかかって不便だったかもしれません。
さらに、クラウドネイティブでは最新のセキュリティ技術を簡単に取り入れられるので、データを安全に守る仕組みもより強化されています。
- オンラインショッピング
大手のECサイトやフリマアプリでは、クラウドネイティブ技術を使って、たくさんの商品情報や顧客データを効率よく管理しています。
たとえば、セールのときなどにアクセスが一気に増えても、クラウドネイティブ技術によってシステムが自動的に対応してくれます。必要なときだけたくさんのリソースを使えるようになるので、サイトやアプリがスムーズに動いて、利用者はストレスなく操作できます。
- 地図アプリ
外出時に便利なスマートフォンの地図アプリは、クラウドネイティブ技術によってリアルタイムの交通情報や自分の位置情報を処理しています。
たとえば、渋滞を避ける最適なルートを教えてくれたり、周辺のお店や施設の情報をすぐに表示してくれたりするのもこの技術のおかげです。目的地に最短時間で着けるようになるのは、クラウドネイティブ技術を活用しているからこそできることなのです。
クラウドネイティブの普及率
いま、クラウドネイティブは、世界でも日本でも急速に普及しています。
たとえば、総務省が2024年7月に公開した情報通信白書によると、クラウドネイティブの実現を支えている「パブリッククラウドサービス」の市場は、2023年に世界で5,636億ドル、日本で3兆1,355億円(前年比25.8%増)に達すると予想されています。世界でも日本でも、これほど大きな市場規模を持つ分野は限られています。
また、Mordor Intelligenceのレポートによると、クラウドネイティブ市場は2024年に約87.6億ドル、2029年には318.3億ドルになると予想されています。そこから年平均成長率(CAGR)を算出すると、29.41%。世界経済の成長率は2%~4%、IT業界だけに絞っても5%~10%ほどで、特に成長が早い分野でも10%~20%ほどであることを考えると、非常に高い成長率です。
これらのデータは、クラウドサービスがもはや一部の先進企業だけでなく、多くの業種・企業にとって不可欠なインフラになっていることを示しています。
クラウドネイティブの普及が加速した背景
ここまでクラウドネイティブが注目され、普及が加速した背景には、以下のようなできごとが関係しています。
- 市場の競争激化
2000年代後半〜2010年代に、革新的なアイデアやサービスの登場、スピード感を持った「リーン・スタートアップ」(小さく始めて素早く改善)で他社と差別化する企業が増加。これにより、市場変化に迅速に対応し、柔軟な開発・運用を可能にする仕組みが求められるようになりました。そのため、その要件を満たすクラウドネイティブが注目を集めたのです。
- 「2025年の崖」
経済産業省が2018年のDXレポートで指摘した「2025年の崖」とは、日本企業が古いITシステム(レガシーシステム)に依存し続けることで、2025年以降に大きなリスクや損失が発生する可能性のこと。たとえば、システム障害による業務停止、サイバー攻撃による情報漏洩、IT人材不足による保守困難、そして競合に遅れを取ることによる競争力低下などが想定されています。こうしたリスクを回避するには、システムの刷新や新技術への移行が欠かせません。
その点クラウドネイティブは、最新の技術やツールを活用する設計思想に基づいているため、データ分析やAI、IoTといったDXを進める新しい技術を取り入れる基盤を整えられます。さらに「マイクロサービスアーキテクチャ」「コンテナ技術」などの考え方や仕組みによって段階的に移行できるため、企業のDXを後押しする仕組みとして評価されるようになりました。
- COVID-19とニューノーマル
コロナ禍でデジタル化が一気に進み、ビジネスやコミュニケーションの多くがオンラインに移行。働く場所を問わないスタイルが広まり、リモートでもスムーズに仕事ができるようにするツールや、オンライン会議やイベントを安定して配信する仕組み、安全にネットにアクセスできる技術など、新しいライフスタイルに合わせた需要が生まれました。
この需要は予測が難しく、特定の期間に急にトラフィック(アクセス量)が増えることがあります。その点、必要に応じてリソース(計算能力やデータ処理の容量)を増減できるクラウドネイティブなら、余分にリソースを持つ必要性も、需要増加でシステムがダウンするリスクも抑えられるため、多くの企業の注目を集めたのです。
クラウドネイティブと混同されやすい用語
クラウドネイティブと混同されやすい用語に、「クラウドシフト」「クラウドリフト」「クラウドファースト」「クラウド・バイ・デフォルト」があります。より正確なクラウドネイティブの理解のために、これらとの違いを説明します。
クラウドシフト
クラウドシフトは、今まで自社で管理していたサーバーやシステムを、インターネット経由で利用できるクラウド環境に段階的に移す方法のこと。
一方、クラウドネイティブは、最初からクラウド環境を活用するために設計されたシステムやアプリケーションのことを指します。
つまり、クラウドシフトは既存のシステムをクラウドに移すことに重点を置き、クラウドネイティブはクラウドの特性を生かして新たにシステムを構築することに焦点を当てています。クラウドシフトはクラウドネイティブを目指すための第一歩とも言えますが、クラウドネイティブの方がクラウドの利点をより効果的に活用できます。
クラウドリフト
クラウドリフトは、今使っているシステムをほぼそのままクラウドに移す方法です。クラウドシフトと混同しやすいですが、クラウドシフトは段階的な移行を指し、クラウドリフトはシステム全体を一度に移す点で異なります。
まとめると、クラウドリフトは既存システムをそのままクラウドに移す方法、クラウドネイティブはクラウド向けに新しく作る方法、クラウドシフトは段階的にクラウドへ移す方法です。
クラウドファースト
クラウドファーストは、システムを作るときに、まずクラウドを使うことを考える方針のこと。その際は、必要に応じてクラウド以外の方法も選択肢に挙がります。
一方、クラウドネイティブは、最初からクラウドを使うことを前提にして、クラウドの特長を最大限に活かすようにシステムを設計・開発する考え方のこと。
つまり、クラウドファーストは「クラウドを使うかどうか」を決める段階の方針で、クラウドネイティブは「クラウドをどう活用するか」を考える設計の方法と言えます。
クラウド・バイ・デフォルト
「クラウド・バイ・デフォルト」は、日本政府の情報システム構築においてクラウド利用を最初に考える、という方針のこと。
2023年の「政府情報システムにおけるクラウドサービスの利用に係る基本方針」では下記のように定義されています。
政府情報システムは、クラウド・バイ・デフォルト原則、すなわち、クラウドサービスの利用を第一候補として、その検討を行うものとする。
引用:政府情報システムにおけるクラウドサービスの利用に係る基本方針
つまり、「クラウド・バイ・デフォルト」はクラウド利用を優先する国の方針であり、「クラウドネイティブ」はクラウドの利点を活かすための具体的な設計や技術を指しています。
クラウドネイティブのメリット
クラウドネイティブ技術を導入することで、以下のメリットがあります。
1. 事業成長に合わせたリソース拡張ができ、無駄なコストがかからない
クラウドネイティブ技術の大きなメリットのひとつが「スケーラビリティ(拡張性)」です。
従来のオンプレミス環境では、初期費用をかけて大量のハードウェアを購入し、その後、成長に応じて入れ替えや増設を行う必要がありました。
しかし、クラウドネイティブでは、事業の成長に合わせて必要なリソースを段階的に拡張できます。たとえば最初は小規模なリソースでサービスを開始し、ユーザー数が増えてきた段階でリソースを追加していく、といった形です。そのため、あらかじめ過剰な設備投資をする必要はありません。しかも、料金は従量課金制なので使った分だけ支払えばOK。つまり、必要最低限のリソースでスタートし、成長に応じて段階的に拡張できるのです。
また、クラウドではサーバーやストレージの追加が簡単なため、新たな市場への参入やサービス拡張のタイミングを逃さず対応できます。たとえば、国内限定のサービスをグローバル展開する際も、利用エリアに合わせてインフラを拡大することが可能です。
2. サービス停止やシステム構築の手間なく新機能をリリースできる
クラウドネイティブでは「マイクロサービスアーキテクチャ」という設計思想が採用されます。これは、アプリケーションを小さな独立したサービスの集まりとして作る方法です。この方法で開発を行うと、サービスに新機能を追加する場合や一部の機能を修正する場合でも、他の部分を止めることなくリリースできます。
また、クラウド環境ではサーバーの準備や設定に手間がかからないので、開発チームはシステム構築ではなく、新しいアイデアを形にすることに集中できます。
3. システム運用が自動化されて、トラブルがぐっと少なくなる
クラウドネイティブ技術を使うと、システムの運用が自動化できるようになります。具体的には、サーバーを増減したり、アプリを動かす場所を決めたり、ネットワーク上のデータの流れ(トラフィック)を調整したりといった作業が、自動でできる仕組みが作れるんです。
この運用自動化を支える代表的な技術として「Kubernetes(クバネティス)」というものがあります。Kubernetesは、オープンソースの「コンテナオーケストレーションシステム」です。「コンテナ」は、アプリを動かすための小さな独立した箱のようなものだと思ってください。これを使うと、アプリをいろいろなコンテナに分けて動かし、それを効率よく管理できるようになります。
たとえば、サーバーが忙しくなったときには自動でリソースを増やしたり、逆に使っていないときには減らしたりできます。また、ネットワークが混み合っても、自動でデータの流れをうまく調整してくれるんです。こうした仕組みのおかげで、人間が作業を間違えるリスクが減って、運用にかかるコストを削れますし、システムが安定して動くようになります。
※Kubernetes(クバネティス/クバネテス/クーべネティス、また、K8sと略される)Googleが開発したオープンソースのコンテナオーケストレーションシステム。コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化し、信頼性と運用効率を向上させる。インフラストラクチャを抽象化し、開発者がアプリケーションに集中できる環境を提供。クラウドやオンプレミスなど、さまざまな環境で利用可能。
4. 急な需要増やトラブル時も安定してサービスを提供できる
クラウドネイティブでは、「スケールアップ・スケールダウン」と「冗長化」という仕組みで、システムの変化に柔軟に対応できます。
スケールアップ・スケールダウンとは、利用者の増減に応じてシステムの規模を自由に調整すること。たとえば、ECサイトでセールをやっているときにアクセスが急に増えても、クラウドならすぐにサーバーを増やして対応できます。また、アクセスが減ったときはリソースを減らして無駄なコストを削れます。これを「自動スケーリング」といいます。
一方、冗長化はシステムを複数の場所で動かしておくことで、どこか一箇所に問題が起きても他がカバーして動き続ける仕組みです。このような設計により、急な需要増や災害時にもスムーズに対応できます。
利用者にとっても、アクセスしたときに「ページが開かない」「動作が遅い」といった不便が起きにくくなったり、災害時にシステムが突然停止するリスクが少ないため、安心して使えるというメリットがあります。
5. メンテナンス中でもサービスを止めずに提供できる
これまでのシステムでは、サーバーやOSの管理とアプリケーションが一緒に扱われていたので、OSをアップデートする際にはアプリを止める必要があり、利用者の少ない深夜や休日に作業しないといけませんでした。また、あまり頻繁にサービスを止めると利用者に迷惑がかかるので、こまめなアップデートはできませんでした。
しかし、クラウドネイティブではアプリとインフラの管理が切り離されているので、サーバーやOSの状態に関係なくアプリを更新できます。また、クラウドプロバイダーがサーバーやOSの管理をしてくれるおかげで、開発者や運用担当者はアプリケーションに集中できます。メンテナンスの影響を受けずにサービスを続けられるので、利用者の満足度も上がります。これにより、メンテナンス作業が効率化され、重要なタスクに時間を使えるようになります。
利用者は、メンテナンスの影響を受けずにサービスを利用できるため、「定期メンテナンスで使えない」といった不便が減ります。また、サービス提供側が安定した運用を実現できるので、安心感のある使いやすいサービスを受けられるようになります。
クラウドネイティブのデメリット
クラウドネイティブは非常に便利で多くのメリットがありますが、導入にはいくつかのデメリットも存在します。
1. 技術的な複雑さ
クラウドネイティブ技術は、従来のシステムと異なり「マイクロサービス」「コンテナ」「DevOps」など新しい技術が多く含まれます。こうした新しい技術の習得には時間がかかり、トレーニングや資格の取得が必要になります。
また、技術を導入する際は、チーム全体で理解を深め、運用に慣れていく意識が大切です。社内ですべて対応するのが難しい場合、外部の専門家に支援を依頼することも解決策のひとつです。
2. セキュリティ対策の難しさ
クラウドネイティブでは、セキュリティの責任範囲が複雑です。クラウド事業者が一部のセキュリティを担当しますが、企業側でもデータ暗号化やアクセス制御などの対策をしなければなりません。
しかし、クラウドサービスの種類によって対応の線引きが曖昧なので、不適切な設定が原因でデータ漏洩が発生する恐れがあります。たとえば、重要な情報を暗号化せず保存したり、アクセス権限を広く設定しすぎたりというミスが想定されます。
このため、企業は定期的にセキュリティ監査や脆弱性テストを実施し、クラウド事業者の提供するセキュリティ機能を正しく活用できるようにしなければなりません。また、設定の理解が不十分な場合は専門知識を持つ人材が必要です。
3. 運用コスト管理の難しさ
クラウドサービスは、使った分だけ支払う従量課金制が一般的です。そのため、使い方次第ではコストが予想以上に高くなります。たとえば、不要なシステムを停止せず使い続けたり、利用状況を把握せずにリソースを多く割り当てたりすると、無駄な費用が発生します。
コストを最適化するためには、リソースの使用状況を定期的に監視し、不要なものを削ることが大切です。また、リソースの自動管理ツールを導入することでも無駄なコストを防げます。
また、導入初期はコスト意識が薄れがちなので、定期的な見直しと管理体制を強化する必要があります。
4. ベンダーロックイン
「ベンダーロックイン」とは、特定のクラウド事業者に依存しすぎて、他の事業者へ移行するのが難しくなる状態のこと。事業者ごとにシステムやデータ管理の仕組みが異なるため、移行には大きなコストや時間がかかります。
たとえば、特定の事業者が提供するサービスが突然変更された場合、企業はその対応を余儀なくされます。
このリスクを避けるには「マルチクラウド」と呼ばれる複数のクラウド事業者を併用する方法や、オープンソース技術を活用する方法が有効です。ただし、管理が複雑になるデメリットもあるため、自社に合ったバランスを見つけることが大切です。
5. エンジニア不足と人材確保の難しさ
クラウドネイティブ技術は変化が速く、高い専門性が求められます。そのため、必要な知識やスキルを持つエンジニアは多くありません。
人材を確保できず、エンジニアが環境設定やセキュリティ設定を適切に行えないと、情報漏えいなどの大きな問題が起こる可能性があります。
もし確保できたとしても、そのエンジニアが退職することになった場合、フォローできる別の人材がいないとシステムが適切に管理できなくなるリスクもあります。
そのため企業では、社内人材を育成する仕組みを整えたり、人材の流出を防ぐために働きやすい環境や適切な育成体制を整えたり、外部のエンジニアに発注する場合のコストを見積もったりしておく必要があります。
6. 既存システムのアーキテクチャ変更の難しさ
オンプレミス環境からクラウドネイティブへ移行する場合、システムのアーキテクチャ(設計)をそのまま移行しても問題が発生する可能性があります。クラウドに適した設計に変更するには時間や手間がかかり、人材や技術力も必要です。
さらに、クラウド移行は単なるインフラのアップデートではなく、企業全体の意識改革が求められます。従来のやり方に固執すると、トラブルや運用効率の低下につながるため、クラウドを前提とした「新しい仕組みづくり」が不可欠です。スムーズに移行するためには、専門の技術者と共に計画を立て、段階的に変更を進めることが重要です。
クラウドネイティブで使用される技術
クラウドネイティブの普及を推進している「CNCF(Cloud Native Computing Foundation)」によると、クラウドネイティブの定義は、以下の3項目となります。
参考:CNCF Cloud Native Definition v1.1
- コンテナ、サービスメッシュ、マイクロサービス、宣言的API、サーバーレスなどの技術から構成されていること
- 強力な自動化により、高頻度かつ予測可能な変更を最小限の労力で実現できること
- CNCFによる、オープンソースのエコシステムの維持、ベンダーニュートラルなツールと技術の提供によって、イノベーションが促進されていること
この定義では、クラウドネイティブで使用する技術に明確な指定はありません。しかし、定義に基づいてクラウドネイティブを実現する際、代表的とされる技術がありますので、そのいくつかをご紹介します。
1. コンテナ
コンテナは、アプリケーションとその実行に必要な環境をひとつにまとめる技術です。たとえるならNintendo Switchのようなものです。ゲーム機本体にゲームソフトや必要なものが全部入っているので、家でも外出先でも、場所を選ばずにゲームが楽しめます。コンテナを使えば、開発環境やテスト環境と本番環境の違いによる不具合やトラブルを防げて、アプリケーションをどこでも同じように安定して動かせます。
2. マイクロサービス
マイクロサービスは、アプリケーションを機能ごとに分けて、それぞれを独立したサービスとして開発・運用する手法です。これにより、一部の機能に問題が起きても、ほかの機能に影響を与えず、すぐに修正やアップデートができるようになります。
たとえば「商品検索」「カート機能」「決済機能」を独立したマイクロサービスとして作ると、ひとつの機能だけを個別に開発したり直したりできるので、作業がほかの機能に影響しません。そのため、複数のチームが並行して別々の機能を開発できるので全体の開発スピードが上がります。また、ひとつの機能だけを直せばいいのでシステム全体を触る必要がなく、部分的な変更や追加が簡単にできるようになります。
3. サービスメッシュ
サービスメッシュは、複数のサービス同士の通信を管理する仕組みです。クラウド技術では、ひとつのアプリケーションを「マイクロサービス」と呼ばれる小さなサービスの集合体として動かすことが多くなりました。しかし、マイクロサービス同士が頻繁にやりとりを行うため、通信が複雑になり、速度が遅くなる問題が出てきます。
そこで登場するのがサービスメッシュです。サービス間の通信を最適化し、通信の負荷を分散することで、速度を上げたり安定性を保ったりする役割を果たします。また、通信内容を暗号化したり、認証機能を加えたりすることで、安全にやりとりができるようになります。
さらに、サービスメッシュを使うと、通信の監視やトラフィック制御が簡単にできるため、障害が発生したときも早く気づくことができます。これらの機能は、アプリケーションのコードを新しく書き加えなくても利用できるため、開発者にとっても大きな助けになります。
つまり、サービスメッシュは通信の効率化・安全性・信頼性を実現する技術であり、マイクロサービスを活用する上で欠かせない要素と言えます。
4. イミュータブルインフラストラクチャ
イミュータブルインフラストラクチャとは、日本語で「不変のインフラ」を意味します。従来のインフラでは、OSのアップデートや設定変更を行うことで、アプリケーションが正常に動作しなくなるリスクがありました。
しかし、イミュータブルインフラストラクチャでは、必要な変更がある場合、インフラに手を加えず、変更内容を反映した新しい環境を一から作り直します。たとえばOSをアップデートしたい場合は、アップデート済みの新しいサーバーを用意し、そちらに切り替える形です。古い環境は役目を終えたらそのまま削除するため、直接変更を加えたことで起こる不具合やトラブルを防げる仕組みになっています。
この仕組みにより、インフラの状態は常にシンプルで管理がしやすくなります。設定変更や更新履歴の管理が不要になることで、運用の複雑さも削れます。また、変更による動作不良やセキュリティの問題も防ぎやすくなり、インフラの信頼性が上がるのです。
5. 宣言型API
宣言型APIは、システムに「最終的に達成したい状態」を指示するAPIの仕組みです。たとえば「コンテナが4つ起動していること」を指示すれば、システムはその状態を維持するよう自動的に動作します。コンテナがエラーで停止しても、システムは自律的に新しいコンテナを起動し、常に指示された状態を保ちます。
宣言型APIとよく比較される「命令型API」は、「〇〇を実行、その後△△」と手順をひとつずつ命令する方式です。途中でコマンドが失敗すると処理が止まるリスクがあり、運用管理者が常に監視しなければなりません。
宣言型APIでは、手順ではなく「目標の状態」を伝えるだけでよいため、運用管理者の負担が減り、サービス運用もシンプルになります。「マイクロサービス」などで、サービス間の複雑な連携を成立させるために活用されます。
6. CI/CD
CI/CD(シーアイ・シーディー)は、ソフトウェアを開発してリリースする流れを自動化する技術です。少しイメージしづらいかもしれませんが、「引っ越しのときに役所に住所変更を届け出ると、銀行やECサイトなどの登録情報も自動的に更新される」想像をするとわかりやすいかもしれません。この仕組みを使うと、手作業の手間が削れ、正確かつスピーディーに変更内容を反映できます。
CI/CDは、大きく2つの部分で構成されています。
- 継続的インテグレーション(CI)
開発者がコードを変更するたびに、その変更を自動的にテストします。これにより、変更した部分が他の部分に悪影響を与えていないかすぐに確認できます。「インテグレーション」は「統合する」という意味で、変更したコードを既存のシステムと合わせて動作確認するイメージです。 - 継続的デリバリー(CD)
CIでテストを通過したコードは、自動的に本番環境(実際に動くシステム)に反映されます。これによって、人の手で行うデプロイ作業が減り、リリースまでの時間が短くなります。「デリバリー」は「届ける」という意味で、完成したコードをそのまま使える状態にすることを指します。
たとえば、GitHub Actionsなどのツールを使えば、コードの変更をリポジトリ(コードの保管場所)にアップロードするだけで、テストから本番環境へのデプロイまでを自動で実行できます。これにより、開発者は手作業を減らし、新しい機能や修正を迅速かつ安全にリリースできます。
CI/CDについてより詳しく知りたい方はこちらをご覧ください。
>CI/CDとは?CI/CDツールを選ぶポイント7選&ツール比較!
クラウド ネイティブ導入のステップ
CNCFでは、「Cloud Native Trail Map」というガイドラインを出していて、クラウドネイティブを取り入れるための10のステップを紹介しています。
引用元:TrailMap files from the cncf/landscape repo
これらのステップは、企業の状況に合わせて自由に選べるもので、すべてを順番通りにやる必要はないとされていますが、目を通しておくと参考になります。
以下にガイドラインの和訳を載せていますので、ぜひご活用ください。
クラウドネイティブ トレイルマップ
クラウドネイティブのランドスケープ(l.cncf.io)には、たくさんの選択肢があります。このクラウドネイティブ トレイルマップは、オープンソースのクラウドネイティブ技術を活用するためのおすすめの手順をまとめたものです。それぞれのステップで、ベンダーがサポートするソリューションを選ぶか、自分でホスティングするかを決められます。ステップ3では、必要に応じてベンダーサポートを使うこともできます。
サポートリソース
- トレーニングと認定
CNCFやそのパートナーが提供するトレーニングを試して、「Certified Kubernetes Administrator(認定Kubernetes管理者)」や「Certified Kubernetes Application Developer(認定Kubernetesアプリケーション開発者)」の資格を取るのを目指しましょう。 l.cncf.io/training
- コンサルティング支援
ベンダーは、Kubernetesのインストールや設定のサポートをしてくれます。CNCFは、認定Kubernetesサービスプロバイダー(KSP)のリストも用意しています。l.cncf.io/ksp
- CNCFエンドユーザーコミュニティへの参加
クラウドネイティブサービスを外部に提供していない企業向けのコミュニティです。cncf.io/enduser
クラウドネイティブとは?
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドといった現代的で動きのある環境で、スケーラブルなアプリを作ったり運用したりする力をくれます。このアプローチには、コンテナやサービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、宣言型APIなどが含まれています。
これらの技術を使えば、柔軟で丈夫、管理しやすくて見える化されたシステムを作れます。また、自動化を取り入れることで、エンジニアは少ない労力で、頻繁かつ確実に、大きな変更を加えられるようになります。
クラウドネイティブコンピューティング財団(CNCF)は、この考え方を広めるために、オープンソースでベンダーに縛られないプロジェクトのエコシステムを支援し、みんなが最新の技術を使えるようにしています。l.cncf.io/
- コンテナ化
- Dockerコンテナを使ってアプリをコンテナ化します(Dockerは、アプリをどこでも動かせるようにする「コンテナ」の代表的なツールです)。
- どんな大きさのアプリでもコンテナ化できるので、古いプログラムでも問題ありません。
- 少しずつアプリを分けて、これから追加する機能はマイクロサービス(小さな部品)として作る方向に進むべきです。
- CI/CD
- 継続的インテグレーション/継続的デリバリー(CI/CD)を設定して、コードを変えたら自動でコンテナが作られてテストされ、ステージング環境や本番環境に配置される仕組みを作ります。
- 自動ロールバック(問題があったら元に戻す仕組み)やテストも用意しておきましょう。
- Argoというツールを使えば、Kubernetesと連携して、ワークフロー管理やデリバリーが簡単になります。
- オーケストレーションとアプリケーション定義
- Kubernetes(クバネティス)は、アプリを動かす環境を自動で管理してくれるツールです。
- 認定されたKubernetesや自分でセットアップしたものを使うとよいでしょう。
- Helmチャートというツールを使えば、複雑なアプリも簡単に管理できます。
- 可観測性と分析
- システムの状態を見える化するために、監視やログ収集、トレースのツールを選びます。
- たとえば、Prometheus(監視)、Fluentd(ログ収集)、Jaeger(トレース)があります。
- トレースを使うなら、OpenTracing対応のツール(例: Jaeger)を選ぶと便利です。
- サービスプロキシ、ディスカバリー、メッシュ
- CoreDNSは、サービスディスカバリー(アプリやシステムの部品が、互いの場所を自動で見つける仕組み)を助ける高速で柔軟なツールです。
- EnvoyやLinkerdは、サービスメッシュ(アプリの部品間のやり取りを管理する仕組み)を作るのに役立ちます。
- これらを使うと、システムの状態チェック(ヘルスチェック)やデータのルート決め(ルーティング)、負荷分散が簡単になります。
- ネットワーク、ポリシー、セキュリティ
- 柔軟なネットワークを作るなら、Calico、Flannel、Weave NetなどのCNI(Container Network Interface)対応ツールがおすすめです。
- Open Policy Agent(OPA)は、Kubernetesで動くポリシーエンジンです。システムのルールや制限を管理できます。
- FalcoはKubernetes用の異常検出ツールで、不正アクセスやおかしな動きを見つけるのに役立ちます。
- 分散データベースとストレージ
- ひとつのデータベースで対応できない大規模なデータ処理が必要な場合、Vitessを使うとKubernetesでMySQLを効率よく運用できます。
- Rookは、CephやEdgeFSなど、いろいろなストレージをまとめて使えるツールです。
- TiKVは、複数のマシンに分散してデータを保存できる信頼性の高いシステムです。
- etcdは、設定情報を管理するための軽量なキーバリューストアです。Rustというプログラミング言語で作られています。
- ストリーミングとメッセージング
- JSON-RESTより高いパフォーマンスが必要な場合、gRPCやNATSといったRPC(リモートでデータや命令をやり取りする仕組み)を使うのがいいです。
- NATSは、リクエスト/リプライ、Pub/Sub(公開・購読)、キューなど複数の通信方式に対応しています。
- CloudEventsは、イベントデータを共通フォーマットで記述するための仕様です。これを使うと、異なるシステム間でのやり取りがスムーズになります。
- コンテナレジストリとランタイム
- Harborは、コンテナの保存や署名(データの安全性確認)、スキャンを行うツールです。
- コンテナランタイム(コンテナを実際に動かすためのソフトウェア)としては、containerdやCRI-OといったOCI(Open Container Initiative)準拠のものが一般的です。
- ソフトウェア配布
- 安全にソフトウェアを配布するなら、The Update Frameworkを実装したNotaryを使うと安心です。
クラウドネイティブに適した開発手法・組織文化
アジャイル開発とDevOps
アジャイル開発とDevOpsは、「スピード感」「柔軟性」「自動化」という点でクラウドの特性と非常に相性が良く、クラウドネイティブなシステムを効率よく実現するための手法・考え方として注目されています。
たとえば、クラウドネイティブでは、クラウド環境を利用することでシステムの構築や変更が素早く行えるようになります。その点、アジャイル開発は、すばやく機能を追加したり改善したりできる点が、DevOpsはシステムの変更を安全かつ効率的に反映できる点がメリットです。これらが合わさることで、変化に素早く対応できるのです。
また、クラウドネイティブでは、必要に応じてシステムのスケールアップ(拡張)やスケールダウン(縮小)が簡単にできます。たとえば、急にユーザーが増えても、クラウドを使えば柔軟にシステムの容量や処理能力を増やせます。アジャイル開発とDevOpsでは、少しずつシステムを作りながら改善を重ねるため、こうしたクラウドの柔軟性を最大限に活かせます。
さらに、クラウドネイティブでは、インフラやシステム管理の自動化が行いやすいです。たとえば、サーバーの準備やソフトウェアのデプロイ(反映)を自動で行えます。 DevOpsでは「CI/CD」(継続的インテグレーション・継続的デリバリー)という仕組みを使い、システムのビルド・テスト・リリースまでを自動化します。これらを組み合わせることにより、人の手間を減らすことができます。
組織文化
クラウドネイティブのメリットである「スピード感」「柔軟性」「自動化」を最大限に活かすには、開発や運用を行う組織が小さなチームに分かれ、それぞれのチームが自分たちで意思決定できる環境を作るのが理想です。
小さなチームに権限が与えられることで、意思決定のプロセスがシンプルになります。また、業務範囲や責任が明確なので、変化に柔軟に対応しやすくなります。さらに、「DevOps(デブオプス)」のように、開発チームと運用チームが協力しやすくなり「自動化」を進めやすい環境が作れます。
これがなければ、スピードと柔軟性が求められるアジャイル開発やDevOpsは実現できません。
そのため、チームがスムーズに動けるように、業務の見直しや方針決定のプロセスを改善する必要があります。特に、意思決定が上層部に集中している場合は、現場のチームが素早く動けるように、組織全体で風通しの良い環境を作ることが大切です。これには、上層部と現場がしっかりコミュニケーションを取り、必要に応じて組織改革を行うことも含まれます。
まとめ
クラウドネイティブ技術を活用することで、業務の効率化やコスト削減、最適なユーザー体験を実現し、ビジネスの成長を加速させることができます。一方で、導入には専門的な知識や経験が必要であり、セキュリティ対策やコスト管理など考慮すべき課題もあります。
アイスリーデザインでは、クラウドネイティブ導入に関するコンサルティングやシステム開発支援など、お客様のニーズに合わせたサービスを提供しています。AWS関連のサービスを活用した開発について知りたい方はこちら(AWS CodePipeline、AWS App Runner、AWS Fargate、Amazon ECS(Amazon Elastic Compute Cloud))をご参照ください。また、オンプレミスからの移行を検討しているなど、クラウドネイティブについて、さらに詳しく知りたい方は、ぜひお気軽に弊社までお問い合わせください。
本記事は、2024年9月2日に公開された記事を再編集し、2024年12月27日にin-Pocket編集部により情報を追記しております。