(Translated by https://www.hiragana.jp/)
クラウドロックインされないアーキテクチャ「Cloud Agnostic Architecture」のすすめ | フューチャー技術ブログ
フューチャー技術ぎじゅつブログ

クラウドロックインされないアーキテクチャ「Cloud Agnostic Architecture」のすすめ

この記事きじQiitaのアドベントカレンダー記事きじのリバイバル公開こうかいです。
当時とうじ記事きじから、一部いちぶ表現ひょうげん見直みなお加筆かひつしています。

はじめに

先日せんじつガートナーのレポートで「おおくの企業きぎょうにおいて、特定とくていのクラウドベンダーにシステムを集中しゅうちゅうさせるリスクの重要じゅうよう上昇じょうしょうしている」との発表はっぴょうがありました。

https://www.gartner.com/en/newsroom/press-releases/2023-10-30-gartner-says-cloud-concentration-now-a-significant-emerging-risk-for-many-organizations

日本にっぽんにおいてクラウドの活用かつようはますますすすんでいる一方いっぽうで、特定とくていの Cloud Service Provider(CSP)にロックインされるリスクについては、つね議論ぎろん余地よちがあるとかんがえています。
ほん記事きじでは、特定とくていのクラウドにつよ依存いぞんしないアーキテクチャについて「Cloud Agnostic Architecture」という言葉ことばもちいて整理せいりしていきます。

Cloud Agnostic Architecture とは

Cloud Agnostic1 Architectureとは「特定とくていのクラウドに依存いぞんしないアーキテクチャ」を意味いみします。これはクラウドプラットフォーム自体じたい利用りようしないという意味いみではなく、複数ふくすうのクラウドプラットフォームあいだ(ないしはオンプレミスとクラウドのハイブリッドモデルあいだ)で、アプリケーション、ツール、サービスをふくむワークロードをシームレスに移植いしょくできるように設計せっけいすることを意味いみしています。

このアーキテクチャにはつぎのようなメリットがあります。

  • クラウドロックイン2回避かいひ
    なにかしらの事情じじょうによりこん利用りようしているクラウドプラットフォームからのクラウドプラットフォームへ移行いこうしなければならない(もしくは移行いこうすることでコストめんなどの恩恵おんけいけられる)状況じょうきょう発生はっせいした場合ばあいに、コストや時間じかんをかけずに移行いこうすることが可能かのうとなります。

  • より広範こうはんなロケーションへのシステム展開てんかい
    複数ふくすうのクラウドプラットフォームを利用りようすることでよりおおくのロケーション(リージョン)にシステムを展開てんかいできるだけではなく、かくロケーションにてきしたクラウドプラットフォームを選択せんたくできるようになります。
    これはたとえば、グローバルにシステムを展開てんかいするようなケースおいて、通常つうじょうは AWS を利用りようするが、中国ちゅうごくにおけるシステム展開てんかいにおいては、中国ちゅうごくの CSP(Alibaba CloudやTencent Cloud)を利用りようすることで、ほう制度せいどてきなリスクを最小さいしょうするといったことがかんがえられます。

  • マルチクラウド構成こうせい容易ようい実現じつげん
    DR 対策たいさくとして複数ふくすうのクラウドプラットフォームじょうにシステムを展開てんかいしておくなど、冗長じょうちょうデプロイが必要ひつようなマルチクラウド構成こうせいをとることが容易よういになります。

Cloud Agnostic Architecture を実現じつげんするためのアプローチ

このしょうでは Cloud Agnostic Architecture を実現じつげんするためのいくつかのアプローチを紹介しょうかいします。

OSS技術ぎじゅつ採用さいよう

CSPプロプライエタリなマネージドサービスを利用りようするのではなく、マネージドなオープンソースサービス(ないしはOSS互換ごかんせいのあるサービス)を利用りようや、しん必要ひつよう場合ばあいはOSSのセルフホスティングをおこないます。

AWS をれいに OSS / OSS互換ごかんのサービスとプロプライエタリなサービスのいちれいをみてみると、選択肢せんたくしがいくつかあることがわかるでしょう。

image.png

主要しゅような OSS / OSS互換ごかんのサービスは、基本きほんてきにそれ自体じたい業界ぎょうかい標準ひょうじゅんてき技術ぎじゅつ仕様しよう準拠じゅんきょするかたち設計せっけいされており、メジャーなものはおおくのクラウドプラットフォームにてマネージドサービスとして提供ていきょうされているため(もしくは提供ていきょうされていない場合ばあいでも、IaaSとしてのコンピューティングサービスじょうにホスティングすることで、クラウドプラットフォームに依存いぞんせず利用りようできるため)、積極せっきょくてき利用りようすることでクラウドの移植いしょくせいたかめることができます。

コンテナ技術ぎじゅつ採用さいよう

Dockerに代表だいひょうされるコンテナがた仮想かそう技術ぎじゅつによりホスト環境かんきょうとアプリケーション環境かんきょう分離ぶんりすることで、アプリケーションのポータビリティが向上こうじょうし、べつのクラウドプラットフォームにアプリケーションを移行いこうしやすくなります。

独立どくりつせいのある DevOps の実践じっせん

特定とくていのクラウドに依存いぞんしない DepOps のツールやサービスを活用かつようし、ワークフローを自動じどうすることで、べつのクラウドプラットフォームへのスイッチングコストをひくくできます。具体ぐたいてきにどのようなものなのか、いくつかれい紹介しょうかいしましょう。

Infrastructure as Code

CSP プロプライエタリなサービス(れい. AWSであればAmazon CloudFormation
AWS CDK, GCPであればCloud Deployment Manager)ではなく、 TerraformCrossplane代表だいひょうされる複数ふくすうのクラウドに対応たいおうしたOSSのツールを活用かつようすることで、特定とくていのクラウドに依存いぞんしない IaC を実現じつげんできます。

Observability

観測かんそくせい(Observability)を実現じつげんするためのツールやサービスは数多かずおおくありますが、複数ふくすうのクラウドに対応たいおうしたものを採用さいようし、一元いちげんてきなモニタリングをおこなうことで、特定とくていのクラウドに依存いぞんしない独立どくりつせいたかい Observability 基盤きばん実現じつげんできます。

CNCFのCloud Native Landscapeをてみても様々さまざまなツールやサービスがありますが、OSSを活用かつようするいちれいとしては、データ可視かしGrafana、メトリクス監視かんしPrometeus、ログ監視かんしGrafana Loki、トレース監視かんしGrafana Tempo採用さいようする(あるいはこれらをマネージドサービスとして提供ていきょうするGrafana Cloud利用りようする)といったかたちかんがえられます。

あるいは New RelicDataDog といったSaaSを利用りようすることも有効ゆうこうです。もちろんこれらのサービスはマルチクラウドに対応たいおうしています。

1てん補足ほそくをしておくと、CSPプロプライエタリなモニタリングサービスでしか直接ちょくせつメトリクスを取得しゅとくできないものがある(れい. Amazon Aurora や AWS Lambda のメトリクスは Amazon CloudWatchでしか取得しゅとくできない)ため、CSPプロプライエタリなモニタリングツール(れい. AWS であればAmazon CloudWatch)を完全かんぜん利用りようしないというケースはあまりかんがえられません。Amazon CloudWatch が提供ていきょうするデータを Prometheus に連携れんけいするといったように、独立どくりつしたObservability 基盤きばん一元化いちげんかしていくアプローチになります。

CI/CD

CI/CDについても同様どうよう、CSPプロプライエタリなサービスではなく、特定とくていのクラウドに依存いぞんしないツールやサービスを活用かつようしてパイプラインを構築こうちくすることで、クラウドプラットフォームの移植いしょくせいたかくなります。
この領域りょういきにおいては、すでに GitHub Actions や Circle CI といった特定とくていのクラウドに依存いぞんしないツールやサービスがひろ使つかわれており、AWSのCode Family3のようなCSPプロプライエタリなサービスが活用かつようされるケースよりも主流しゅりゅうになっています。

適切てきせつ抽象ちゅうしょう

アプリケーションのレイヤにおいて、適切てきせつ抽象ちゅうしょうされたインタフェースをもちいてCSPの提供ていきょうするサービスとやりとりをおこなうことで、コアとなるビジネスロジックが特定とくていのCSPに依存いぞんしないうと結合けつごうなつくりが実現じつげんできます。これにより、べつのクラウドプラットフォームのサービスにえをおこなう(れい. Amazon S3ではなくGCSを使用しようする)場合ばあいでも、既存きそんのソースコードへの影響えいきょう最小限さいしょうげんおさえることが可能かのうとなります。
クリーンアーキテクチャやリポジトリパターンなどを実践じっせんして自身じしんでインタフェースを定義ていぎするのもいですし、GoCDKApache jclouds のようなかくクラウドサービスやOSSプロダクトへの透過とうかてきなインタフェースを提供ていきょうするライブラリを活用かつようする方法ほうほうもあります。

トレードオフを理解りかいする

Cloud Agnostic Architecture はそれ自体じたいぎん弾丸だんがんではないため、トレードオフを理解りかいしたうえ採用さいようすることが重要じゅうようとなります。
先述せんじゅつしたように Cloud Agnostic Architecture を採用さいようすることで、クラウドの移植いしょくせい向上こうじょうします。一方いっぽうで、クラウド依存いぞん目指めざすということは、同時どうじに「クラウドのネイティブ機能きのう最大限さいだいげん活用かつようしない」という判断はんだんを(おおかれすくなかれ)していることでもあり、つねにクラウドプラットフォームあいだ差異さい抽象ちゅうしょうすることを意識いしきする必要ひつようがあります。そのため、ときには複雑ふくざつせいし、プロダクトを市場いちば投入とうにゅうするまでの時間じかんおおきくなる可能かのうせいもあります。

CSPプロプライエタリなサービスのメリットの1つとして「サービスあいだのシームレスな連携れんけい」がげられますが、ここでは具体ぐたいてきれいとして、オブジェクトストレージへの操作そうさをトリガーとして、非同期ひどうき処理しょり実行じっこうするケースをかんがえてみましょう。

AWSネイティブなサービス/機能きのう採用さいようする場合ばあい、S3 のイベント通知つうち利用りようして、Lambda 関数かんすう実行じっこうするアーキテクチャがかんがえられます。
S3のイベント通知つうちAt Least Once の到達とうたつ保証ほしょうされてますが、イベントはS3内部ないぶでコントロールされるため、オブジェクト操作そうさがわ処理しょりでイベントの作成さくせい意識いしきすることはありません。また、非同期ひどうきされる処理しょりについても、Lambdaの機能きのうとして起動きどうトリガーやリトライ回数かいすう、DLQの送信そうしんさきなどの設定せっていができるため、開発かいはつしゃはコアとなる処理しょりのみに集中しゅうちゅうできます。
このようにアプリケーションコードを必要ひつよう最小限さいしょうげんたもちながら簡単かんたん連携れんけい実現じつげんできるてんが、このアーキテクチャの1つのメリットだとえます。

image.png

一方いっぽうで、このワークロードをべつのクラウドプラットフォームに移植いしょくしようとした場合ばあい、それは簡単かんたんでしょうか。オブジェクトストレージのイベントをトリガーとして処理しょり実行じっこうする機構きこう移行いこう対象たいしょうのクラウドプラットフォームにそなわっているのでしょうか。そなわっていたとして管理かんり対象たいしょうとなっているイベントは充足じゅうそくしている4のでしょうか。
さらにえば、非同期ひどうきされる処理しょりにおいては、すくなくともイベントをハンドリングする部分ぶぶん処理しょりはクラウド依存いぞんしているため、ソースコードの修正しゅうせい/追加ついか必要ひつようとなります。
このようにクラウドの移植いしょく困難こんなんしょうる、そのための変更へんこう時間じかんがかかるというのがこのアーキテクチャのデメリットでもあります。

つぎにこれを Cloud Agnostic Architecture で実現じつげんするれいてみます。
AWSネイティブなS3のイベント機構きこう利用りようせず、わりにマネージド Kafka を使用しようしてイベントメッセージの管理かんりおこないます。またコンピューティンレイヤも コンテナベースのアーキテクチャを採用さいようします。

image.png

これによりAWSプロプライエタリなサービスに依存いぞんする部分ぶぶんちいさくなり、わりにクラウドの移植いしょくせいたかまります。
ただし、このようなアーキテクチャを採用さいようすることで、イベントメッセージの到達とうたつ保証ほしょうやエラーのハンドリングなど、CSPにまかせていた部分ぶぶん自分じぶん自身じしん設計せっけい実装じっそうする必要ひつようがでてくるかもしれません。また、S3イベント通知つうち同等どうとう可用性かようせい性能せいのう担保たんぽするためには、ときには追加ついかのコストが必要ひつようになるかもしれません。

このようにそれぞれのアーキテクチャは一長一短いっちょういったんであり、トレードオフを理解りかいすることが重要じゅうようです。

クラウド依存いぞんする or 依存いぞんしないの2ではない

ロックイン自体じたいが「ロックインする or しない」の2かたられるものではないのと同様どうよう、Cloud Agnostic Architecture は 特定とくていのクラウドに「依存いぞんする or 依存いぞんしない」の2ではなく「どの程度ていどクラウドあいだ移植いしょくせいたかめるか」の度合どあいで、評価ひょうかされるべきものです。

たとえば、コストめん観点かんてんからAWS Lambda を採用さいようするが、イベントをハンドリングする部分ぶぶんはコアロジックと分離ぶんりうと結合けつごうつくりにする、イベントソースは原則げんそく API Gateway に限定げんていする、などの方針ほうしんつことで、無尽蔵むじんぞう依存いぞんたかまらないようにするなどといったように、トレードオフの世界せかい最適さいてきかいつけることになります。
主要しゅようなコンピューティングやデータベースの領域りょういきつよ移植いしょくせい意識いしきし、運用うんよう管理かんりけい機能きのう最大限さいだいげんクラウドネイティブの恩恵おんけい享受きょうじゅする、という戦略せんりゃく有効ゆうこうでしょう。

なに最適さいてきかというのは、対象たいしょうとなるシステムがかれている状況じょうきょうおうじてさまざまです。
たとえば、市場いちばまでの投入とうにゅう時間じかん重要じゅうよう要件ようけんであるスタートアップにおいては、クラウドの移植いしょくせい犠牲ぎせいにしてでも、CSPプロプライエタリなサービスを積極せっきょくてき利用りようするほういかもしれません。ぎゃく特定とくていのCSPに依存いぞんすることがおおきなリスクとなりるクリティカルなシステムや、グローバル展開てんかいともないマルチクラウド対応たいおう前提ぜんていとなるシステムにおいては、クラウドの移植いしょくせい重要じゅうよう要件ようけんになることでしょう。

このように唯一ゆいいつ正解せいかいはありませんが、1つだけ正解せいかいえる選択せんたく存在そんざいします。
それは、ロックインのリスクを適切てきせつ評価ひょうかせず、システム全体ぜんたいとしてのポリシーをろくにさだめないまま、個別こべつ最適さいてき追求ついきゅうしてCSPプロプライエタリなサービスを無闇むやみやたらに採用さいようすることです。

適切てきせつにリスクアセスメントをおこなったうえで、指針ししんさだめることが重要じゅうようとなります。

ロックインは完全かんぜん回避かいひできない

最後さいごに Cloud Agnostic Architecture を採用さいようしたからといっても、システムにおけるロックインは完全かんぜん回避かいひできるものではないてん補足ほそくしておきます。
システムにおけるロックインは、ほん記事きじげた CSP ロックインだけでなく、プロダクトロックインやバージョンロックイン、スキルロックインなどさまざまな次元じげん分類ぶんるい5できます。

たとえば、CSP ロックインを回避かいひするために、OSS互換ごかんのサービスを積極せっきょくてき採用さいようしたとしてもプロダクトロックインを回避かいひできているわけではありません。
RDB の世界せかいでは ANSI SQL 標準ひょうじゅん準拠じゅんきょすることで、DBプロダクトの移植いしょくせいたかめるといった工夫くふうかんがえられますが、かくロックインの次元じげんにおいて、ロックインされることによるリスクを適切てきせつ評価ひょうかしたうえで、どこまで対応たいおうするかの判断はんだんおこなうことがもとめられます。

参考さんこう資料しりょう


  1. 1.Agnosticとは直訳ちょくやくすると「不可知論ふかちろんしゃ」ですが “単語たんご + agnostic” で「~(単語たんご)に依存いぞんしない」という意味いみになります。
  2. 2.クラウドロックインとは特定とくていのクラウドプラットフォームに過度かど依存いぞんすることで、べつのクラウドプラットフォームへの移行いこう困難こんなんになってしまう(=スイッチングコストがたかい)状態じょうたいのことをします。
  3. 3.Code Family とは AWS CodeCommit, AWS CodeArtifact, AWS CodeBuild, AWS CodeDeploy, AWS CodePipelineをします。
  4. 4.たとえば AWS S3Google Cloud Storage両方りょうほうともイベントトリガーの機構きこうちますが、イベントタイプには差異さいがあります。
  5. 5.Don't get locked up into avoiding lock-in ではロックインは合計ごうけい8つの次元じげん分類ぶんるいされています。