Open6
Cloud Run Jobs を使って prisma の migrate deploy してみる
Nuxt3にPrismaを載せた状態で検証する。
Cloud SQL(MySQL) + Cloud Run Jobs + Cloud Build + Nuxt3 + Prisma
事前に用意するファイル
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'
最初、M2 MacBook で docker build して動かそうとしたけど、アーキテクチャの問題で動かなかった。
(ログでわからんかった)
この辺読んでて気づいた。
Cloud Run Jobs は先にデモコンテナとか使って作っておく。
環境変数で DATABASE_URL を指定する。
(パスワード含むから、Secret Manager に入れるべき)
.env
DATABASE_URL=mysql://${DATABASE_USER}:${DATABASE_PASS}@localhost:3306/${DATABASE_NAME}?socket=${DATABASE_SOCKET}
にして、環境変数からそれぞれ設定すれば管理しやすいのでは?と思った
Cloud Run Jobs の方で 実行するコマンドを指定している。
npx prisma migrate deploy