0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Cloud Run を使ってみた

Posted at

はじめに

リアルタイム相互通信する 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 RunnerAzure Container Apps が同様のサービスのようです。
他にも Render.comVercelHeroku などのサービスで同様の機能が提供されています。

開発環境からアプリをデプロイする

以前に作成した 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
.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 を用意してもいいでしょう。↓

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は素晴らしい

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 CodeGemini 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 CodeCloude Run で、Google Cloud にログインして、プロジェクトを選択する

④デプロイしたいアプリのディレクトリを開く

Deploy to Cloud Run を実行する。

説明④.png

設定画面で以下の指定します。

  • サービス名
  • リージョン
  • 公開アクセス(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」に一本化されていました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?