Open6

Cloud Run Jobs を使って prisma の migrate deploy してみる

YamatoYamato

Nuxt3にPrismaを載せた状態で検証する。

Cloud SQL(MySQL) + Cloud Run Jobs + Cloud Build + Nuxt3 + Prisma

YamatoYamato

事前に用意するファイル

Dockerfile
FROM node:16.16.0-buster as build
WORKDIR /app

COPY ./src/package.json ./src/yarn.lock ./
RUN yarn
COPY ./src .
RUN yarn build

CMD ["node", ".output/server/index.mjs"]
cloudbuild.yaml
substitutions:
steps:
  - id: 'image-build'
    name: 'gcr.io/kaniko-project/executor:latest'
    args:
      - --destination=gcr.io/$PROJECT_ID/$IMAGE_NAME:latest
      - --dockerfile=Dockerfile.app
      - --cache=true
      - --cache-ttl=24h
    waitFor:
      - '-'
  - id: 'jobs-db-migrate-deploy'
    name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: gcloud
    args: ['beta', 'run', 'jobs', 'update', '$JOB_NAME', '--image', 'gcr.io/$PROJECT_ID/$IMAGE_NAME:latest', '--region', '$REGION']
    waitFor:
      - 'image-build'
  - id: 'jobs-db-migrate-execute'
    name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: gcloud
    args: ['beta', 'run', 'jobs', 'execute', '$JOB_NAME', '--region', '$REGION', '--wait']
    waitFor:
      - 'jobs-db-migrate-deploy'
YamatoYamato

Cloud Run Jobs は先にデモコンテナとか使って作っておく。

環境変数で DATABASE_URL を指定する。
(パスワード含むから、Secret Manager に入れるべき)

YamatoYamato

Cloud Run Jobs の方で 実行するコマンドを指定している。
npx prisma migrate deploy