SquashTMをECSにデプロイする
はじめに
横浜銀行アジャイル開発チームのwatariです。
テスト管理ツール「SquashTM」をECSに構築します。
料金プランについては以下のとおりで、今回はCommunity版での検証です。
Dockerfile等については公式ドキュメントにあるとおりです。
構築の大部分は、ECSでサービスを公開する一般的な手順と差はありません。
そのためコマンド等細かい手順で重複するようなものは割愛いたします。
本記事は構築の紹介までとし、JIRA連携等SquashTMの高度な機能は実施していません。
導入(検証)経緯
チーム内で、SquashTMを検証するために構築しました。
元々はExcelで実施しており、以下のような課題がありました。
- MacとWindows混在で、Excelが入っていないメンバーがいる
- テストケースと不具合の紐付けがアナログ
- 要件、ストーリーの紐付けも同様にアナログ
- 進捗管理・集計が手間。ヒューマンエラーも発生しやすい
- Excel最新版がわからなくなる、など
- スケーラビリティの限界
- 大量のテストケースや項目で埋められたExcelは管理負荷が高い
- リグレッションテストの際のテストケース再利用がアナログになる
SquashTMには上記課題の解消を期待します。
AWS構成
参考までに構成図は以下のとおりです。
ECSをプライベートサブネットに配置し、ALBをインターネットフェイシングとします。
また、ALBにセキュリティグループを設定して社内接続に限っています。
-
Bastion EC2
MariaDBに向けてSQLを実行するための踏み台です。
初期セットアップでしか使わない、かつ同様に社内からのSSH接続でのみインバウンドを許可しています。
パスワード認証とIAM認証どちらを使うかは、各自要件に合わせてください。
我々は上記の要件であったためパスワード認証としています。 -
ALB, Route53
セキュリティグループで、社内のIPに限定しています。
取得済のドメインがあったため、今回はそちらを流用しています。 -
ECS, ECR
SquashTM本体です。 -
MariaDB
公式が用意していたcomposeの記載に倣ってMariaDBで構築しています。
postgreSQLもサポートしているようです。 -
Parameter Store
DBパスワードなど機密情報を保持しています。
構築手順
固有の情報は以下のようにしています。各種ドキュメントやツールのデフォルト値です。
DBユーザ名:squashtm
DB_NAME:squashtm
DB_PORT:3306
MariaDB
インスタンス作成においては特筆することはありません。IAM認証は有効にします。
パラメータグループで以下オプションの変更が必要でした。
log_bin_trust_function_creators
こちらを有効(1)に設定します。
Bastion EC2
SSH接続ができるEC2を作ります。キーペアの作成か指定を忘れずに。
セキュリティグループはインバウンドに上記SSH、アウトバウンドにMariaDBへの接続を指定します。
またMariaDB側のSGに、Bastionからのインバウンド接続を許可します。
これでMariaDBに繋げられます。
$ RDSHOST={RDSエンドポイント}
$ mysql --host=$RDSHOST --port=3306 --user=squashtm --password={dbpassword}
## DB選択
MariaDB [(none)]> show databases;
MariaDB [(none)]> use squashtm;
CREATE DATABASE squashtm;
初期セットアップのSQLを実行します。以下の内容です。権限周りの設定を行っています。
SquashTM-MariaDB-初期構築SQL
Parameter Store
必要な分、機密情報をセットしましょう。
本構築ではDBパスワードだけ保持しました。
ECS, ECR
ECRへsquashtmのイメージをアップロードします。
ECSにタスク定義、サービス作成を行います。
MariadDB接続のため、ECSタスクの実行ロールには追加でrds-db:connect
のアクションをつけましょう。
IAM データベースアクセス用の IAM ポリシーの作成と使用
環境変数を、docker composeの内容に合わせてセットします。
USERNAMEやPORTなど、変更を加えている場合はご自身の環境に合わせて、適宜値を変更してください。
SQTM_DB_TYPE:mariadb
SQTM_DB_USERNAME:squashtm
SQTM_DB_PASSWORD:パラメータストアから取得(ValueFromを使用)
SQTM_DB_NAME:squashtm
SQTM_DB_HOST:RDSのエンドポイント
SQTM_DB_PORT:3306
パラメータストアの読み取り権限も実行ロールには必要になります。
Amazon ECS 環境変数を使用して Systems Manager パラメータを伝達する
ALB, Route53
Route53は参考までに。Route53がなくてもALBが持つパブリックDNSで一応は足ります。
Route53を扱う上で、ドメイン取得済とします。
ホストゾーン作ってAレコードの登録のみで名前解決する形です。これをALBと紐づけます。
ALBもターゲットグループを指定してヘルスチェックを行うところは他と一緒です。
ヘルスチェックはデフォルトの'/'ではなく'/squash/login'を指定しました。
ログインページの正常性を確認している形です。
セキュリティグループは適切に設定してください。
インバウンドを絞る。アウトバウンドはヘルスチェックが出来るようにしておけば大丈夫です。
ブラウザアクセス
ここまでやって、ルーティング等問題なければ以下でログインページにアクセスできます。
{FQDN}/squash/login
まとめ
今回、テスト管理ツールであるSquashTMをAWS ECS上に構築する手順を紹介しました。
公式ドキュメントのDockerイメージを活用しつつ、AWSの各サービス(ECS, ECR, ALB, Route53, RDS, Parameter Store等)を組み合わせることで、簡単にテスト管理環境を実現できました。
特に以下の点がポイントとなりました。
- 公式Dockerイメージの活用
公式が提供するDockerイメージやセットアップSQLを利用することで、構築工数を大幅に削減できます。 - AWSのマネージドサービスによる運用負荷の軽減
RDS(MariaDB)やParameter Storeの利用により、セキュリティと可用性を確保しつつ、運用負荷を下げることができました。 - ECSでのデプロイとALBによるアクセス制御
ECSをプライベートサブネットに配置し、ALBを経由することで、社内向けのアクセス制御が容易になります。
まずはチーム内でSquashTMの使い心地を検証してみて、という形になります。
これにより、従来Excelで抱えていた課題(進捗管理、テストケースの紐付け、集計作業の煩雑さ)を大きく改善できるため、テスト管理の効率化や品質向上を期待しています。
Discussion