以前、Cloud BuildとDockerfileをつかった自動デプロイを使ってたけど、
いつの間にか進化していて、かなり楽にデプロイできるようになってた(*´ω`*)
実際に試してみたら、すごい設定が少なくリリースできるようになってたので、
ハマったところを含めてまとめてみた備忘録(*´ω`*)
公式のドキュメントだとこの辺りを起点に読むとよいかも。
- Google Cloud の Buildpacks でコンテナ イメージ作成が簡単に | Google Cloud 公式ブログ
- クイックスタート: Cloud Run に Node.js サービスをデプロイする | Cloud Run のドキュメント | Google Cloud
Buildpacksでソースからデプロイ
GCPにある公式のサンプルでのデプロイ。
- nodejs-docs-samples/run/helloworld · GitHub
- クイックスタート: Cloud Run に Node.js サービスをデプロイする | Cloud Run のドキュメント | Google Cloud
こんな感じのシンプルなpackage.json
とindex.js
があるとして、
// package.json { "name": "helloworld", "description": "Simple hello world sample in Node", "version": "1.0.0", "private": true, "main": "index.js", "scripts": { "start": "node index.js" }, "engines": { "node": ">=12.0.0" }, "author": "Google LLC", "license": "Apache-2.0", "dependencies": { "express": "^4.17.1" } }
// index.js const express = require('express'); const app = express(); app.get('/', (req, res) => { const name = process.env.NAME || 'World'; res.send(`Hello ${name}!`); }); const port = parseInt(process.env.PORT) || 8080; app.listen(port, () => { console.log(`helloworld: listening on port ${port}`); });
あとは、gcloud run deploy
すればOK
// SERVICE_NAME: サービス名 // PROJECT_ID: プロジェクトID $ gcloud run deploy $SERVICE_NAME --source . \ --project $PROJECT_ID \ --region asia-northeast1 \ --allow-unauthenticated
2つのファイルだけでデプロイできるように(*´ω`*)
サンプルだと、package.json
にscripts.start
しかないけど、
scripts.build
を追加しておけば、npm run build
を実行してくれるので、
TypeScriptでもOK(*´ω`*)
gcloud run deploy
のオプションは以下を参照。
gcloud run deploy
のオプション: gcloud run deploy | Google Cloud CLI Documentationgcloud
共通のオプション: gcloud | Google Cloud CLI Documentation
必要なAPI
Cloud Run/Artifact Registry/Cloud Buildを使うので、
このあたりのAPIが有効にしておく必要がある。
- 必要なAPI
もし、有効になっていない場合、gcloud run deploy
を実行すると、
有効にするかどうか聞かれるので、y
キーで応答すればOK
ちなみに、Container Registry は非推奨らしい。。
Container Registry is deprecated. After May 15, 2024, Artifact Registry will host images for the gcr.io domain in projects without previous Container Registry usage.
必要な権限
サービスアカウントなど、オーナー以外の権限で実行する場合は、
以下の権限を付与しておく必要があるので注意。
- 必要な権限(オーナー/編集者のロール以外)
- Cloud Build 編集者のロール
- Artifact Registry 管理者のロール
- ストレージ管理者のロール
- Cloud Run 管理者のロール
- サービス アカウント ユーザーのロール
と、ドキュメントには書いてあったけど、以下の4つでもOKだったので、
もう少し調整でできるかもしれない。
- Artifact Registry 書き込み
- Cloud Build サービス アカウント
- Cloud Run デベロッパー
Cloud Run 起動元
ビルドなどNode.js固有の設定
よく使うのは、Nodeのバージョンやbuild/startコマンドあたり。
// package.json { "engines": { "node": ">=18.0.0" }, "scripts": { "build": "tsc", "start": "node dist/index.js" } }
Buildpacksのカスタマイズ
用意されているイメージだと足りない場合は、 イメージ自体をカスタマイズすることもできるっぽい。
もしくは、従来どおりDockerfileを用意してビルドすればOK
Buildpacksが使える言語とバージョン
Buildpacksが使える言語とバージョンはここに一覧になっている。
以上!! シンプルなWebアプリならこれで十分だね(*´ω`*)