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のコールドスタートを避けるためにcurlで起こし続ける

定期リクエストを送っている間はコールドスタートは発生していないことが確認できた

GCP VMインスタンスのSSHポートを変更した

Network Internet Egress from Americas to EMEA

[Action Required] Internal error has affected services in Cloud Run that use Cloud Load Balancing

デフォルトURLで利用している場合は対応不要

GCPの無料インスタンスがF1-microからE2-Microに変わった

メールが来ていたのを見落としていた

ローカルディレクトリをCloud Storageに同期する

gsutil rsyncを利用した