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

おわり