こんにちは、ちゃりおです。
CodeBuildからDBマイグレーションを実行する方法についてです。
Jenkinsで実行する方法や、サーバー入って直接実行する方法もあると思います。
「サーバーの管理したくない」「料金を抑えたい」「自動化したい」など考えたらCodeBuildを使うのがいいかもと思いました。
DBマイグレーションにCodeBuildを使うメリット
Jenkinsやサーバー入って直接実行する方法と比較すると以下のメリットがあります。
- マネージドサービスのためサーバーの管理不要
- ビルド時間に対して課金されるため料金が安くすむ
- Cfn、CDK、Teraformなど構成管理ツールで設定を定義できる
- buildspec.yml+構成管理ツールのコードをAppリポジトリに保存することでAppリポジトリ内で設定が完結する
パッケージのインストールが毎回必要ですが、S3キャッシュ有効化しておけばあまり気にならないと思います。
CodeBuildを使ったDBマイグレーション実行
今回はlaravelを使って、CodeBuildからのDBマイグレーション試してみました。
buildspecなどはこちらのリポジトリに置いてあります。
https://github.com/msato0731/codebuild-db-migrate
CodeBuildの設定
RDSに接続するためVPC内にCodeBuildを配置する必要があります。
その際、サブネットはプライベートサブネットを使用します。
パブリックサブネットに置いてしまうと、インターネットへの接続ができなくなります。(「DOWNLOAD_SOURCE」フェーズで失敗すると思います)
VPC で CodeBuild を使用するには、NAT ゲートウェイまたは NAT インスタンスが必要です。これにより、CodeBuild はパブリックエンドポイントにアクセスできるようになります (ビルドの実行時に CLI コマンドを実行する場合など)。CodeBuild は、作成したネットワークインターフェイスへの Elastic IP アドレスの割り当てをサポートしていないため、NAT ゲートウェイや NAT インスタンスの代わりにインターネットゲートウェイを使用することはできません
Amazon Virtual Private Cloud での AWS CodeBuild の使用
RDS側の設定
RDS側で必要なのは、セキュリティグループでCodeBuildからの接続を許可するだけです。
実行してみる
CodeBuildとRDS側の設定が完了したら、実行してみます。
php artisanでテスト用のマイグレーションファイルを作成します。
php artisan make:migration create_codebuildtest_table
gitにpushしたら、CodeBuildを手動実行します。
CodeBuildのログから実行が成功したことが確認できます。
まとめ
CodeBuildを使ったDBマイグレーションについてでした。
今回は実行を試しただけでしたが、構成管理ツールを使った管理や実行のトリガーの検討など後々やっていきたいです。