AIクリエーターの道 ニュース:マルチクラウド開発は複雑だが、計画と準備があれば、より堅牢なコードが書ける! 失敗を前提に構築を。 #マルチクラウド #Kubernetes #開発
動画で解説
マルチクラウド開発、ちょっと待った!始める前に知っておくべきこと
最近よく耳にする「マルチクラウド」。なんだかかっこいい響きですよね!でも、複数のクラウドを使うって、本当にいいことばかりなのでしょうか?実は、ちょっとした落とし穴もあるんです。今回は、マルチクラウド開発を始める前に知っておくべきポイントを、どこよりも分かりやすく解説します!
マルチクラウドって何?
まず、マルチクラウドとは何か、簡単に説明しますね。例えば、お店を経営しているとしましょう。材料を仕入れるのに、八百屋さん、魚屋さん、お肉屋さん…と、色んなお店を利用しますよね。マルチクラウドも同じで、複数のクラウドサービス(AWS、Azure、GCPなど、それぞれ得意分野があるんです!)を組み合わせて使うことを指します。
一つのクラウドだけを使うよりも、それぞれのクラウドのいいとこ取りができるのが魅力。例えば、データの保管は安いクラウド、AIの機能は高性能なクラウド、というように使い分けることで、コストを抑えたり、より高度なシステムを構築したりできるんです。
計画なしに始めると…大変なことに!?
ただし、注意が必要です!複数のクラウドを闇雲に使うと、かえってコストが高くなったり、セキュリティが甘くなったり、プロジェクトが失敗に終わったりする可能性もあるんです。「あれ?いいことばかりじゃないの?」って思いますよね。そうなんです、事前の計画がとっても大切なんです!
Pluralsight社のクラウド戦略責任者であるドリュー・ファーメント氏は、「マルチクラウドは開発だけの問題ではない」と言っています。戦略的な問題であり、開発チームがいつ、どこで、なぜ特定のクラウド機能を使用するのかを明確にする、クラウド運用モデルが必要なのです。
マルチクラウドで失敗しないための3つの鉄則
- 目的を明確にする:なぜマルチクラウドにするのか?どんなメリットを得たいのか?
- 役割分担を明確にする:誰が何を担当するのか?責任の所在を明らかにする。
- コミュニケーションを密にする:開発、運用、セキュリティなど、関係者全員でよく話し合う。
特にコミュニケーションは重要!Revenue Opsの創業者兼CEOであるヘザー・デイビス・ラム氏は、「問題は、コードの悪さではなく、コミュニケーション不足から生じることが多い」と指摘しています。定期的なチェックインと率直な対話が、成功への鍵となるんですね。
クラウドごとの「得意技」を活かそう!
すべてのコードをクラウド間で完全に移植可能にしようとするのは、理想的ではありますが、現実的ではありません。クラウドには、それぞれ得意なこと、不得意なことがあります。例えば、AWS(Amazon Web Services)は、大規模なデータ処理が得意だったり、Azure(Microsoft Azure)は、Windowsとの連携が強かったりするんです。
Payara Servicesのシニアソフトウェアエンジニアであるパトリック・デュディッツ氏は、「クラウド機能の『最低共通分母』にアーキテクチャを制限しようとするのはよくある間違い。それぞれのクラウドの強みを活用する方が、実際にはより成功しやすい」と言います。各クラウドの特性を理解し、それぞれの得意分野を活かすようにシステムを設計することが重要です。
例えば、認証やコンピューティングの基盤部分は共通化しつつ、AWSのS3(ストレージサービス)とAthena(データ分析サービス)を使って、大量のデータに対するクエリのコストとパフォーマンスを最適化する、といった使い分けが考えられます。
共通部分と個別部分を切り分ける
ビジネスロジック(アプリケーションの処理内容)は、PythonやNode.jsなどの共通言語で記述し、移植性を高めるのがおすすめです。一方、インフラ(サーバーやネットワークなど)やオーケストレーション(複数のシステムを連携させること)は、特定のクラウドの得意な機能を使うと良いでしょう。
Kubernetes(コンテナオーケストレーションツール)を活用しよう!
複数のクラウドにまたがってアプリケーションを動かすために、ほぼ全員が名前を挙げたのが、Kubernetes(クーバネティス、通称K8s)。これは、コンテナ化されたアプリケーション(Dockerコンテナなど)のデプロイ、スケーリング、管理を自動化するためのツールです。
AnsysのリードDevOpsエンジニアであるラダクリシュナン・クリシュナ・クリパ氏は、「KubernetesとDockerコンテナを使用して、デプロイメントを標準化することで、コードを一度書けば、AKS(Azure Kubernetes Service)、AWS EKS(Amazon Elastic Kubernetes Service)、さらにはオンプレミスのクラスターでも、最小限の変更で実行できる」と言います。
Kubernetesを使うことで、クラウドの違いを意識せずに、同じようにアプリケーションを動かすことができるようになるんですね!
開発を楽にするためのツールたち
専門家がおすすめするツールも紹介されています。例えば、以下のようなものがあります。
- Splunk、Datadog:複数のクラウドにまたがるログの一元管理・監視
- Pulumi:Infrastructure as Code(IaC、コードでインフラを管理する)ツール
- GitHub Actions、Terraform Cloud:クラウドに依存しないCI/CD(継続的インテグレーション/継続的デリバリー)パイプラインの構築
これらのツールを使うことで、マルチクラウド環境の複雑さを軽減し、開発効率を向上させることができます。
マルチクラウドは「複雑さとの戦い」
マルチクラウド環境は複雑になりがちです。だからこそ、可視化(見える化)が非常に重要になります。ログやアラートを一元化し、全体を把握できるようにしましょう。
Aidoraの共同創業者兼CTOであるアナント・アガルワル氏は、「すべてのログを統合された可観測性プラットフォーム(Datadog)にルーティングし、統合されたビューを作成する。新しいツールでは完璧なカバレッジは難しいが、一元化することでインシデントを迅速にトリアージし、クラウドプロバイダー全体での可視性を維持できる」と言います。
失敗を前提に考える
複数のクラウドやサービスを組み合わせるほど、どこかで何かが壊れる可能性が高まります。APIのタイムアウト、認証トークンの期限切れ、レイテンシ(遅延)の急増など、さまざまな問題が発生する可能性があります。
Revenue Opsのデイビス・ラム氏は、「APIのタイムアウトや認証トークンの期限切れ、レイテンシの急増など、そうした種類の障害を予期し、まれな出来事として扱うのではなく、実際に再試行すべきものと、失敗して誰かに警告を発するべきものを考える。すべての失敗が自動的に再試行ループやフォールバック(代替手段)をトリガーすべきではない。プロセスを停止させて、誰かの注意を引く方が良い場合もある」と述べています。
つまり、「いつか壊れる」と思ってシステムを設計することが大切なんです。これは悲観的な考え方ではなく、現実的な考え方なんですね。
まとめ
マルチクラウドは、うまく活用すれば大きなメリットをもたらしますが、計画なしに始めると失敗する可能性もあります。目的を明確にし、役割分担を決め、コミュニケーションを密にすることで、マルチクラウドの恩恵を最大限に引き出すことができるでしょう。
この記事を読んで、「よし、うちの会社でもマルチクラウドを導入してみよう!」と思った方は、ぜひ今回の内容を参考に、慎重に計画を進めてみてくださいね!
個人的には、マルチクラウドは企業の規模やニーズによって向き不向きがあると思っています。まずは小さく始めて、効果を検証しながら徐々に拡大していくのが良いのではないでしょうか。常に新しい技術が登場するので、アンテナを高く張っておくことも重要ですね!
この記事は、以下の元記事をもとに筆者の視点でまとめたものです:
Multicloud developer lessons from the trenches