[SAS401] SaaS 開発者向けのマルチテナントの課題解決に取り組むワークショップに参加してきた #AWSreInvent
はじめに
CX事業本部 Delivery部 の田中孝明です。
SaaS microservices deep dive: Multi-tenancy meets microservices という SaaS 開発者向けのマルチテナントの課題解決に取り組むワークショップに参加してきました。
re:Invent 2022 でも似たようなワークショップ Amazon EKS SaaS: Building a working multi-tenant environment があったのですが今回現地で触ってきたレポートを書きます。
ワークショップについて
SAS401 | SaaS microservices deep dive: Multi-tenancy meets microservices
マイクロサービスは、マルチテナント コンテキストが SaaS 開発者の日常的なコーディング ニーズを満たす SaaS アプリケーションの領域を表します。 SaaS 環境のマイクロサービスは、テナントの分離、テナント コンテキストでのデータへのアクセス、テナント対応メトリクスの記録、課金システムとの統合、他のマルチテナント マイクロサービスとの対話、および多数のサービスのリストに対処する構成を最終的に適用する場所です。 その他の考慮事項。 このワークショップでは、幅広いマルチテナントのユースケースと実装戦略をカバーする現実世界のマイクロサービスを作成します。 SaaS がマイクロサービスの内部動作にどのような影響を与えるかを直接確認してください。 参加するにはラップトップを持参する必要があります。
Amazon EKS でホストされるマルチテナントのマイクロサービスを作成し、ユーザー管理、テナント管理などの構築をしていきます。
以下のサービスが構築されている状態から進めます。認証は Cognito を利用します。
ワークショップ
ベースとなるマイクロサービスをデプロイする
まずは準備されたベースとなるマイクロサービスをデプロイします。ここで Kubernetes サービスアカウントとリソースを確認します。
手順にしたがってデプロイし、動作確認をします。
マルチテナントのマイクロサービスをデプロイする
このワークショップのサンプルアプリでは Kubenrnetes 名前空間で指定されたマイクロサービスを作成し、テナントのリソースごとに個別の名前空間が作成されるようになります。
テナントを分離する
テナントを分離させます。ワークショップでも問われているように、テナント分離はテナント同士が相互にリソースにアクセスできないようにするための対策を実施します。
サイドカーによるテナント分離
サイドカーのトークンベンダー SaaS を利用して、テナントリソースにアクセスする前に資格情報を得るようにします。元々のワークショップのコードではテナント周りのアクセスをハードコードされていることもあったのでこの辺りを修正していきます。
ログを見ると資格のないテナントのアクセスに対してエラーを返しているのが見えます。
サービス間を通信させる
製品マイクロサービス以外に、注文、請求書、発送処理の3つのマイクロサービスを通信させます。
プランごとにアクセスできるパスを構築する
自身の SaaS で仮に3つのプランによって、ユーザーのアクセスできるサービスに違いが出るようにルーティングしていきます。
プレミアムプランのテナントはフルサービスのサポートで、個別のスタックにルーティングされるが、ベースプランとアドバンスドプランのテナントでは図のようにアクセスできるサービスに違いがあります。
Istio サービスメッシュと、ルールベースのルーティング機能の仮想サービスを使用します。
テナントごとにリクエストを適切な宛先に送信されるようになります。
まとめ
準備されているものをやるというワークショップでしたが、テナントごとにアクセスできるリソースの制限や、プランごとにルーティングを変えるやり方など、SaaS を AWS で構築する際にヒントとなるものを触れながら体験できるワークショップでした。2時間のワークショップでしたが、できればもう1時間くらい余裕があったほうが良かったかなと感じました。