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

IPv6 IPoE環境で自宅のRaspberryPiにsshできるようにする

GCPにssh port forwardingすることで実現できた

Cloud FunctionsのNode.jsバージョンを更新する

package.jsonとcloudbuild.yamlを更新

Cloud BuildでFirebase Hostingのデプロイを行う

リポジトリへのpush以外をトリガーにしたい場合に使用

Firebase HostingのデプロイをWebhook(API)経由で行う

デプロイボタンが作れるようになった

CloudRunのレスポンスが429 Rate exceeded.になる

インスタンスの最大数を500に上げたらエラーは消えた