AWS SaaS Boostを触ってみる #3 各テナントをサブドメインに振り分ける

2021.07.15

CX事業本部の佐藤です。AWS SaaS Boostを触ってみるの3回目です。前回の記事はこちら

前回までの記事ではAWS SaaS Boostの概要とサンプルのテナントを作成するところまで行いました。今回は複数のテナントにアプリケーションをデプロイして、HTTPSのカスタムドメインを設定し各テナントをサブドメインに振り分ける構成を作ってみようと思います。

テナントをサブドメインに振り分けるとは

よくあるSaaSのテナント分離の方式として、顧客の専用URLを発行するというものがあります。 example.com がドメインの場合、顧客のテナントごとに https://tenant1.example.comhttps://tenant2.example.com というようなサブドメインを発行する方式です。なんらかのSaaSを利用したことがある方は馴染みがある方式かと思います。以下のようなイメージです。

AWS SaaS Boostではこの構成をサポートしています

AWS SaaS Boostはサブドメイン方式をサポートしていて、テナントをプロビジョニングする際に、自動的にサブドメインの設定をRoute 53に施してくれます。ドメイン、ワイルドカード証明書を用意していれば、管理画面で設定することで導入できます。

今回やること

以下の順で行います。

  1. 無料ドメインの取得
  2. AWS SaaS Boostの管理画面にカスタムドメインを設定し再度デプロイする
  3. Certificate Managerでワイルドカード証明書の作成とRoute53のレコードの追加
  4. AWS SaaS Boostの設定に取得したドメインと作成したワイルドカード証明書のArnを設定する
  5. AWS SaaS BoostのOnboardingサービスで複数のテナントをプロビジョニングする
  6. 各サブドメイン単位にアクセスが振り分けられていることを確認する

無料ドメインの取得

カスタムドメインにするためにはドメインが必要です。最近だと無料ドメインがありまして、今回は検証用に取得したいと思います。Freenomというサービスを使用します。詳しい取得方法については以下の弊社ブログを参照ください。

Route53にホストゾーンを作成する

無料ドメインを取得できたら、Route53のホストゾーンを作成します。

Route53にアクセスして、開始するをクリックします。

次に、ホストゾーンを作成するをクリックします。

取得したドメイン名を入力して、ホストゾーンを作成します。

ドメインはFreenomで取得したので、Route53のNSレコードをFreenomの Name Servers に登録します。

AWS SaaS Boostをカスタムドメインを設定し再度デプロイする

前回の記事ですでにデプロイされていますが、カスタムドメインではないので、一旦スタックを削除したあと再度インストールしました。まずは既存のAWS SaaS Boostを削除します。前回の記事で使ったDockerコンテナを起動したVSCodeのターミナルから以下コマンドを実行し、 5 を入力し、既存のスタックを削除します。

sh ./install.sh
===========================================================
Welcome to the AWS SaaS Boost Installer
Setting version to v0 as it is missing from the git properties file.
Installer Version: 1448365-dirty, Commit time: 2021-06-15T12:52:17+0000
Checking maven, yarn and AWS CLI...
Environment Checks for maven, yarn, and AWS CLI PASSED.
===========================================================
1. New AWS SaaS Boost install.
2. Install Metrics and Analytics into existing AWS SaaS Boost deployment.
3. Update Web Application for existing AWS SaaS Boost deployment.
4. Update existing AWS SaaS Boost deployment.
5. Delete existing AWS SaaS Boost deployment.
6. Exit installer.
Please select an option to continue (1-6): 6

削除が終わったら再度インストールします。

sh ./install.sh

各種依存関係チェックが終わると、インストールオプションを選択するコンソールになります。再度、新規に AWS SaaS Boostをインストールするので 1 を選択します。環境は sandbox としました。今回のインストールではカスタムドメインを設定するので、freenomで取得したドメイン名を設定します。 app.example.com のように設定しました。

===========================================================
Welcome to the AWS SaaS Boost Installer
Setting version to v0 as it is missing from the git properties file.
Installer Version: bf28da7, Commit time: 2021-07-14T12:32:29+0000
Checking maven, yarn and AWS CLI...
Environment Checks for maven, yarn, and AWS CLI PASSED.
===========================================================
1. New AWS SaaS Boost install.
2. Install Metrics and Analytics into existing AWS SaaS Boost deployment.
3. Update Web Application for existing AWS SaaS Boost deployment.
4. Update existing AWS SaaS Boost deployment.
5. Delete existing AWS SaaS Boost deployment.
6. Exit installer.
Please select an option to continue (1-6): 1
Directory path of saas-boost download (Press Enter for '/workspaces/aws-saas-boost') :
Enter name of the AWS SaaS Boost environment to deploy (Ex. dev, test, uat, prod, etc.): sandbox
Enter the email address for your AWS SaaS Boost administrator: sato.naoya@classmethod.jp
Enter the email address address again to confirm: sato.naoya@classmethod.jp
Would you like to setup a domain in Route 53 as a Hosted Zone for the AWS SaaS Boost environment (y or n)? y
Enter the domain to use (Ex. app.yourcompany.com): app.example.com
Would you like to install the metrics and analytics module of AWS SaaS Boost (y or n)? n

If your application requires a FSX for Windows Filesystem, an Active Directory is required.
Would you like to provision a Managed Active Directory to use with FSX for Windows Filesystem (y or n)? n
===========================================================

Would you like to continue the installation with the following options?
AWS SaaS Boost Environment Name: sandbox
Admin Email Address: sato.naoya@classmethod.jp
Route 53 Domain for AWS SaaS Boost environment: app.example.com
Install Metrics and Analytics: n
Amazon Quicksight user for setup of Metrics and Analytics: n/a
Setup Active Directory for FSX for Windows: n
Enter y to continue or n to cancel: y

30分ほどでデプロイが完了すると、管理画面のログインURLがメールで届きました。ログインしてダッシュボードが開くことを確認します。

Route53を見てみます。AWS SaaS Boostが自動的に app.example.com のようにRoute53のサブドメインのホストゾーンを作成しています。

サブドメインのホストゾーンを作成しているので、親ドメインのホストゾーンから委譲するために、親ドメインのホストゾーンにサブドメインのNSレコードを追加します。以下のように入力しました。

Certificate Manager でワイルドカード証明書の取得

無料ドメインの取得とAWS SaaS Boostのデプロイが終わったら、HTTPSでアクセスするために、ACM(Certificate Manager)を使って、無料のSSL/TLS証明書を取得します。Certificate Managerのコンソールにアクセスし、証明書のプロビジョニングを行います。パブリック証明書のリクエストを選択し、証明書のリクエストを行います。

保護するドメイン名を入力します。今回は、サブドメインごとにテナントをデプロイする構成を取るので、 *.app.example.com*.example.com の2つを設定しました。 example.com の部分は、↑で取得した無料ドメインに置き換えます。

証明書の検証方法はDNSの検証とします。

最後に確認して、確定とリクエストを行います。

リクエストができたら、DNS検証の保留中のステータスになるので、Route53にCNAMEレコードを登録する必要があります。Route53でのレコードの作成をクリックすると自動的にCNAMEレコードを作成してくれます。

数分待って、状況が 発行済 になることを確認します。

ここまでで、無料ドメインとワイルドカード証明書を取得できたので、カスタムドメインの準備が整いました。ここからは、AWS SaaS Boostを使って各テナントをSSLのカスタムドメインでデプロイしてみます。

AWS SaaS Boostの設定に取得したドメインと作成したワイルドカード証明書のArnを設定する

管理画面にログインして、アプリケーションの設定を行います。前回の記事と同様に設定しますが、カスタムドメインの設定を追加します。Domain Nameに取得したドメイン名、SSL Certificate ARN には ACMで取得した証明書のARNを設定します。私は以下のように設定しました。

AWS SaaS BoostのOnboardingサービスで複数のテナントをプロビジョニングする

アプリケーションの設定ができたので、オンボーディングメニューで複数のテナントをデプロイしてみます。AWS SaaS Boostでドメインを指定しているので、オンボーディングの設定画面に Subdomain の設定項目が増えています。ここに好きなテナント名とサブドメイン名を入力します。私は以下のようにしました。これでSubmitします。

同じく2つ目のテナントをデプロイします。

管理画面のオンボーディング一覧を確認すると、プロビジョニング中となっています。時間がかかるので、待ちます。

管理画面でテナントのプロビジョニングが終わったことを確認します。ステータスが deployed になっていればOKです。

テナントの一覧も確認します。ステータスが active となっているテナントが2つあることが確認できました。

各サブドメインごとにアプリケーションがデプロイされているかを確認する

複数のテナントのデプロイが終わったので、サブドメインでアクセスできるかを確認します。

まずは、 テナント1のアプリケーションにアクセスしてみます。テナント一覧画面の Tenant1 を選択します。画面の Custom domain URL をクリックするとアプリケーションの画面が表示されました。

2つ目のテナントも確認します。こちらもURLにアクセスするとアプリケーションの画面が表示されました。

2つのテナントアプリケーションがサブドメインに振り分けられていることを確認しました。うまくいってそうです。

まとめ

今回はアプリケーションを複数のテナントにデプロイして、各テナントをサブドメインに振り分けるところまで行いました。開発者は ACMとドメインさえあれば、管理画面に入力してボタンを押すだけで、シングルテナント方式でサブドメインに振り分ける構成を作成することができます。次回は、Stripeを使った請求機能をAWS SaaS Boost上で実装してみようと思います。