[レポート] SaaS migration: Inside a real-world multi-tenant transformation #reinvent #SAS306

2022.12.13

いわさです。

YouTube で公開されている AWS re:Invent 2022 Breakout Session の SaaS migration: Inside a real-world multi-tenant transformation SAS306 のセッションレポートです。

セッション概要

SaaS への移行は、一部の組織にとって困難な場合があります。
大量のコードをリファクタリングせずにマルチテナンシーを導入するにはどうすればよいでしょうか?
マルチテナントID、隔離、オンボーディング、請求を既存の環境に導入するにはどうすればよいでしょうか。
このセッションでは、ソリューションの移行に必要な新しいコード、設計、アーキテクチャを見ながら、サンプル移行の詳細を詳しく見ていきます。
その一環として、マルチテナンシーをサポートするために既存のアプリケーションコードとサービスをどのようにリファクタリングするかを検討してください。
目標は、実際の例を参考にして、移行のあらゆる変動部分を深く掘り下げることです。

スピーカー

  • Tod Golding, Principal Partner Solutions Architect, AWS

レベル

300 - Advanced

セッション内容

移行戦略

マルチテナント SaaS として最適化して移行する場合はたくさんの時間が必要になる。
SaaS 化はビジネス形態の移行でもあるので、時間をかけて移行せずにすばやく移行する戦略を取ってカスタマーからのフィードバックをはやく受け取ったほうがいい。
このセッションでは早く移行する際のポイントを解説する。

コントロールプレーンから

サービスをアプリケーションプレーンとコントロールプレーンに分けて考える。
アプリケーションプレーンはサービスの主要な機能が実装されている。
コントロールプレーンではマルチテナントを行うために必要な、テナント管理・ユーザー管理・テナントコンテキスト・オンボーディング・請求・ログやメトリクスなど、SaaS ビジネスに必要なコンポーネントを管理する。

まずはテナントとユーザーの管理から

まずはコントロールプレーンを用意し、テナントとユーザの管理をサービス化する。
DynamoDB でテナントとプランを管理し、Cognito でユーザー管理を行う。
Cognito のカスタムクレームでテナント ID と紐付けを行う。

コントロールプレーンの基礎が用意出来たら、ID プロバイダーをコントロールプレーンに置き換える。
テナントとユーザーの作成と管理をコントロールプレーンに任せ、テナントコンテキストのコントロールもコントロールプレーンに委ねる。
アプリケーションプレーンからは JWT を引き渡し、コントロールプレーンでテナント情報を抽出する。

コントロールプレーンに機能を追加:メトリクス・ログ

コントロールプレーンを経由してテナントコンテキストの処理をオフロードすることで、テナントごとのメトリクスやログを集約出来るようにする。

コントロールプレーンに機能を追加:請求

サードパーティのサブスクリプション請求機能を統合している場合は、コントロールプレーンでテナントごとの請求処理をコントロールする(例:Chargebee, Zuora, Stripe など)
オンボボーディングプロセスで顧客のサブスクリプションを作成し、アプリケーションプレーンからコントロールプレーンへ使用量を伝えることでテナントごとのサブスクリプションに使用量を反映させる。

コントロールプレーンに機能を追加:管理コンソール

管理者用のコンソールを作成し、テナント横断での管理機能を提供・インサイトを取得出来るようにする。

アプリケーションプレーンをモダナイズ

アプリケーションプレーンのマルチテナント化を行う。

サイロ化された状態でマイクロサービスを作る。
コントロールプレーンはそのまま使える。

その後、マイクロサービス化出来たサービスから徐々にプール型に移行していく。

分離性をサポート

テナントスコープを確認し EC2 や Lambda からリソースへアクセスする際に制限する。

データストアはプール型あるいはサイロ型で分離方式を決める。

テナントの Tier で分離性を分ける戦略もある

まとめ

既存の非 SaaS ソリューションをマルチテナント SaaS へ段階的に移行する戦略が紹介されていました。

  • SaaS への移行に時間をかけすぎない。ビジネスモデルが変わるので素早く移行して早期にフィードバックを得る
  • コントロールプレーンから始める
  • 次に、アプリケーションプレーンはマイクロサービス化して徐々に移行する

私は最近 SaaS on AWS 周りの技術を追いかけていて SaaS Lens などに目を通すことが多いです。
SaaS Lens では最適なのはこれ!みたいな感じになっていて、サイロやプールは要件に応じて選択するような形になっています。
現実的には様々な制約から最適化が難しい場合も多いのですが、段階的に移行していく方法と、どういうアプローチがオススメなのか紹介されておりとても興味深いセッションでした。