CloudRunでnode.jsを動かす

公開日時
更新日時

Node.jsフレームワークのFastifyで作ったAPIをCloudRun上で動かしたかったのでデプロイ設定を行った。

  • Dockerfile を用意
# Dockerfile
FROM node:14-slim AS appbuild

WORKDIR /app

COPY package.json yarn.lock /app/

RUN yarn install

COPY . /app/

RUN yarn build

FROM node:14-slim

WORKDIR /app

COPY package.json yarn.lock /app/
COPY --from=appbuild /app/dist ./dist
COPY --from=appbuild /app/node_modules ./node_modules

CMD [ "yarn", "start" ]
  • cloudbuild.yaml を用意
steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/${REPO_NAME}:${SHORT_SHA}', '.']
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/${REPO_NAME}']
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      [
        'run',
        'deploy',
        '${REPO_NAME}',
        '--image',
        'gcr.io/$PROJECT_ID/${REPO_NAME}:${SHORT_SHA}',
        '--region',
        'asia-northeast1',
        '--platform',
        'managed',
        '--allow-unauthenticated',
        '--update-env-vars',
        'NODE_ENV=production',
      ]
images:
  - gcr.io/$PROJECT_ID/${REPO_NAME}
  • CloudBuildのマネージメントコンソールでトリガー設定を追加

これでリポジトリにpushしたらCloudRun上に自動デプロイできるようになる。

最初は↓の記事を読んでDockerfileなしで動かすのを試してみたが、うまくいかなかったのでDockerfileを用意することにした。

Buildpacksのことがイマイチよく分かっていないので、もう少し理解を深めてから再挑戦したい。

参考


Related #gcp

Cloud Runを試す

helloworldコンテナを試した

ngrokの代わりにinletsを使う

固定ドメインが設定できるのでbot開発に便利

inletsで複数ドメインが使えるようにする

CaddyのCloudflare Pluginを使ってワイルドカード証明書を設定した

Cloud Datastoreのローカル環境をDockerで構築する

CloudDatastoreエミュレータとgoogle-cloud-guiの環境を構築

gcloud configでアカウントを切り替える

gcloud config configurations activateで切り替える

Cloud RunアプリをCloud Buildでデプロイできるようにする

特定のブランチにpushしたらデプロイできるようになった