Cloud9を使ってSaaS Boostのサンプルアプリケーションからテナントを作成してみた

2022.02.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

AWS SaaS Boostをご存知でしょうか。
SaaS Boostをうまく活用出来ると、既存アプリケーションを迅速にマルチテナントなSaaSアプリケーションに移行することが出来ます。

マルチテナントを検討している方でSaaS Boostが気になってる方は多いかもしれません。
ただし、ドキュメントを少し読んで、デプロイ環境やコンテナアプリケーションを用意する点に敷居が高く感じる方もいらっしゃるかもしれません。

実は、SaaS BoostはCloud9だけで基盤からサンプルアプリケーションのデプロイまで完結させることが出来るます。
なので、まずSaaS Boostをサンプルで触ってみたいという方はCloud9から始めることで手順どおり実施するだけで開始することが出来ます。

デプロイからテナント作成までの流れ

  • Cloud9環境を作成
  • Cloud9上でデプロイに必要な前提ツールをセットアップし、SaaS Boostをデプロイ
  • Cloud9上でサンプルアプリケーションのコンテナイメージを作成
  • SaaS Boostのオンボーディング機能からテナントをプロビジョニング

Cloud9

Cloud9環境は特別な手順は不要で、マネジメントコンソールから環境を新規作成するだけです。

前提ツールのセットアップとデプロイ

以下が公式のセットアップ手順です。

必要な前提モジュールが多いです。

  • Java 11 Amazon Corretto 11
  • Apache Maven (see Installation Instructions)
  • AWS Command Line Interface version 2
  • Git
  • Node 14.15 (LTS)
  • Yarn

しかし、Maven以外はCloud9にだいたいデフォルトで揃ってます。
以下はCloud9を使った場合のセットアップ手順です。
EC2やコンテナ環境でデプロイしようとしたときは前提モジュールやバージョンなど色々苦労したのですが、Cloud9であればこのとおり実行すれば完了します。

aws-saas-boost/install_using_cloud9.md at main · awslabs/aws-saas-boost

一点注意点なのですが、SaaS Boostのインストールスクリプトの中でCloudFormationを使ってSaaS Boost基盤環境がデプロイされていきます。
このデプロイのために、管理者権限が必要とされています。
そして、Cloud9では環境を利用しているユーザー/ロールのIAM権限が適用されるので、利用者が管理者権限を持っているかを確認してください。

インストールスクリプトを実行後に対話形式で情報を入力します。
Environmentという概念でSaaS Boostの複数の基盤を用意することが出来ます。(devやprd、あるいは全く関係のない別の環境)

今回はSaaS Boostの分析機能は使いませんでした。
こちらを有効化すると、RedshiftとQuickSightもデプロイされ、分析ダッシュボード機能が提供されます。
別途紹介したいですが、SaaS Boost自体も利用料やメトリクスなど、統合された分析機能はあるので、まずはデフォルトの分析機能で足りているか確認してみると良いでしょう。

CloudFormation Stack: sb-iwasa completed successfully.
Build website and upload to S3
Start build of AWS SaaS Boost React web application with yarn...
Completed build of AWS SaaS Boost React web application.
Synchronizing AWS SaaS Boost web application files to s3 web bucket
Uploading 653 files to S3
Check the admin email box for the temporary password.
AWS SaaS Boost Artifacts Bucket: sb-iwasa-artifacts-13d10a74-6f10
AWS SaaS Boost Console URL is: https://d1ns8t83wpmjhf.cloudfront.net

セットアップ中に、入力したメールアドレスに招待メールが届きます。
SaaS Boost基盤は認証にCognitoを使っています。

Welcome to AWS SaaS Boost!

You can login to your AWS SaaS Boost environment at https://d1ns8t83wpmjhf.cloudfront.net.
Your username is: admin
Your temporary password is: G35R1K3c

デプロイ環境後にアクセスすると、SaaS Boostへアクセスすることが出来るようになります。

SaaS Boost環境は大量のCloudFormationスタックで構成されています。
このあたりの構成は次回以降に整理しておきたいと思います。

サンプルアプリケーションを構成

SaaS Boostではテナント間でリソースを共有しない、「サイロ型」というマルチテナント戦略を取ります。
仕組みとしては、事前にSaaS Boost上で、「テナントごとにどういうインフラ構成のアプリケーションを展開するのか」を定義します。

アプリケーション構成の設定と先程デプロイされたECRにベースアプリケーションの展開を行いますが、SaaS Boostのチュートリアルでは確認用のサンプルアプリケーションが提供されているので本日はこちらを利用します。
それに伴って以下を参考にアプリケーション構成を設定しましょう。

Step 7 - (Optional) Deploy the Sample Application

データベースは初期化のスクリプトを設定することも出来ます。
ここでは何も設定しません。中身見てないですが、サンプルアプリケーション側でオートマイグレーションしてくれるのでしょう(きっと)

次に、サンプルコンテナイメージをビルドする必要がありますが、用意されているサンプルスクリプトを実行するとビルドからレジストリへのプッシュまで自動で行ってくれます。
そしてCloud9ではすでにDockerコマンドが利用可能です。

hoge:~/environment/aws-saas-boost/samples/java (main) $ cd aws-saas-boost/samples/java/
hoge:~/environment/aws-saas-boost/samples/java (main) $ sh build.sh 

...

[INFO] Layout: WAR
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:10 min
[INFO] Finished at: 2022-02-19T10:44:58Z
[INFO] Final Memory: 28M/94M
[INFO] ------------------------------------------------------------------------
Sending build context to Docker daemon  90.73MB
Step 1/10 : FROM amazoncorretto:11-alpine AS build

ちなみに、このサンプルアプリケーションは、PostgreSQL、MySQL/MariaDB、SQLServerと互換性があるように作成されています。
SaaS Boostがテナントをデプロイする際にデータベースへの接続情報を環境変数へ設定します。

テナントをプロビジョニング

あとはテナントのオンボーディングを実行すればテナントがプロビジョニングされます。

テナントのプロビジョニングも、中身はCloudFormationでのデプロイです。
本日時点でECSバックエンドは、Linuxの場合はFargateで、Windowsの場合はEC2です。

先程アプリケーション構成でストレージとデータベースを有効化していたので、RDSスタックとEFSスタックが作成されています。
なお、スタック構成は追加のカスタマイズも可能です。この機能はちょっとアツそうなので検証して紹介したいですね。

ちょっと待ってるとテナントのデプロイが完了しました。

テナントの詳細情報にLoad Balancer DNSが表示されるので本日はここからアクセスします。
実際の運用ではRoute53を構成し、テナントごとのサブドメインを作成する形になります。

テナントのアプリケーションへアクセス出来ました。
Productsメニューなどからデータベースへのレコード作成も出来ます。

さいごに

本日はSaaS Boostのサンプルアプリケーションの展開までを行いました。
ここまで一式触ってみると、SaaS Boostのアウトラインというか流れみたいなのは理解出来るんじゃないかなと思いますので、SaaS Boostの導入を検討するかもという方はまずはサンプルアプリケーションやCloud9を使ってパッと始めてみてください。

テナントや基盤のデプロイで、ECSやRDS、TransitGatewayなどなど様々なリソースが作成されるので、料金はご注意ください。
必要なくなったらすぐ削除しましょう。

デプロイされるリソースと料金感がちょっとわからないので、基盤とテナントのリソース一式を整理するあたりを次はやってみようかなと思ってます。