インフラ

CodeBuildを使ってDBマイグレーションを実行してみる

こんにちは、ちゃりおです。

CodeBuildからDBマイグレーションを実行する方法についてです。

Jenkinsで実行する方法や、サーバー入って直接実行する方法もあると思います。
「サーバーの管理したくない」「料金を抑えたい」「自動化したい」など考えたらCodeBuildを使うのがいいかもと思いました。

Contents

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_-_AWS_Developer_Tools

CodeBuildのログから実行が成功したことが確認できます。

まとめ

CodeBuildを使ったDBマイグレーションについてでした。
今回は実行を試しただけでしたが、構成管理ツールを使った管理や実行のトリガーの検討など後々やっていきたいです。

Amzonで「AWS」の本を見てみる

楽天で「AWS」の本をみてみる!!

codebuildキャッシュ
composer install時にCodeBuildのS3キャッシュを使うこんにちは、ちゃりおです。 今回はCodeBuildのS3キャッシュを試してみます。 S3キャッシュを使用すれば、ビルド時間の短縮がで...
CDK Codepipline
CDK + CodepipelineでEC2へのシンプルなデプロイフローを作るこんにちは、ちゃりおです。 最近、CDKでEC2にデプロイするCodepipeline作りました。 初めてCDKでCodeシリーズを...
cfn codepipeline
CloudformationからCodepipeline用のGithub Webhook作れなくてハマったこんにちは、ちゃりおです。 CloudformationからCodepipelineを作る際に、github organization...