はじめに
リアルタイム相互通信する Cordova アプリを作ったことがあります。フロントエンドに HTML+JavaScript で、Socket.IO 通信を使いました。通信を中継するのに Node.js のサーバアプリを用意しました。
サーバアプリを安価に稼動させるにはどうしたらいいでしょうか。調べていると、「Google Cloud Run」がよさそうです。これを使ってみました。
Google Cloud Run を使ってみる
Google Cloud Run とは
Google Cloud Run
は、Linux コンテナ実行環境を構築できる、Google が提供するクラウドサービスです。ウェブアプリサーバや API サーバを運用できます。
サーバーレス開発の基本と簡単に使い始められるCloud Runの特徴 | gihyo.jp
Amazon App Runner
、Azure Container Apps
が同様のサービスのようです。
他にも Render.com
、Vercel
、Heroku
などのサービスで同様の機能が提供されています。
開発環境からアプリをデプロイする
以前に作成した Node.js アプリを Cloud Run にデプロイして実行してみたいと思います。
CloudRunならたった5分でwebアプリをリリースできる!(自動デプロイも) #Docker - Qiita
Express(Node.js)+TypeScriptな環境をCloud Runに「エイヤ!!!」でデプロイする - Zenn
①Google Cloud
にプロジェクトを用意する。そのプロジェクトで
課金
を有効にする
Cloud Run API
を有効にする
Cloud Build API
を有効にしておく
Artifact Registry API
を有効にしておく
②開発環境に Google Cloud CLI
をインストールする
③Google Cloud CLI
環境でアカウントとプロジェクトを切替しておく
gcloudコマンドのアカウントやプロジェクトを切り替える方法 #GoogleCloud - Qiita
④デプロイしたいアプリのディレクトリに移動する
⑤デプロイする
一旦 Dockerfile
なしでデプロイしてみます。
Cloud Runにローカルから一発デプロイできる魔法のオプションを試してみた #GoogleCloud - Qiita
$ gcloud run deploy
コマンド実行すると以下の指定を求められます。
- ソースコードの場所
- サービス名
- リージョン
-
公開アクセス(unauthenticated invocations)
を許可するか
ソースコード一式がクラウドサーバにアップロードされます。
ローカルのフォルダにある node_modules
などはアップロードしないよう .gcloudignore
も用意するといいですね。
.gcloudignore
.git
.gitignore
node_modules/
Google Cloud のプロジェクトを見ると
-
Artifact Registry
に「cloud-run-source-deploy」が作成される -
Cloud Storage
にバケット「run-sources-(プロジェクトID)-(リージョン)」が作成される -
Cloud Run
にサービスが作成される -
公開 URL が取得できる
Cloud Run は、docker コンテナが作成されて、Google Cloud の仮想マシンで実行されます。
上記は Google Cloud の Buildpacks
が docker コンテナの設定してくれました。
自分で Dockerfile
を用意してもいいでしょう。↓
FROM node:19-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --production
COPY . ./
CMD ["node", "index.js"]
Google Cloud Shell を使ってみる
調べていると、Google Cloud に用意されている Cloud Shell
が便利なようです。
Google Cloud Shell
は
- クラウドサーバで起動する Linux 仮想マシン
- bash コマンドが使えるターミナル画面
- 5 GB のストレージ
- 無料で使える
-
Google Cloud CLI
がインストール済
この環境にアプリのソースコード一式をアップロードして、Google Cloud CLI
を使ってデプロイの処理できます。
Cloud Shell Editor を使ってみる
Google Cloud Shell
は、ターミナル画面で操作できるだけでなく、IDE(統合開発環境)が用意されています。VS Code
と同等の外観と機能の Cloud Shell Editor
です。
Cloud Shell Editor
は、拡張機能 Cloud Code
と Gemini Code Assist
が標準で使えます。
VS Code+Cloud Code を使ってみる
VS Code
で拡張機能 Cloud Code
を使ってみたいと思います。Cloud Shell Editor
でも同じです。
VS Codeの拡張機能"Cloud Code"を使って、Node.jsのアプリケーションをCloud Runへデプロイする - Zenn
前述の CLI を使った作業が、IDE から GUI で操作できます。
①Google Cloud
にプロジェクトを用意する(前述の通り)
②VS Code に拡張機能 Cloud Code
をインストールする
③拡張機能 Cloud Code
→ Cloude Run
で、Google Cloud
にログインして、プロジェクトを選択する
④デプロイしたいアプリのディレクトリを開く
⑤Deploy to Cloud Run
を実行する。
設定画面で以下の指定します。
- サービス名
- リージョン
-
公開アクセス(unauthenticated invocations)
を許可するか - ビルド環境
Local
でビルドするかCloud Build
を使うか - ビルド設定
Docker
を使うかBuildpacks
を使うか
ビルド環境に Local
を指定すると、開発環境で Docker が使えないといけません。開発環境に Docker がなければ、Cloud Build
を選びます。
ビルド設定に Docker
を指定すると、設定ファイル Dockerfile
を指定します。Buildpacks
を指定すると、例えば Node.js アプリなら package.json
を指定します。
上記の指定して [Deploy] 実行すると、Google Cloud CLI の gcloud run deploy
と同等の処理されます。以下の点が違っているようです。
-
Artifact Registry
に「gcr.io」が作成される -
Cloud Storage
にバケット「(プロジェクトID)_cloudbuild」を予め作っておく。これがなくてビルド環境にCloud Build
を指定すると、エラーになりました。
GitHub リポジトリからデプロイする
ウェブアプリを作っている開発者は、ソースコード管理に Git を使っていることでしょう。GitHub と連携して、リポジトリのソースコードが更新されると Cloud Run にデプロイされるようにできます。
GitHubからCloud Runに継続的にデプロイする - Zenn
作成済のコンテナイメージをデプロイする
ソースコードを実行環境にデプロイしてコンテナの構築を Google Cloud に任せるのでなく、Docker Hub などにアップロードした作成済のコンテナイメージを Cloud Run の実行環境にデプロイできます。
【Google Cloud】Cloud Runを触ってみた! | NHN テコラス Tech Blog
関数を作成する
Google Cloude Console の Google Run
で「サービスの作成」すると「関数を作成する」が選べます。これは何でしょうか。
Cloud FunctionsがCloud Run functionsとしてリブランディング。影響を解説 - G-gen Tech Blog
Cloud Functions
なんですね。
で、Cloud Functions と Cloud Run って何が違うの? #GoogleCloud - Qiita
同じ基盤で実行されるので「Cloud Run」のブランドにしたのでしょうか。Cloud Run
は「サーバアプリの実行」で、Cloud Functions
は「サーバ関数の呼出」なので、個人的には別々のサービスだと思います。Google Cloud Console の「すべてのプロダクト」でも「Cloud Run」と「Cloud Run Functions」は別々の入口になっています。ただし管理画面は「Cloud Run」に一本化されていました。