タダです.
データベースの CI/CD の方法を検討する際に Bytebase を試すことがありました.Bytebase はセルフホストするかクラウド版を利用するかの二択があるのですが,セルフホストとして ECS Fargate で起動して RDS に SQL 実行を検証してみました.この記事では Bytebase を ECS Fargate で起動するために行って設定をまとめていきます.
Bytebase とは
Bytebaseは,データベース開発ライフサイクルを管理する開発者とDBAのためのデータベース CI/CD ツールです.Bytebase では MySQL,PostgreSQL,MongoDB,Snowflake,TiDB,ClickHouse,Spanner 等をサポートしてます.GitHub,GitLab,Terraformと統合して GitOps も可能にします。
ECS Fargate で起動するためにやったこと
ECS Fargate で Bytebase をホストしていきますが,このケースでは ALB をパブリックサブネットに配置し,ECS はプライベートサブネットに配置する構成を作る想定で記載してきます.
コンテナイメージを ECR に格納
まず,Bytebase のコンテナイメージを ECR に格納していきます.Bytebase のリポジトリ に用途ごとに Dockerfile が用意されていますので,こちらの Dockerfile をビルドしました.ビルドコマンドはこのスクリプトを参照しました.
$ docker build -f ./scripts/Dockerfile \ --build-arg VERSION="${VERSION}" \ --build-arg GO_VERSION="$(go version)" \ --build-arg GIT_COMMIT="$(git rev-parse HEAD)" \ --build-arg BUILD_TIME="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \ --build-arg BUILD_USER="$(id -u -n)" \ --platform linux/amd64 \ -t bytebase-test .
ECS タスク定義の作成
ECR にコンテナイメージを格納したらタスク定義を作っていきます.コンテナのスペックは CPU 1コアとメモリが 2GB が要件になっているので,これを踏まえた設定を行います.ECS タスクを起動するに設定を行った部分のみ抜粋したのが以下の定義になります.
{ "containerDefinitions": [ { "name": "[コンテナ名]", "image": "[ECR イメージ URI]:latest", "portMappings": [ { "name": "8080", "containerPort": 8080, "hostPort": 8080, "protocol": "tcp", "appProtocol": "http" } ], "essential": true, "mountPoints": [ { "sourceVolume": "data", "containerPath": "/var/opt/bytebase", "readOnly": false } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "[ロググループ名]", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "[ログストリームプレフィックス]" } } } ], "family": "hoge", "taskRoleArn": "[ECS タスクロール ARN]", "executionRoleArn": "[ECS タスク実行ロール ARN]", "networkMode": "awsvpc", "volumes": [ { "name": "data", "host": {} } ], "cpu": "1024", "memory": "2048" }
関連情報
ALB ターゲットグループを作成する
ECS タスクを登録するターゲットグループを追加します.ターゲットグループではヘルスチェックのポートとヘルスチェックパスを以下で定義した以外はデフォルトで設定しています.
- ポート:
8080
- ヘルスチェックパス:
/healthz
セキュリティグループを追加する
ECS サービスのセキュリティグループとして ALB からの TCP 8080
番ポートのインバウンド通信を許可し,アウトバウンドで RDS に接続するためのポートを解放しておきます.
Bytebase のECS サービスを追加する
最後に ECS サービスを追加します.作成したタスク定義と ALB ターゲットグループ,セキュリティグループを設定すれば完了です.ここまででの設定が完了していれば,ECS タスクが起動して Bytebase にアクセスできるようになります.
まとめ
データベースの CI/CD ツールの Bytebase を ECS Fargate でホストする際に行った作業をまとめました.