AWS SaaS Boostを触ってみる #1 VSCode Remote Containersでデプロイまで

2021.05.31

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

AWS は最近 aws-saas-boost という開発者が既存のアプリケーションを SaaS に移行するためのサポートをするツールをオープンソースとしてリリースしました。

AWS SaaS Boost がオープンソースとしてリリースされました

このツールを使うことで、例えば既存の Ruby On Rails のようなモノリスアプリケーションをコンテナ化し ECR リポジトリに登録するだけで、SaaS のベストプラクティス(テナント分離や課金、モニタリングなど)の機能を AWS 上に構築することができます。実際に触ってみないとさっぱりなので、サンプルのアプリケーションを作成して、そのアプリケーションを SaaS 化してみようと思います。記事が長くなりそうなので、いくつかに分けて投稿します。この記事では AWS SaaS Boost 自体のデプロイまでを行いたいと思います。

何回かに分けて投稿しています。

AWS SaaS Boost の概要

AWS SaaS Boost はそれ自体がサーバーレス構成のアプリケーションとなっています。React ベースの管理画面がありバックエンドはマイクロサービス構成となっています。マイクロサービスとしては全部で 6 つありそれぞれが SaaS アプリケーションを作成するためのサポートをするような形です。詳しくは以下の SaaS Boost の Developer Guide を参照ください。

Developer Guide

AWS SaaS Boostのユースケース

モノリスアプリケーションをSaaSに移行するためのツールというのはわかったけど、どういった状況で使えるのかというのが気になりました。 基本的には、以下のような状況にあてはまる場合に AWS SaaS Boostはとてもマッチするツールになると考えています。

  • 自社のWebアプリケーションを持っていて、パッケージ販売をしている
  • モノリスをSaaS化しようと考えている

AWSの発表のスライドから引用しますが、SaaS移行には5つのフェイズがあると考えられています。

事業のステージに応じたSaaSの悩みと解決策

  • フェイズ0: クラウドリフト
  • フェイズ1: シングルテナント移行
  • フェイズ2: 一部マルチテナント移行
  • フェイズ3: マルチテナント移行
  • フェイズ4: クラウド最適化

AWS SaaS Boostはこの内フェイズ0(クラウドリフト)からフェイズ1(シングルテナント)に移行するのをサポートする位置づけとして捉えています。 実際に動かしてみるとわかりますが、AWS SaaS Boost上でテナントを増やすという操作をするとCloudFormationのスタックが増えるような動きになります。 これは、顧客ごとにDBやインフラを分けていくような形になっています。 フェイズ2以降に進むには、アプリケーション設計の変更やDB共通化などアーキテクチャを根本的に変えないといけない部分もありますので、 まずは、SaaS化への第一歩として使用するツールに適していると考えています。

AWS SaaS Boost を AWS にデプロイする

Getting Started をベースに AWS 環境にデプロイしていきます。

aws-saas-boost をクローンする

OSSなので、GitHubからリポジトリをクローンします。

git clone https://github.com/awslabs/aws-saas-boost.git

Dockerで環境構築する

AWS SaaS Boost をデプロイするために、Corretto 11 や Apache Maven などの依存パッケージをインストールする必要がありますが、手元のローカル環境を汚したくなかったので、Docker と VSCode Remote Containers を使って構築することにします。ローカルにDockerが入っていれば、WindowsでもMacでもどちらでも動作します。

Dockerfile

alpine linux の Amazon Corretto 11 のベースイメージから作成しました。主に必要なパッケージを apk でインストールしています。この Dockerfile をクローンしてきたプロジェクトのルートに置いて、VSCode を起動しコンテナを起動します。VSCode Remote Containersを触ったことがない方は、以下の記事がわかりやすいのでご参照ください。

DockerとRemote Containersでの開発環境が最高過ぎる

FROM amazoncorretto:11-alpine

# 必要なものをインストール
RUN apk --update --no-cache add curl fish git jq

# maven
ARG MAVEN_VERSION=3.8.1
ARG USER_HOME_DIR="/root"
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
ARG GLIBC_VER=2.31-r0

RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
    && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
    && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
    && rm -f /tmp/apache-maven.tar.gz \
    && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

# Define commonly used JAVA_HOME variable
ENV JAVA_HOME /usr/lib/jvm/default-jvm/

# nodejs yarn
RUN apk --update --no-cache add bash nodejs-current yarn
RUN touch ~/.bashrc \
    && curl -o- -L https://yarnpkg.com/install.sh | bash \
    && ln -s "$HOME/.yarn/bin/yarn" /usr/local/bin/yarn

# awscli v2 for alpine linux

# install glibc
RUN apk --no-cache add binutils curl && \
    curl -sL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub && \
    curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-${GLIBC_VER}.apk && \
    curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk && \
    apk add --no-cache glibc-${GLIBC_VER}.apk glibc-bin-${GLIBC_VER}.apk

# install awscliv2
RUN curl -sL https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip && \
    unzip -q awscliv2.zip && \
    aws/install

devcontainer.json

{
    "name": "aws-saas-boost",
    "context": "..",
    "dockerFile": "Dockerfile",
    "settings": {
        "terminal.integrated.defaultProfile.linux": null
    },
    "extensions": []
}

AWS SaaS Boostをビルドしデプロイする

VSCode Remote Containerで上記のコンテナが起動できたら、プロジェクトのルートにある install.sh を実行します。いくつかログイン用のメールアドレスを指定したり、ドメインを設定するかどうかやオプションについて質問がありますが、画面のナビゲートに従います。ビルドとデプロイに30分ぐらいかかりますが、気長に待ちます。

sh install.sh

AWS SaaS Boostへログインする

インストールが完了したら、install.sh を実行したときに設定したメールアドレス宛に AWS SaaS Boostのユーザー名とパスワードと管理画面のURLが届いていますので、ログインします。ログインできてSaaS Boostのダッシュボードが開けばOKです。

まとめ

まずは、AWS SaaS Boostのデプロイまでをやってみました。次回以降では、サンプルアプリケーションを作成しECRにPushして SaaS Boost の機能を使ってみようと思います。