はじめに
Flutterを使用したデスクトップアプリケーション(Windows/macOS)のバックエンド環境としてAmplify Gen2を採用する際、マルチテナント構成をどのように実装するべきかについてAWSサポートに問い合わせを行いました。
本記事では、その問い合わせ内容とAWSサポートからいただいた回答を共有し、Amplify Gen2におけるマルチテナント構成の選択肢について考察します。
背景・課題
現在検討している構成は以下の2つの方法です:
1. ブランチベースのテナント分離
- 各テナントごとに専用のブランチを作成
- テナントごとに独立したAWSリソースをデプロイ
- データやリソースが物理的に分離される構成
2. 単一ブランチでのアプリケーションレベル分離
- prodブランチのみでリソースを管理
- アプリケーションレイヤーでテナント分離のロジックを実装
- 論理的な分離によるリソース共有構成
AWSサポートへの問い合わせ内容
以下の内容で問い合わせを行いました:
お世話になっております。
Flutterを使用したデスクトップアプリケーション(Windows/macOS)のバックエンド環境としてAmplify Gen2を採用しております。現在、マルチテナント構成におけるAWSリソースのデプロイ方法について検討しております。
上記の2つの方法を比較検討しておりますが、それぞれのメリット・デメリットや推奨される使用シナリオについてご意見をいただきたいと存じます。
また、マルチテナント構成において、AWSが推奨するベストプラクティスはどちらの方法になりますでしょうか。
どうぞよろしくお願いいたします。
AWSサポートからの回答
重要なポイント
AWSサポートから得られた重要な知見:
- Amplifyについてはマルチテナンシーという観点でのベストプラクティスは公開されていない
- マルチテナンシーにおける構成は状況によって様々であり、一様に「ベストプラクティス」として案内できるものではない
各方法のメリット・デメリット
1. ブランチベースのテナント分離
メリット:
- ブランチベースでリソースを分けることによりテナントの分離が行われシンプルになる
- テナントごとのテストおよびデプロイが容易になる
- 特定のテナントで発生した問題が他のテナントに波及しにくい
デメリット:
- テナント数の増加により管理が煩雑になる可能性がある
- 共通部分の変更を全テナントに反映するコストが高くなる
適用ユースケース:
- 同じサービスを複数の顧客に展開したい場合にはシンプルかつ十分である可能性がある
2. 単一ブランチでのアプリケーションレベル分離
メリット:
- テナント数の増加による管理コストの増加は抑えられる可能性がある
- 共通部分の変更の反映コストは容易になる可能性がある
- テナントごとのカスタマイズがあった場合もコードベースの管理は一元化される
デメリット:
- テナントの分離については独自に実装が必要
- 特定のテナントで発生した問題が他のテナントに波及する可能性がある
- テナントごとのテストおよびデプロイは困難である可能性がある
適用ユースケース:
- いわゆるSaaSのようなサービスを提供する場合など詳細なテナント分離を行いたい場合には適している可能性がある
重要な補足
AWSサポートからは以下の重要な補足もありました:
Amplify自体にマルチテナント構成を実現する機能があるわけではない。上記のような「ブランチベースのテナント分離」か「単一ブランチでのアプリケーションレベル分離」の二者択一ではなく、実際にマルチテナント構成を構築するに当たってはどの部分を共通にするのか、分離するのかなどをお客様の目的に合わせて考慮していくこととなる場合もある。
参考資料
AWSサポートから提示された参考資料:
- SaaS on AWS を成功に導くためのポイントとは ? 第 1 回
- AWS におけるマルチテナント SaaS の実装パターン ~ サーバーレス編
- マルチテナント SaaS アプリケーションの認証を Amazon Cognito で実現してみよう !
まとめ
今回のAWSサポートへの問い合わせから得られた重要な知見:
1. 万能なベストプラクティスは存在しない
- Amplify Gen2でのマルチテナント構成には決定的なベストプラクティスが存在しない
- 要件や状況に応じて適切な方法を選択する必要がある
2. 選択の指針
- ブランチベース:シンプルさと分離を重視する場合(顧客ごとのデプロイなど)
- アプリケーションレベル:スケーラビリティと管理効率を重視する場合(SaaS型サービスなど)
3. ハイブリッドアプローチの可能性
- 二者択一ではなく、部分的に組み合わせることも検討すべき
- 共通化する部分と分離する部分を要件に応じて決定
マルチテナント構成は複雑な課題ですが、要件を明確にして段階的に検討していくことが重要だと感じました。
おわりに
同様の課題に取り組んでいる方の参考になれば幸いです。もし追加の知見や経験がありましたら、コメントでシェアしていただけると嬉しいです。
本記事は2025年8月時点でのAWSサポートからの回答に基づいています。