はじめに
リアルタイム相互通信する 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」に一本化されていました。
