Google Cloud Run 入門: Hello, world!
この記事では、Google の強力なサーバーレスプラットフォーム Cloud Run を使って、Node.js アプリケーションをデプロイする方法を詳しくご紹介します。
公式サンプル:GoogleCloudPlatform/nodejs-docs-samples/run/helloworld をベースに進めていきます。
Cloud Run とは
Cloud Run は、Google Cloud が提供するフルマネージドなコンテナ実行環境です。スケーラビリティやインフラ管理を意識せずに、コンテナ化されたアプリケーションを簡単にデプロイできます。
プロジェクトの概要
このハンズオンでは、シンプルな "Hello World" アプリケーションをデプロイします。主な特徴は以下のとおりです:
- フレームワーク:Express.js
- 機能:環境変数から名前を取得し、挨拶メッセージを表示
- 目的:Cloud Run へのデプロイを通じて、基本的なワークフローを理解
コードの詳細解説
index.js
import express from '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}`);
});
export default app;
💡 解説
-
モジュールのインポートとアプリケーションの作成:
-
express
モジュールをインポートし、アプリケーションインスタンスを作成します。
-
-
ルートパスへの GET リクエストの処理:
-
'/'
パスに対する GET リクエストを受け取り、環境変数NAME
から名前を取得します。 -
NAME
が未設定の場合、デフォルトで'World'
を使用します。 - レスポンスとして、
Hello ${name}!
を返します。
-
-
サーバーの起動:
- 環境変数
PORT
からポート番号を取得します(デフォルトは8080
)。 - 指定したポートでサーバーをリッスンし、起動時にコンソールにメッセージを表示します。
- 環境変数
Dockerfile の詳細解説
FROM node:20-slim
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --omit=dev
COPY . ./
CMD [ "node", "index.js" ]
💡 解説
-
ベースイメージの指定:
-
node:20-slim
イメージを使用し、軽量な環境を構築します。
-
-
作業ディレクトリの設定:
-
/usr/src/app
を作業ディレクトリに設定します。
-
-
依存関係のインストール:
-
package.json
とpackage-lock.json
をコピーし、本番環境用の依存関係をインストールします。
-
-
アプリケーションコードのコピー:
- 残りのアプリケーションファイルを作業ディレクトリにコピーします。
-
コンテナ起動コマンドの設定:
-
node index.js
を実行し、アプリケーションを起動します。
-
サンプルプロジェクトのダウンロードとローカルでの実行
まずは、公式リポジトリからサンプルコードをクローンし、ローカル環境でアプリケーションを試してみましょう。
1. リポジトリのクローン
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
cd nodejs-docs-samples/run/helloworld
2. 依存関係のインストール
npm install
-
package.json
に定義されている依存関係がインストールされます。
3. アプリケーションの起動
npm run start
- サーバーが起動し、デフォルトでポート
8080
をリッスンします。 - ターミナルには以下のようなメッセージが表示されます:
helloworld: listening on port 8080
4. アプリケーションの動作確認
- ブラウザで
http://localhost:8080
にアクセスします。 - 以下のようにメッセージが表示されれば成功です:
5. 環境変数を使ったカスタマイズ
- 環境変数
NAME
を設定して、挨拶メッセージを変更してみましょう。
方法 1: コマンドラインで環境変数を設定
NAME=YourName npm run start
- もう一度
http://localhost:8080
にアクセスすると、以下のように変更されます。
.env
ファイルを使用
方法 2: -
プロジェクトのルートディレクトリに
.env
ファイルを作成し、以下の内容を追加します:NAME=YourName
-
npm run start
を再度実行すると、環境変数が適用されます。
6. アプリケーションの終了
- サーバーを停止するには、ターミナルで
Ctrl + C
を押します。
デプロイ手順
以下の手順で Cloud Run にアプリケーションをデプロイします。
1. Google Cloud プロジェクトの設定
gcloud config set project YOUR_PROJECT_ID
-
YOUR_PROJECT_ID
を自身のプロジェクト ID に置き換えてください。
2. 必要な API の有効化
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
3. コンテナイメージのビルドとプッシュ
gcloud builds submit --tag gcr.io/YOUR_PROJECT_ID/helloworld
- このコマンドは、Cloud Build を使用してコンテナイメージをビルドし、Container Registry にプッシュします。
4. Cloud Run へのデプロイ
gcloud run deploy helloworld \
--image gcr.io/YOUR_PROJECT_ID/helloworld \
--platform managed \
--region us-central1 \
--allow-unauthenticated
- デプロイ時に以下の設定を行います:
- サービス名:
helloworld
- --image:先ほどビルドしたコンテナイメージ
- --platform:マネージド
- --region:
us-central1
(必要に応じて変更可能) - --allow-unauthenticated:未認証アクセスを許可
- サービス名:
5. デプロイの確認
- デプロイが完了すると、サービスの URL が表示されます。
- ブラウザでその URL にアクセスし、
Hello World!
と表示されれば成功です。
デプロイ用シェルスクリプトの追加
デプロイ作業を簡略化するために、Cloud Run へのデプロイを自動化するシェルスクリプト deploy.sh
を作成します。このスクリプトを使用することで、毎回長いコマンドを入力する手間を省くことができます。
deploy.sh
スクリプトの作成
1. プロジェクトのルートディレクトリに deploy.sh
ファイルを作成し、以下の内容を追加します:
#!/bin/bash
# デプロイ用の変数を設定
export SERVICE_NAME=helloworld
export REGION=us-central1
export PROJECT_ID=$(gcloud config get-value project)
export CONTAINER_IMAGE=gcr.io/${PROJECT_ID}/${SERVICE_NAME}
# コンテナイメージのビルドとプッシュ
gcloud builds submit --tag $CONTAINER_IMAGE
# Cloud Run サービスへのデプロイ
gcloud run deploy $SERVICE_NAME \
--image $CONTAINER_IMAGE \
--platform managed \
--region $REGION \
--allow-unauthenticated
💡 解説
-
環境変数の設定:
-
SERVICE_NAME
:デプロイするサービスの名前を指定します。 -
REGION
:デプロイ先のリージョンを指定します。 -
PROJECT_ID
:現在の GCP プロジェクト ID を取得します。 -
CONTAINER_IMAGE
:コンテナイメージのパスを指定します。
-
-
コンテナイメージのビルドとプッシュ:
-
gcloud builds submit
コマンドを使用して、コンテナイメージをビルドし、Google Container Registry にプッシュします。
-
-
Cloud Run サービスへのデプロイ:
-
gcloud run deploy
コマンドで、Cloud Run にサービスをデプロイします。
-
2. スクリプトの実行権限を設定
シェルスクリプトを実行可能にするため、実行権限を付与します。
chmod +x deploy.sh
3. デプロイ用スクリプトの実行
ターミナルからスクリプトを実行して、Cloud Run にデプロイします。
./deploy.sh
4. デプロイの確認
- スクリプトの実行が完了すると、Cloud Run サービスの URL が表示されます。
- ブラウザでその URL にアクセスし、アプリケーションが正しく動作していることを確認します。
5. 注意点
-
gcloud
コマンドの設定:- 事前に
gcloud
CLI をインストールし、認証とプロジェクトの設定を行っておいてください。
- 事前に
-
デフォルトリージョンの変更:
-
REGION
を変更することで、デプロイ先のリージョンを指定できます。
-
-
環境変数のカスタマイズ:
-
NAME
環境変数を設定したい場合は、スクリプト内のgcloud run deploy
コマンドに--set-env-vars NAME=YourName
を追加できます。
-
カスタマイズ
環境変数の設定
NAME
環境変数を設定することで、挨拶メッセージを変更できます。
gcloud run deploy helloworld \
--image gcr.io/YOUR_PROJECT_ID/helloworld \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars NAME=YourName
- これにより、
Hello YourName!
と表示されます。
トラブルシューティング
よくあるエラーと対処法
-
API が有効化されていない
-
エラーメッセージ:
API [run.googleapis.com] not enabled on project
-
対処法:以下のコマンドで API を有効化します。
gcloud services enable run.googleapis.com
-
-
認証エラー
-
エラーメッセージ:
PERMISSION_DENIED
-
対処法:適切な権限があるか確認し、
gcloud auth login
で再ログインします。
-
エラーメッセージ:
-
イメージのビルド失敗
-
エラーメッセージ:
Build failed; check logs
- 対処法:Cloud Build のログを確認し、Dockerfile や依存関係に問題がないかチェックします。
-
エラーメッセージ:
まとめ
お疲れさまでした!このハンズオンでは、以下のポイントを学びました。
- Cloud Run の基本的な使い方
- Node.js アプリケーションのローカルでの実行
- アプリケーションのコンテナ化とデプロイ
- 環境変数やリソース設定によるカスタマイズ
- トラブルシューティングの方法
Cloud Run を使うことで、インフラストラクチャの管理を気にせず、コードに集中できます。ぜひ、より複雑なアプリケーションやマイクロサービスアーキテクチャにも挑戦してみてください。
次回は、Cloud Run と他の GCP サービスとの連携について深掘りします。お楽しみに!
Discussion