継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

データベース CI/CD ツールの Bytebase を ECS Fargate でホストしてみる 🐳

タダです.

データベースの 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 も可能にします。

www.bytebase.com

platformengineering.org

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"
}

関連情報

www.bytebase.com

ALB ターゲットグループを作成する

ECS タスクを登録するターゲットグループを追加します.ターゲットグループではヘルスチェックのポートとヘルスチェックパスを以下で定義した以外はデフォルトで設定しています.

  • ポート: 8080
  • ヘルスチェックパス: /healthz

セキュリティグループを追加する

ECS サービスのセキュリティグループとして ALB からの TCP 8080 番ポートのインバウンド通信を許可し,アウトバウンドで RDS に接続するためのポートを解放しておきます.

Bytebase のECS サービスを追加する

最後に ECS サービスを追加します.作成したタスク定義と ALB ターゲットグループ,セキュリティグループを設定すれば完了です.ここまででの設定が完了していれば,ECS タスクが起動して Bytebase にアクセスできるようになります.

正常に起動できていればログイン画面が表示されます

まとめ

データベースの CI/CD ツールの Bytebase を ECS Fargate でホストする際に行った作業をまとめました.