第1回 Azure Traveler 勉強会 札幌の旅 Azure でのマルチテナント SaaS のはなし
by
iwasa
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Azure でのマルチテナント SaaS のはなし 第1回 Azure Traveler 勉強会 札幌の旅
Slide 2
Slide 2 text
自己紹介 私と Azure と SaaS
Slide 3
Slide 3 text
私と Azure と SaaS いわさ (@Tak1wa) : 江別市 ● クラスメソッド株式会社 ○ 某クラウド(≠ Azure)ソリューションアーキテクト ■ 様々なお客様を技術支援( SaaS のお客様も) ■ Microsoft MVP for Azure (2022.08-) ● 前職まで ○ ソフトウェアエンジニア ■ .NET, Azure ■ Microsoft MVP for .NET (2015.10-2019.06)
Slide 4
Slide 4 text
今日話す SaaS SaaS を使う SaaS を提供する
Slide 5
Slide 5 text
今日話す SaaS SaaS を使う SaaS を提供する
Slide 6
Slide 6 text
はなすこと ● SaaS の悩みを Azure で解決したい ● Azure アーキテクチャセンターの SaaS ガイダンス ○ SaaS の普遍的な問題点と考え方 ○ Azure サービス固有のガイダンス ○ いくつか対応してみた例を紹介 ● まとめ
Slide 7
Slide 7 text
SaaS 提供者の悩み ● SaaS 固有の悩み必ず発生する ○ コスト ○ セキュリティ ○ パフォーマンス
Slide 8
Slide 8 text
SaaS 提供者の悩み ● SaaS 固有の悩み必ず発生する ○ コスト ○ セキュリティ ○ パフォーマンス ● クラウドで課題解決するためのガイドラインがあったりする
Slide 9
Slide 9 text
Azure にも...
Slide 10
Slide 10 text
SaaS ガイダンス in Azure アーキテクチャセンター
Slide 11
Slide 11 text
SaaS ガイダンス https://learn.microsoft.com/ja-jp/azure/architecture/guide/saas/overview
Slide 12
Slide 12 text
SaaS ガイダンス
Slide 13
Slide 13 text
SaaS ガイダンス
Slide 14
Slide 14 text
SaaS の普遍的な問題点と考え方
Slide 15
Slide 15 text
テナントの概念 引用元:マルチテナント ソリューションのテナント モデルより https://learn.microsoft.com/ja-jp/azure/architecture/guide/multitenant/considerations/tenancy-models <<シングルテナントモデル>> <<マルチテナントモデル>>
Slide 16
Slide 16 text
テナントが生み出す複雑性 引用元:オペレーショナル エクセレンスのバリューステートメントより https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/get-started/operational-excellence
Slide 17
Slide 17 text
テナントが生み出す複雑性 引用元:オペレーショナル エクセレンスのバリューステートメントより https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/get-started/operational-excellence テナントが増えるほど インフラコストが...
Slide 18
Slide 18 text
テナントが生み出す複雑性 引用元:オペレーショナル エクセレンスのバリューステートメントより https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/get-started/operational-excellence テナントが増えるほど インフラコストが... 他テナントのデータに ユーザーがアクセスしてしまうかも ...
Slide 19
Slide 19 text
テナントが生み出す複雑性 引用元:オペレーショナル エクセレンスのバリューステートメントより https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/get-started/operational-excellence テナントが増えるほど インフラコストが... 他テナントのデータに ユーザーがアクセスしてしまうかも ... 全テナント環境をバージョンアップ テナント増えたらどうする
Slide 20
Slide 20 text
テナントが生み出す複雑性 引用元:オペレーショナル エクセレンスのバリューステートメントより https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/get-started/operational-excellence テナントが増えるほど インフラコストが... 他テナントのデータに ユーザーがアクセスしてしまうかも ... 全テナント環境をバージョンアップ テナント増えたらどうする 全テナントユーザーのリクエストを処理
Slide 21
Slide 21 text
テナントが生み出す複雑性 引用元:オペレーショナル エクセレンスのバリューステートメントより https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/get-started/operational-excellence テナントが増えるほど インフラコストが... 他テナントのデータに ユーザーがアクセスしてしまうかも ... 全テナント環境をバージョンアップ テナント増えたらどうする 全テナントユーザーのリクエストを処理 特定テナントの影響を他テナントが受ける
Slide 22
Slide 22 text
課題 ● テナント分離性 ○ シングルテナント/マルチテナント ● ノイジーネイバー問題 ● コスト分析と最適化 ● テナントライフサイクル ○ オンボーディング/オフボーディング ○ カスタマイズ
Slide 23
Slide 23 text
課題 ● テナント分離性 ○ シングルテナント/マルチテナント ● ノイジーネイバー問題 ● コスト分析と最適化 ● テナントライフサイクル ○ オンボーディング/オフボーディング ○ カスタマイズ ● SaaS ガイダンスの「アプローチ」で考え方を学ぶことが出来る
Slide 24
Slide 24 text
Azure サービス固有のガイダンス
Slide 25
Slide 25 text
サービス固有のガイダンス Azure Event Hubs の例
Slide 26
Slide 26 text
いくつか対応してみた
Slide 27
Slide 27 text
テナント分離 Azure App Service / Functions パフォーマンス分離のために App Service プランを分けるか? 管理やインフラコスト効果を高くするために単一の共有アプリにするか?間を取って共有プラン? Azure Container Apps テナントごとに Container Apps Enviroment を分けるか?共有か? Azure Kubernetes Service クラスターを共有するか分離するか? 名前空間、RBAC、ネットワークポリシーを使ったテナント分離アプローチはベストプラクティス化している Azure Cache for Redis もし分離するのであればキャッシュインスタンス?データベース? Azure Cosmos DB 分離単位はデータベース?コンテナ?パーティションキー? 共有スループット /専用スループットを組み合わせたハイブリッドパターンもある(クォータ厳しめ) Azure Database for PostgreSQL RLS (Row Level Security) を使ったテナント分離アプローチはベストプラクティス化している Azure SQL Database エラスティックプールを使うか?実は SQL Server でも RLS は使える Azure SQL のドキュメントにもマルチテナント SaaS 専用ページあり https://learn.microsoft.com/ja-jp/azure/azure-sql/database/saas-tenancy-app-design-patterns Azure Storage テナント分離単位はストレージアカウント? BLOBコンテナ?共有する? 階層型名前空間を使ってテナントデータのアクセス許可を行うことも出来る Azure Front Door テナント固有のカスタムドメイン?デプロイスタンプへのルーティング方法は? Azure NAT Gateway テナントごとに異なるアウトバウンド IPアドレスが必要か? Azure Private Link Private Link サービスとロードバランサーはテナント共有か?専用か? Compute Storage / Data Network
Slide 28
Slide 28 text
テナント分離 Azure App Service / Functions パフォーマンス分離のために App Service プランを分けるか? 管理やインフラコスト効果を高くするために単一の共有アプリにするか?間を取って共有プラン? Azure Container Apps テナントごとに Container Apps Enviroment を分けるか?共有か? Azure Kubernetes Service クラスターを共有するか分離するか? 名前空間、RBAC、ネットワークポリシーを使ったテナント分離アプローチはベストプラクティス化している Azure Cache for Redis もし分離するのであればキャッシュインスタンス?データベース? Azure Cosmos DB 分離単位はデータベース?コンテナ?パーティションキー? 共有スループット /専用スループットを組み合わせたハイブリッドパターンもある(クォータ厳しめ) Azure Database for PostgreSQL RLS (Row Level Security) を使ったテナント分離アプローチはベストプラクティス化している Azure SQL Database エラスティックプールを使うか?実は SQL Server でも RLS は使える Azure SQL のドキュメントにもマルチテナント SaaS 専用ページあり https://learn.microsoft.com/ja-jp/azure/azure-sql/database/saas-tenancy-app-design-patterns Azure Storage テナント分離単位はストレージアカウント? BLOBコンテナ?共有する? 階層型名前空間を使ってテナントデータのアクセス許可を行うことも出来る Azure Front Door テナント固有のカスタムドメイン?デプロイスタンプへのルーティング方法は? Azure NAT Gateway テナントごとに異なるアウトバウンド IPアドレスが必要か? Azure Private Link Private Link サービスとロードバランサーはテナント共有か?専用か? Compute Storage / Data Network
Slide 29
Slide 29 text
テナント分離 https://dev.classmethod.jp/articles/azure-cosmos-db-postgresql-rls/
Slide 30
Slide 30 text
テナント分離
Slide 31
Slide 31 text
ノイジーネイバー問題 引用元:うるさい隣人のアンチパターン https://learn.microsoft.com/ja-jp/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor
Slide 32
Slide 32 text
ノイジーネイバー問題 引用元:スロットリングパターン https://learn.microsoft.com/ja-jp/azure/architecture/patterns/throttling
Slide 33
Slide 33 text
ノイジーネイバー問題 https://dev.classmethod.jp/articles/azure-api-management-policy/
Slide 34
Slide 34 text
ノイジーネイバー問題
Slide 35
Slide 35 text
コスト分析と最適化
Slide 36
Slide 36 text
コスト分析と最適化 全体のトランザクション数や システム全体のインフラコストは把握可能
Slide 37
Slide 37 text
コスト分析と最適化 全体のトランザクション数や システム全体のインフラコストは把握可能 テナントごとのトランザクション数や インフラコストは?
Slide 38
Slide 38 text
コスト分析と最適化 テナントコンテキストで改善
Slide 39
Slide 39 text
コスト分析と最適化 https://dev.classmethod.jp/articles/azure-ad-b2c-multi-tenancy-custom-claim/
Slide 40
Slide 40 text
コスト分析と最適化
Slide 41
Slide 41 text
コスト分析と最適化 https://dev.classmethod.jp/articles/azure-saas-tenant-context-application-insights/
Slide 42
Slide 42 text
コスト分析と最適化
Slide 43
Slide 43 text
コスト分析と最適化
Slide 44
Slide 44 text
Azure サービス固有のガイダンス ● ガイダンスには結構詳しく方式など記載されているのでまずは見て使ってみるのが良 さそう ● 他クラウドで流用する際にもサービスの特徴が似ているものも多いので同じガイダンス が使えそうな気もしている
Slide 45
Slide 45 text
まとめ
Slide 46
Slide 46 text
まとめ ● Azure アーキテクチャセンターにまとまってる ○ オンプレの人も、他のパブリッククラウドの人も見よう ○ 勉強にしかならない
Slide 47
Slide 47 text
まとめ ● Azure アーキテクチャセンターにまとまってる ○ オンプレの人も、他のパブリッククラウドの人も見よう ○ 勉強にしかならない ● 今回気がついた点 ○ クラウドサービスの様々な制限事項にぶつかる可能性がかなり高い ○ Azure SaaS ガイドラインにはサービスごとにどういう制限事項があって、何を考えなきゃいけ ないのかしっかり書いてある
Slide 48
Slide 48 text
● Q1: Azure Functions でビジネスロジック実行するときに、テナントコンテキストに従っ てサービスロールを昇格させたい。どうやるのが良い? ○ テナントAのアクセストークン経由で呼び出された Azure Functions はテナントA用のCosmos DB コンテ ナにアクセスのみ可能。みたいな ● Q2: Azure AD B2C から他の IdP に移行した例ある?うまくいった話や苦労話があれ ば聞きたい さいごに: 誰か懇親会とかで教えてください
Slide 49
Slide 49 text
おわり