AWS CodeBuildをVPC内に作成しCodeBuildでSpring Bootプロジェクトをテストする際にRDSを使用する

2020年3月3日

CodeBuildでのテスト時にも本番環境と同様にRDSを使用する

テスト環境と本番環境はできるだけ近い方が良いというのは皆さん納得されると思います。AWS ではCodeBuildをVPC内に作成することで、CodeBuildでのテストでRDSを使用することができます。Spring BootではインメモリDBであるH2DBを使用することでPostgreSQLなどのDBを構築せずに簡単にDBを使用したテストができます。しかし、H2DBと本番環境で使用するDBでは挙動が異なる場合があります。そのため本番環境でRDSを使用するのであればCodeBuild上でのテスト実行時にもRDSを使用した方が確実です。

実際、私はテスト時にH2DBを使用したテストを全てパスした後デプロイしPostgreSQLへ接続した際にJavaのLocalDateTimeとPostgreSQLのTimestamp with TimeZoneの変換エラーが発生してとても焦ったことがあります。

構築手順

実際の環境構築手順は以下のようになります。

  1. CodeBuildへ設定するセキュリティグループを作成する。
  2. CodeBuildの環境設定画面でVCP、サブネット、セキュリティグループを選択する。
  3. RDSのセキュリティグループにCodeBuildに設定したセキュリティグループからのアクセス許可を追加する。
  4. CodeBuildでビルド時に使用するSpring Bootプロファイル、DB接続情報をCodeBuildの環境変数に設定する。
  5. CodeBuildでビルド時に使用するSpring Bootプロファイル用のapplication.ymlを作成する。

参考ページ

セキュリティーグループの作成

サービス→EC2→セキュリティーグループからセキュリティーグループを新規作成します。このとき、CodeBuildを配置したいVPCを選択しましょう。
aws codebuild vpc セキュリティーグループ作成

CodeBuildの環境設定画面でVCP、サブネット、セキュリティグループを選択する

サービス→CodeBuild→編集→環境からCodeBuildへ配置先のVPC、サブネット、先ほど作成したセキュリティーグループを設定します。その後、正しく設定できているかを「VPC設定の確認」ボタンをクリックしてインターネット接続可能かで確認したほうがよいです。
aws codebuild vpc設定

RDSのセキュリティグループにCodeBuildに設定したセキュリティグループからのアクセス許可を追加する

テスト時に使用するRDSのセキュリティーグループのインバウンドにCodeBuildに設定したセキュリティグループからのアクセス許可を追加しましょう。今回RDSはPostgreSQLを使用しています。
aws codebuild rds セキュリティーグループ設定

CodeBuildでビルド時に使用するSpring Bootプロファイル、DB接続情報をCodeBuildの環境変数に設定する

サービス→CodeBuild→編集→環境から環境変数へDB接続情報を設定します。今回はSpring Bootのプロファイル名、DBユーザ名、DBユーザパスワードを設定しています。
aws codebuild 環境変数

CodeBuildでビルド時に使用するSpring Bootプロファイル用のapplication.ymlを作成する

設定したプロファイルに対応するapplication.ymlを作成します。ファイル名はapplication-{プロファイル名}.ymlとすることでプロファイルに応じたapplication.ymlを読み込むことができます。DB接続時のユーザ名とパスワードは環境変数から取得するため、以下のように記述します。


spring:
  datasource:
    url: jdbc:postgresql://database-1-instance-1.xxxxxxx.ap-northeast-1.rds.amazonaws.com:5432/xxxxdb
    username: ${DB_USER}
    password: ${DB_PASSWORD}
    driverClassName: org.postgresql.Driver
    initialization-mode: always