LoginSignup
1
0

More than 1 year has passed since last update.

【Tips】CodeBuildでPostgreSQLのコンテナを起動してテストする

Posted at

はじめに

CodeBuildでアプリケーションのCIをするために、実物のAuroraに接続するのが面倒だったのでPostgreSQLをローカルでコンテナ起動してそこにデータを投入してテストをしようとしたら意外と大変だったのでメモっておく。

なお、CodeBuildのイメージは

  • aws/codebuild/standard:5.0
  • aws/codebuild/amazonlinux2-x86_64-standard:3.0
    それぞれで使えるようにした。
    DBについては、PostgreSQL12.Xを使用している。

前提知識としては、DockerやCodeBuildについてある程度経験があるといったあたりをターゲットにしている。

事前準備

Dockerを起動するので、CodeBuildの特権モード(Privilegeモード)はONにしておく。
※これをしておかないとDockerデーモンが起動しない。

PostgreSQLの起動設定

Dockerイメージはどちらでも共通で使える。以下のファイルを用意しておこう。

docker-compose.yml
version: '3'

services:
  postgres:
    image: public.ecr.aws/docker/library/postgres:12.7-alpine3.14
    restart: always
    environment:
      POSTGRES_USER: [ユーザ名]
      POSTGRES_PASSWORD: [パスワード]
      PGPASSWORD: [パスワード]
      POSTGRES_DB: [DB名]
      TZ: "Asia/Tokyo"
    ports:
      - 5432:5432
    volumes:
      - postgres:$PWD/pgdata

volumes:
  postgres:

クライアントインストール Standard(Ubuntuイメージ)編

Ubuntuイメージの場合、4.0以前だと

buildspec.yml(抜粋)
phases:
  install:
    runtime-versions:
      docker: 19

が必要になるが、5.0では標準でDockerが起動かのうになっているらしいので、上記は不要である。
デフォルトのイメージではpostgresql12のクライアントが入っていないのでインストールする。

buildspec.yml(抜粋)
phases:
  install:
    commands:
      - apt-get update
      - apt-get install -y postgresql-client-12

クライアントインストール AmazonLinux2編

AmazonLinux2のイメージでは、Dockerを使用する場合は下記のランタイム設定が必要になる。

buildspec.yml(抜粋)
phases:
  install:
    runtime-versions:
      docker: 19

AmazonLinux2では、PostgreSQL12のクライアントはamazon-linux-extras(詳細は公式のナレッジセンター参照)に入っているのだが、なぜかCodeBuildのイメージにはインストールされていない。遠回りだが、まずはamazon-linux-extrasからインストールしよう。

buildspec.yml(抜粋)
    commands:
      - yum update -y --skip-broken
      - yum install -y amazon-linux-extras
      - ln -s /lib/python2.7/site-packages/amazon_linux_extras ~/.pyenv/versions/3.9.5/lib/python3.9/site-packages/
      - amazon-linux-extras enable postgresql12
      - yum install -y postgresql.x86_64

ここで、シンボリックリンクを作っているのは、amazon_linux_extras がデフォルトでPython2.7配下にインストールされるためだ。
なぜかこれだけは最新になっておりPython3.9から参照できるようにする。

Docker起動

あとは、docker-composeでコンテナを起動してSQLで初期データを投入しよう。
接続情報は、最初に書いたdocker-compose.ymlと合わせよう。
起動完了の待ち合わせをするのは、起動直後にpsqlでデータを放り込もうとすると、おそらくReadyになり切っていなくてエラーになるためだ。

buildspec.yml(抜粋)
env:
  variables:
    PGPASSWORD: [パスワード]
buildspec.yml(抜粋)
 
  pre_build:
    commands:
      - docker-compose up -d
      # 起動完了を待ち合せてからロードする
      - sleep 5
      - psql -h localhost -U [ユーザ名] -d [DB名] -f ./[初期投入用のSQLファイル].sql 

ここまでやれば、あとはアプリケーションからローカルホストに向けてテストを実行してやればよい。
これだけのことなのだが、CodeBuildの拡張パッケージのインストールに思ったよりも苦戦してしまった……。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0