はじめに

こんにちは、ENKです。
 

クラウドプリセールス事例紹介シリーズとして、当社のクラウドに関する取り組みの一端を紹介させていただきます。本記事は、ある程度のクラウドに関する知識を持った方向けの内容となっていますので、予めご了承ください。
 

第三回目のテーマは「クラウドネイティブ」です。昨今では、クラウド・ファーストからクラウド・スマートに考え方が進み、更にはクラウドネイティブを前提とする開発の流れを肌で感じていると思います。しかし、実際にクラウドネイティブ化の実装を検討すると様々な課題があり、結局クラウド上でシフトさせるだけの移行に留まってしまうケースもあるかもしれません。このような課題を整理し、課題解決案についてお話ししていきます。
 

目次

  1. なぜクラウドネイティブ化を目指すのか
  2. クラウドネイティブ化の課題(技術者視点)
  3. クラウドネイティブ化の課題(お客様視点)
  4. クラウドネイティブ化の壁を超えるためには
  5. まとめ
  6. Appendix
     

1. なぜクラウドネイティブ化を目指すのか

「クラウドネイティブ」とは、「クラウド機能を最大限に活用したアプリケーション開発手法・運用のアプローチ」のことです。開発者はクラウドベンダーが提示する到達点を目指すことができるため、実践しやすい状態にあります。このため、クラウドネイティブ化を目指す1つ目の動機となります。

また、このアプローチによるビジネスメリットは下表に示されており、非常にインパクトのある内容となっています。これが2つ目の動機となります。このアプローチは、仮想サーバー時代のシステム構成でも重要視されており、企業が提供するITサービスにおいて重要な要素となっています。したがって、非常に魅力的な内容と言えます。

項目

クラウドネイティブ化で得られるビジネスメリット

効率性の向上

DevOpsや継続的デリバリー(CD)など、アジャイルなプラクティスを活用することで、開発者は、自動化ツールやクラウドサービス、最新の設計文化を使用して、スケーラブルなアプリケーションを素早く構築することができる。
⇒効率性が向上することで、アプリケーションの新規開発や機能改善活動がスムーズに実施できるようになる。その結果、システム品質が向上し、ユーザーエクスペリエンスが向上することが期待できる。
 

コストを削減する

物理インフラストラクチャの調達やメンテナンスには多額のコストがかかるが、クラウドを活用することでこれらのコストを軽減できる。これにより、運用にかかる経費を長期的に削減することができる。また、クラウドネイティブなシステムを構築することで、効率性が向上し、運用コスト自体も削減できる可能性がある。
⇒限られたIT投資コストの中で、他の投資に充てることができるようになり、例えば、他のシステムへの改善活動に活用する機会が得られる。
 

可用性を確保する

クラウドを活用することで、回復力と可用性の高いアプリケーションを構築できる。クラウド機能によりダウンタイムが発生することはなく、ピークシーズン中にはアプリのリソースをスケールアップして、ビジネス機会損失を抑制することができる。
⇒サービスの安定稼働のための組み込まれた機能を活用することで直ぐに利用が可能になっている
 

2.クラウドネイティブ化の課題(技術者視点)

現在のクラウド利用の到達点は、クラウドネイティブ化で得られるビジネスメリットを享受できる状態になっていることです。クラウド技術者は、クラウドネイティブに関する技術や開発手法に熟知していることが必要であるため、これが第一歩となります。これらのスキルが不足している場合、お客様のクラウドネイティブ化の要望には応えることができず、クラウド活用の段階を進むことができません。例えば、オンプレミスからの単純な移行や、クラウドに移行しただけで構成を変えることができず、クラウドネイティブ化を実現することができない可能性があります。

図:クラウド活用レベルの段階のイメージ

クラウドの活用の段階を上げるためには、クラウドネイティブ化に必要な技術や開発手法について確認し、自身や会社が保有するスキルにギャップがある場合は、そのギャップを埋める必要があります。この課題は技術者にとって重要なものとなります。

技術面の要求事項

クラウド技術を有した技術者の育成や確保ができない場合、技術面の要求事項に対応することが困難になる現実があります。しかし、最初からすべての技術を完全に習得する必要はありません。例えば、コンテナ技術に関する学習を通じてECSの操作を習熟することができます。実案件で利用可能な技術を習得しつつ、最終的にはクラウドネイティブ化を実現できるスキルを持つことが現実的な方法です。

技術手法

概要

適用技術

イミュータブルなインフラストラクチャ

インフラ全体を一時点の状態で固定化する仕組みを、Immutable Infrastructure(イミュータブルインフラストラクチャ)と呼ぶ。この仕組みは、インフラを一度構築したら、その後の構成変更やパッチ適用を行わずに、ある状態で固定することができる。これにより、リリースの標準化や管理の容易性が向上するとされている。

CloudFormation、OpsWorksなど

マイクロサービス

規模が小さいサービス同士を組み合わせて連携させることで、大規模なアプリケーションやサイトを構築する手法を、マイクロサービスアーキテクチャと呼ぶ。この手法により、各サービスを独立して開発・運用することができ、柔軟性や拡張性が向上するとされている。

ECS、EKS、Lambdaなど

宣言型API

宣言型APIとは、API設計において使用される手法の1つで、APIのリソースの状態を記述することで、必要な処理やアクションを実行するAPIを自動的に生成することができる。この手法により、従来の手動で作成するAPIに比べて柔軟性が向上し、スピーディーな開発が可能となる。

API Gatewayなど

サービスメッシュ

サービスメッシュは、マイクロサービスアーキテクチャで使用される一種のソフトウェアレイヤーで、複数のマイクロサービス間の通信やネットワーク通信を管理する。これにより、マイクロサービス間の通信コストの軽減や、セキュリティや監視などの機能を実現することができる。また、サービスメッシュによって、アプリケーションに新しいコードを記述せずに追加機能を導入することも可能になる。

AppMeshなど

コンテナ

コンテナは、複数のアプリケーションやサービスを単一のシステム内で暗黙的に分離する仕組み。コンテナを作成するためには、コンテナエンジンが必要となる。コンテナエンジンは、アプリケーションやサービスが必要とするライブラリやミドルウェアを含めた、特定の環境を仮想的に構築するためのツールである。これにより、仮想環境を瞬時に構築することができ、利用するアプリケーションの軽量化やスピードアップが可能になる。

ECS、EKSなど

開発面の要求事項

開発面においては、クラウドのサービスに適した開発手法を使用することで、開発生産性を向上させることができます。技術者は、実案件や教育プログラムなどを通じて徐々に必要なスキルを習得し、保有することが望ましいです。

開発手法

概要

Codeシリーズなど

継続的インテグレーション(CI)

CIとは、ソフトウェア開発プロセスにおいて、コードの品質管理やエラーの早期発見、修正、およびソフトウェアの配信プロセスの自動化を行う手法のことを指す。これにより、エラーやバグの早期発見と対処、ソフトウェアの品質向上、およびリリースまでの時間短縮が可能となります。CIを実践することで、より迅速かつ効率的なソフトウェア開発が実現できる。

Codeシリーズなど

継続的デリバリー(CD)

CDとは、ソフトウェア開発プロセスにおいて、ビルド、テスト、デプロイ、リリースといった段階の自動化を担当する手法のことを指す。この手法を使用することで、開発者はソフトウェアの品質を向上させ、スピーディーなリリースを可能にすることができる。CDでは、ビルドが完了した後、変更されたコードを自動的にテスト環境、ステージング環境、および本番環境にデプロイすることができる。最終的なソフトウェアのリリースまでの一連の過程を自動化することにより、継続的なソフトウェアデリバリーを実現することができる。

Codeシリーズなど

DevOps

DevOpsは、開発チームと運用チームのコラボレーションを改善するソフトウェア文化のこと。開発や運用に限らず、全ての関連するチームを結集し、自動化、シェア、コラボレーションを通じて高品質なソフトウェアを迅速かつ安定的に開発、デプロイ、および運用する手法となる。また、DevOpsはクラウドネイティブモデルに整合的な設計理念に基づいており、クラウドを活用した開発、デプロイ、および運用を推進する。DevOpsを実践することで、組織が迅速かつ効率的にソフトウェアを開発・追加機能のリリース・デプロイ・運用できるようになる。

N/A

サーバーレス

「サーバーレス」とは、クラウドプロバイダーが基盤となるサーバーインフラストラクチャを完全に管理するクラウドネイティブモデルのこと。

CloudFront、S3、API Gateway、Lambda、Auroraサーバーレスなど

3. クラウドネイティブ化の課題(お客様視点)

お客様の状況や価値観は様々であり、また担当者によって異なるため、クラウドネイティブ化がクラウド活用手段の一つであることを再認識し、個々のビジネスニーズに合致した解決策を探していく必要があります。プリセールス活動において私が対応している範囲ではありますが、お客様からの声をいくつか紹介します。
 

お客様が感じているクラウドネイティブ化の課題例

  •  社内に開発やレビューなど、対応可能な人材確保が難しい
    ⇒ビジネス面での人材育成を中心にしており、ITの特定技術分野に特化した人材を育成していないため、不足している人材を外注するにしても、高額な技術コンサルタントを雇う必要があるため、コストが高くなってしまうことが悩みの種である。
     
  • 新規システム開発の場合は良いが、既存システムの更新の際のクラウドネイティブ化は費用対効果を得にくい
    ⇒既存システムのクラウドネイティブ化には、新たな技術の学習コストや開発コストがかかるため、開発コストがどうしても高くなってしまい、システム規模によってはコスト面で悩みが生じてしまう。また、既存システムを単純にクラウドに移植した場合でも、最低限の機能改修に留められない場合があるため、慎重な判断が必要になる。
     
  • 単純なシステムの機能改修観点では、クラウドネイティブ化への投資が難しい
    ⇒中長期的なビジネスプランに基づいて、クラウドネイティブ化を行うことが有益かどうかを判断することが必要になる。そうでなければ、最小限の機能改修に留まることになる。
     
  • などなど・・・。

クラウドネイティブ化の成功には、ビジネスニーズに応じた費用対効果の見積もりや、アーキテクチャデザインの検討など、多くの要素が関わってきます。そのため、クラウド技術者は、お客様と密にコミュニケーションを取り、ビジネスニーズと技術的問題とのバランスを見ながら、最適なクラウドネイティブ化を提供することが必要になります。
 

4. クラウドネイティブ化の壁を超えるためには

クラウドネイティブ化を一気に実装することは、多くの課題に直面することになります。そこで、着実に実装を進めていくことが必要であると考えられます。そのためには、お客様のビジネス課題に対して技術面からの提案を行い、妥当なアーキテクチャを検討していくこと、そして、そのアーキテクチャを実現するために必要な技術や開発手法を熟知することが重要です。これらの活動を繰り返すことで、徐々にクラウドネイティブ化を実現していくことができます。

クラウド技術者は、お客様のビジネス課題に対する理解を深め、適切なアドバイスを行い、お客様のビジネス成長をサポートしていくことが求められます。これを継続的に実践することができれば、クラウドネイティブ化の壁を超えることができると思います。
 

5. まとめ

  クラウドネイティブ化という目標があることで、システム化デザインの方向性が一つに定まり、システム全体の設計がより効率的に進めることができます。そして、この目標を共有することで、クラウドネイティブアプリケーションの設計やアーキテクチャ設計をより効果的に行い、クラウドネイティブ化に向けた実現力の向上ができると考えられます。ただし、クラウドネイティブアプリケーションに求められるテクノロジーは日々進化していくため、常に最新の情報や技術にもアンテナを張っていくことが必要です。