はじめに
Google Cloud Run は、Docker コンテナをサポートするスケーラブルな完全マネージド型のサービスです。この記事では、TypeScript で作成したプロジェクトをどのようにして Cloud Run にデプロイするかを解説します。
前提条件
デプロイするためには、以下の準備が必要です。
- Google Cloud アカウント
- インストール済みのツール: Node.js、TypeScript、Docker、Google Cloud SDK
- Docker と Cloud Run の基本的な知識
① TypeScript プロジェクトのセットアップ
まず、簡単な TypeScript プロジェクトを作成します。
mkdir my-cloud-run-app
cd my-cloud-run-app
npm init -y
npm install typescript ts-node express
npx tsc --init
次に、簡単な Express サーバーを src/index.ts に作成します。
import express from 'express';
const app = express();
const port = process.env.PORT || 8080;
app.get('/', (req, res) => {
res.send('Cloud Run からこんにちは!');
});
app.listen(port, () => {
console.log(`サーバーはポート ${port} で稼働中です`);
});
② アプリケーションの Docker 化
次に、アプリケーションをコンテナ化するための Dockerfile を作成します。
# Node.js ベースイメージを使用
FROM node:18
# 作業ディレクトリを設定
WORKDIR /usr/src/app
# package.json をコピーして依存関係をインストール
COPY package*.json ./
RUN npm install
# プロジェクトファイルをコピー
COPY . .
# TypeScript ファイルをビルド
RUN npm run build
# ポートを公開
EXPOSE 8080
# サーバーを起動
CMD ["node", "dist/index.js"]
③ Docker でのローカルビルドとテスト
Docker イメージをビルドします。
docker build -t my-cloud-run-app .
ローカルでアプリをテストします。
docker run -p 8080:8080 my-cloud-run-app
ブラウザで http://localhost:8080 にアクセスして、アプリが動作していることを確認します。
④ GCPへのイメージのプッシュ
まず、Docker を Google Cloud と認証します。
gcloud auth configure-docker
次に、Docker イメージをタグ付けして、Google Container Registry にプッシュします。
docker tag my-cloud-run-app gcr.io/[PROJECT_ID]/my-cloud-run-app
docker push gcr.io/[PROJECT_ID]/my-cloud-run-app
⑤ Cloud Run へのデプロイ
Cloud Run にデプロイするには、2つの方法があります。1つは Dockerfile を使って手動でビルド・プッシュする方法、もう1つは --source オプションを使ってソースコードから直接デプロイする方法です。
1. Docker イメージ
Docker イメージを使用して Cloud Run にアプリケーションをデプロイします。
gcloud run deploy my-cloud-run-app --image gcr.io/PROJECT_ID/my-cloud-run-app --platform managed --region REGION --allow-unauthenticated
デプロイが完了すると、アプリケーションの URL が生成されます。
2. --source オプション
より簡単な方法として、--source オプションを使って、ローカルのソースコードを直接 Google Cloud Build でコンテナ化し、そのまま Cloud Run にデプロイすることも可能です。この方法では、Dockerfile がなくても自動でビルドが行われます。
gcloud run deploy my-cloud-run-app --source . --platform managed --region REGION --allow-unauthenticated
この方法では、手動で Docker イメージをビルドしてプッシュするステップを省略でき、デプロイ手順が簡略化されます。
2つの方法の違い
-
Docker イメージを使用する方法
Dockerfile を使ってビルドプロセスを完全に制御したい場合や、特定の依存関係が必要な場合に適しています。この方法では、手動でビルドとプッシュを行うため、柔軟性があります。 -
--source オプションを使用する方法
素早くデプロイしたい場合や、Dockerfile を用意する時間を短縮したい場合には、この方法が便利です。Google Cloud Build にビルドを任せるため、手軽にデプロイが行えますが、ビルドに対するカスタマイズは制限されます。
デプロイのコマンドをpackage.jsonに登録すれば便利です。
{
"scripts": {
"deploy": "gcloud run deploy my-cloud-run-app --source . --platform managed --region REGION --allow-unauthenticated"
}
}
⑥ デプロイのテスト
デプロイ後、GCPコンソールのCloud Runにサービスが表示されます。
サービス名をクリックすると、URLが表示されます。セキュリティにAuthenticationを下記にしてください。
→Allow unauthenticated invocations
Check this if you are creating a public API or website.
提供された URL を開いて、アプリケーションが Cloud Run 上で正常に動作していることを確認します。
まとめ
Google Cloud Run を使えば、TypeScript プロジェクトを簡単にデプロイすることができます。さらに、--source オプションを使えば、手軽にデプロイを行うことができ、従来の Dockerfile を使用した手動ビルドによるデプロイと使い分けることで、柔軟かつ効率的な開発フローを実現できます。