Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CDK を活用した 大量 AWS アカウントへのプロビジョニング例 〜 SaaSus ...

AWS CDK を活用した 大量 AWS アカウントへのプロビジョニング例 〜 SaaSus Platform の場合 〜 於 JAWS-UG CDK支部 #17

YAGASAKI Akihiro

October 23, 2024
Tweet

More Decks by YAGASAKI Akihiro

Other Decks in Technology

Transcript

  1. © 2024 Anti-Pattern Inc. All rights reserved. AWS CDK を活⽤した

    ⼤量 AWS アカウントへのプロビジョニング例 〜 SaaSus Platform の場合 〜 2024/10/23 於 JAWS-UG CDK⽀部 #17 ~⼤規模利⽤の神髄︓限界突破の秘訣~ ⽮ヶ崎哲宏
  2. ⾃⼰紹介 2 ⽮ヶ崎 哲宏(Akihiro YAGASAKI) 株式会社アンチパターン 取締役 CTO兼COO 役割︓⽇本のソフトウェアエンジニアを憧れの職業に するためのいろいろ

    経歴︓アマゾン ウェブサービス ジャパン にて SaaSシニアパートナーソリューションアーキテクト Webメディア/SaaSベンダーにて技術責任者ボードメンバー ⼤⼿SIerグループ会社にて情シス責任者 アニメソングのコーラス など 2022, 2023, 2024 Japan AWS Top Engineers (Software) 1975年⽣まれ
  3. © 2024 Anti-Pattern Inc. All rights reserved. 本⽇のお話 本⽇は、弊社のプロダクト SaaSus

    Platform での AWS CDK の活⽤例として そこそこな量の AWS アカウントへどのように適⽤をしていっているかをお話させていただきます • 軽く SaaSus Platform ってどんなものなの︖というご紹介 • 全体のアーキテクチャの概要 • AWS CDK を活⽤している部分の説明 • まとめ
  4. © 2024 Anti-Pattern Inc. All rights reserved. 軽く SaaSus Platform

    ってどんなものなの︖ というご紹介
  5. © 2024 Anti-Pattern Inc. All rights reserved. Control Plane as

    a Service - SaaSus Platform 認証・認可 請求 料⾦プラン コミュニケーション セキュリティ 利⽤量計測 x テナント管理 分析 業務ロジック 業務ナレッジ ベストプラクティス SaaSの直接的な価値を⽣む ここの実装に集中︕ ここはまかせるのじゃ SaaSを作るためのSaaS
  6. © 2024 Anti-Pattern Inc. All rights reserved. SaaSのアーキテクチャ SaaS管理画⾯ テナント管理

    ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン コントロールプレーン (SaaSの管理に必要な機能群) アプリケーションプレーン (SaaSのアプリケーションの機能群) Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB これらが集まって1つのSaaSになる
  7. © 2024 Anti-Pattern Inc. All rights reserved. 特に意識しなくてもSaaSはおのおのの役割は持っている SaaS管理画⾯ テナント管理

    ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB 作り⽅によっては分かれていないこともあるが その役割はどこかで持っている
  8. © 2024 Anti-Pattern Inc. All rights reserved. Control Plane as

    a Service - SaaSus Platform https://saasus.io/
  9. © 2024 Anti-Pattern Inc. All rights reserved. 普通の SaaS 開発例

    お客様 SaaS VPC SaaS利⽤者 SaaS提供者 構築・運⽤ SaaSを利⽤ 認証・認可、テナント管理、 料⾦プラン、請求、 各種管理画⾯など SaaS で必要な要素も 合わせて実装する Amazon ECS Amazon RDS
  10. © 2024 Anti-Pattern Inc. All rights reserved. SaaSus Platformを使った SaaS

    開発例 お客様 SaaS VPC SaaS利⽤者 SaaS提供者 ログイン画⾯など 共通画⾯は SaaSus Platform の機能を利⽤ SaaS本来の部分の利⽤ 管理画⾯など 共通画⾯は SaaSus Platform の機能を利⽤ SaaS本来の部分を作る API Endpoint 認可、請求など 共通機能は API/SDK を利⽤ SDK イベントを通知し リアルタイムに 処理が可能 Amazon ECS Amazon RDS AWS Lambda Amazon EventBridge
  11. © 2024 Anti-Pattern Inc. All rights reserved. Amazon EventBridge 連携

    ここから使える感じに なってます
  12. © 2024 Anti-Pattern Inc. All rights reserved. 導⼊イメージ SaaSの開発において、SaaSで共通的に必要な機能は SaaSus

    Platform側と連携 企業A 企業B 企業C ⾃社SaaS環境 SaaS基本 情報管理 役割管理 ユーザー管理 連携機能 料⾦プラン 管理 請求⾦額 管理 認証機能 ログイン画⾯管 理 SaaSus Platform SDK 運⽤担当者 機能1 機能2 機能3 機能4 事業責任者 エンジニア 1. コア機能は⾃社環境に開発 2. SDKやAPIで連携部分を実装 3. 画⾯から必要な情報は設定 1. 料⾦プランを設定 2. セキュリティレベルを定義 3. 必要な役割を定義 契約企業 管理 1. ユーザーの管理 2. 契約企業の管理 SaaS開発コンソール SaaS運⽤コンソール SaaSログイン画⾯ • Amazon EventBridge連携 • AWS Marketplace連携 • Amazon App Stream2.0連携(予定) • API ⽣成、運⽤ 機能(予定)
  13. © 2024 Anti-Pattern Inc. All rights reserved. SaaSus Platform 使い⽅例

    SDKを利⽤し、最⼩5⾏でマルチテナントに対応した認証・認可が実装可能に。 例︓PHP(Laravel) での Auth 機能利⽤ .env routes/web.php routes/api.php フロントのコード アプリケーション側の実装 SaaSus Platform の管理画⾯ SaaSus Platform 利⽤企業の SaaS ログイン画⾯
  14. © 2024 Anti-Pattern Inc. All rights reserved. SaaS API Gateway

    Function (Coming soon!) It seems like magic! Single tenant SaaS vendors can use this feature to easily implement and provide external APIs. SaaSus Platform generate API definition automatically using GenAI and provides API endpoints and some API gateway functions.
  15. © 2024 Anti-Pattern Inc. All rights reserved. SaaS API Gateway

    Function diagram Customer SaaS VPC SaaS User SaaS Vendor Upload source code that includes SaaSus API annotations SaaSus Auth Module Amazon ECS Amazon RDS AWS PrivateLink Authorizer External API Endpoint Invoker Amazon Bedrock Internal API Endpoint SaaSus Managed Resources API definitions AWS CloudFormation Provision required resources in customer SaaS account automatically by SaaSus Platform SaaS users can use SaaS API via SaaSus Platform SaaSus Consoles Throttling/ Dispatching SaaSus SDK
  16. © 2024 Anti-Pattern Inc. All rights reserved. アーキテクチャの全体イメージ SaaS 提供事業者は、

    ⾃⾝の AWS アカウント にアプリケーションを構築 する。 SaaSus SDK / API を 活⽤して、 SaaS 化に 必要な部分だけ SaaSus Platform を活 ⽤する データストアやテナント固有 のサービスは、各テナント⽤ 専⽤に分離された AWS ア カウントに配置される 例︓テナントの固有の業務 データ、ログイン画⾯のア セット、SESのインスタンスな ど “SaaSus Core” はテナ ント共通の情報、テナン ト管理情報などを持って おり、またコンピューティ ングリソースとして APIを 提供する
  17. © 2024 Anti-Pattern Inc. All rights reserved. Core API AWS

    Account API Endpoint API Containers (Auto Scale) Auth Module Billing Module Pricing Module Marketplace Module EventBridge Module Shared Storage Shared DB Tenant AWS Account for SaaSus Web Console Contents Management AWS Account Identity Provider AWS Control Tower Amazon EventBrdige Tenant DB Tenant Web Contents Tenant AWS Account for Tenant2 Identity Provider Tenant DB Tenant Web Contents Tenant AWS Account for Tenant1 Identity Provider Tenant DB Tenant Web Contents 各テナント⽤に AWS ア カウントを⽤意する Tenant vending には、 Control Tower / StackSets / CDK など を活⽤している Customer SaaS Applications Inside of SaaSus Platform
  18. © 2024 Anti-Pattern Inc. All rights reserved. Core API AWS

    Account API Endpoint API Containers (Auto Scale) Auth Module Billing Module Pricing Module Marketplace Module EventBridge Module Shared Storage Shared DB Tenant AWS Account for SaaSus Web Console Contents Management AWS Account Identity Provider AWS Control Tower Amazon EventBrdige Tenant DB Tenant Web Contents Tenant AWS Account for Tenant2 Identity Provider Tenant DB Tenant Web Contents Tenant AWS Account for Tenant1 Identity Provider Tenant DB Tenant Web Contents 各テナント⽤に AWS ア カウントを⽤意する Tenant vending には、 Control Tower / StackSets / CDK など を活⽤している Customer SaaS Applications Inside of SaaSus Platform ここの量が多い︕
  19. © 2024 Anti-Pattern Inc. All rights reserved. SaaSus Platform の

    AWS アカウント管理 それなりの量の AWS アカウントに CDK を適⽤する 必要があるので、 仕組みが必要
  20. © 2024 Anti-Pattern Inc. All rights reserved. SaaSus Core Account

    Payer(Management) Account Tenant Account テナント情報の DynamoDB テナント固有の DynamoDB Tenant Vending の全体像 ここでCDKが活躍︕ ※BLEA v1ベースで作成 ※BLEA: https://github.com/aws-samples/baseline-environment-on-aws
  21. © 2024 Anti-Pattern Inc. All rights reserved. Tenant Vending 処理の動き

    • 全般 • Pre-vending / Post-vending / CDK-exec の3段階で構成 • 各段階へは、 SNS 経由での SQS からの起動になっている • Post-vending 以降の処理は、べき等にできておりリトライ可能 • SQS からの実⾏は3回まではチャレンジ • 3回失敗したらDLQに⼊って、その後Slackに通知がくる
  22. © 2024 Anti-Pattern Inc. All rights reserved. Tenant Vending 処理の動き

    Pre-vending • 画⾯経由などで SaaSus Platform のテナント作成のトリガーで SNS を発⾏して処理が始まる • Payer Account の IAM Role に Assume Role して、 ServiceCatalog 経由でアカウントを作成 • StackSets では、後続の処理に必要な IAM Role などを作成する • 処理が正常終了したら、後続の処理のために SNS を発⾏
  23. © 2024 Anti-Pattern Inc. All rights reserved. Tenant Vending 処理の動き

    Post-vending • テナント⽤の AWS アカウントが作成された後に実⾏される • Pre-vending で作成した Tenant Account の IAM Role に Assume Role する • StackSets が異常終了する場合があるので、そのときは StackSets の再実⾏をする • Tenant Account の IAM Role に External ID をセット • Tenant Account の DynamoDB に初期マスターデータをセット • 処理が正常終了したら、後続の処理のために SNS を発⾏
  24. © 2024 Anti-Pattern Inc. All rights reserved. Tenant Vending 処理の動き

    CDK-exec • Post-vending の後、もしくはテナント側のインフラを更新するタイミングで実⾏される • Core 側の DynamoDB の情報をもとに、テナント⽤の cdk.json を⽣成する • cdk.json を環境変数として CodeBuild 上で CDK を実⾏する • CodeBuild は Tenant Account の IAM Role に Assume Role して、 CDK を実⾏する
  25. © 2024 Anti-Pattern Inc. All rights reserved. CodeBuild の実⾏イメージ 各

    CodeBuild のビルドにはテナントに応じた cdk.json を配布し実⾏する
  26. © 2024 Anti-Pattern Inc. All rights reserved. スタックのイメージ 各テナントの AWS

    アカウントには、こん な感じで BLEA v1 ベースのスタックができ る
  27. © 2024 Anti-Pattern Inc. All rights reserved. インフラの CI/CD について

    • Dev / Stg / Prod 別々 AWS Organizations が存在 • 各 Organizations に、 Payer / Core / Tenants の AWS アカウントセットがある • Payer / Core の パイプラインと、 Tenants のパイプラインは別物 • インフラのリリースバージョンも、アプリケーションに合わせてセマンティックバージョニングをして、アプリケーションと同期 • ブランチ戦略は、 GitLab Flow(⾵︖) を採⽤ • GitHub Actions を活⽤して、 プルリクエスト作成時に CDK Diff の表⽰、マージ時に⾃動適⽤がされる
  28. © 2024 Anti-Pattern Inc. All rights reserved. インフラの CI/CD について

    • 環境変数、パラメータストアは本当に必要な部分以外なるべく使わない • CI/CD & IaC がある現代、秘匿情報以外はむしろコードに⼊れちゃう⽅が安全 • cdk-nag を全⾯的に採⽤。厳しすぎるところは地道にサプレッションを⼊れて対応 • インフラのデプロイ時にも Feature Flag(LaunchDarkly)を活⽤ • ⼀部のテナントにだけ適⽤したいものなどがある場合、 ⼀部の機能⽤のインフラだけを除外する場合、の判断フラグを管理
  29. © 2024 Anti-Pattern Inc. All rights reserved. 今後検討しているところ / つらいところ

    • AWS アカウントの払い出しを同時に 1 づつしか出来ない • AWS Control Tower では現在 5 つづつ払い出せるようになっているが、その前に作った仕組みな ので対応していない • CDK の適⽤が⼀番時間がかかる部分なので、前もって⼀定数 AWS アカウントを払い出しておい て初期パラメータで CDK 実⾏済みにしておく、という実装は終わっているが、まだリリースできていな い • CDK で破壊的変更がある部分適⽤がつらい • あたりまえだが、マイグレーションにかなりの⼿間がかかる。たとえば、 Cognito のオプション変更など • CodeBuild の同時実⾏数 20 が突破できない • 500 アカウントに CDK のアップデートなどを適⽤しようとすると、⼀晩かかる • 上限緩和したつもりだが、 20 しか動かない(サポートに聞きます) • AWS IAM Identity Center 登録アカウント数(サービス数) 上限 3,000 がどこまで緩和できるの か︖ • AWS Step Functions 使った⽅が良い節もある もっとこうした⽅が良いよ︕っていうことがあれば、ぜひ教えてください︕