· サーバーレスとアプリケーション開発 · 9 min read
Cloud Run: コンテナ化されたアプリケーションのデプロイ方法
Google Cloud Runを使用してコンテナ化されたアプリケーションを簡単にデプロイする方法を解説します。

Cloud Runとは
Google Cloud Runは、コンテナ化されたアプリケーションを簡単にデプロイし、スケーリングできるサーバーレスプラットフォームです。開発者はアプリケーションのコードに集中し、インフラストラクチャの管理から解放されます。
Cloud Runの主な特徴
Cloud Runは、開発者に多くの利点をもたらす革新的なサーバーレスプラットフォームです。以下に、その主な特徴を詳しく見ていきましょう。
1. フルマネージド:インフラストラクチャの管理が不要
Cloud Runは完全にマネージドされたプラットフォームであり、開発者はインフラストラクチャの管理から解放されます。
- サーバー管理不要: 物理サーバーやVMの設定、メンテナンスが不要
- 自動パッチ適用: セキュリティパッチや OS アップデートが自動的に適用
- 高可用性: Google の信頼性の高いインフラストラクチャ上で動作
2. 自動スケーリング:トラフィックに応じて自動的にスケール
Cloud Runは、アプリケーションへのトラフィックに応じて自動的にスケールします。
- ゼロからのスケーリング: トラフィックがない場合はインスタンス数をゼロまで減少
- 瞬時のスケールアップ: 突然のトラフィック増加にも迅速に対応
- 細かい粒度: 必要に応じて1/1000コンテナ単位でのスケーリングが可能
3. 柔軟性:任意のプログラミング言語やライブラリを使用可能
開発者は好みの言語やツールを使用してアプリケーションを構築できます。
- 言語非依存: Java, Python, Node.js, Go, Rubyなど、あらゆる言語をサポート
- カスタムランタイム: 特殊な要件にも対応可能
- 依存関係の自由: 必要なライブラリやフレームワークを自由に選択
4. コスト効率:使用した分のみ課金
Cloud Runの料金モデルは、実際の使用量に基づいています。
- 秒単位の課金: 使用した CPU 時間と メモリ時間に対してのみ課金
- 無料枠: 毎月一定量の無料利用枠を提供
- アイドル時のコストゼロ: トラフィックがない場合は料金が発生しない
CPUの割り当てモード
CPU always allocated (常時割り当て):
- コンテナインスタンスにCPUが常に割り当てられます。
- リクエストの有無に関わらず、インスタンスが稼働している間は常にCPU時間に対して課金されます。
- レイテンシーに敏感なアプリケーションに適しています。
CPU only allocated during request (リクエスト時のみ割り当て):
- リクエストを処理している時のみCPUが割り当てられます。
- アイドル時間中はCPU時間に対して課金されません。
- コスト効率が高く、トラフィックが変動するアプリケーションに適しています。
料金体系の詳細
リクエスト処理時間:
- CPUとメモリの使用量に基づいて課金
- 100ミリ秒単位で計算(最小課金単位は100ミリ秒)
- CPU always allocated: インスタンスの稼働時間全体に対して課金
- CPU only allocated during request: リクエスト処理時間のみに対して課金
リクエスト数:
- 100万リクエストごとに課金
- HTTPSリクエスト、WebSocketの接続、gRPCメソッドの呼び出しが対象
ネットワーク使用量:
- 送信データ量に応じて課金(受信データは無料)
無料枠:
- 毎月一定量のリソース使用が無料
- 例:2百万リクエスト、180,000 vCPU秒、360,000 GiB秒のメモリ使用
これらの特徴により、Cloud Runは開発者が効率的かつ柔軟にアプリケーションを展開できるプラットフォームとなっています。特に、インフラストラクチャ管理の負担を軽減しつつ、スケーラビリティとコスト効率を両立させる点が大きな魅力です。
デプロイの手順
1. コンテナイメージの準備
まず、アプリケーションをコンテナ化し、Container RegistryやArtifact Registryにプッシュします。
docker build -t gcr.io/[PROJECT-ID]/myapp:v1 .
docker push gcr.io/[PROJECT-ID]/myapp:v1
2. Cloud Runサービスの作成
Google Cloud Consoleまたはgcloudコマンドラインツールを使用して、Cloud Runサービスを作成します。
gcloud run deploy --image gcr.io/[PROJECT-ID]/myapp:v1 --platform managed
3. トラフィックの設定
Cloud Runでは、トラフィックの管理と制御に関する豊富な機能を提供しています。これにより、アプリケーションの可用性、セキュリティ、パフォーマンスを最適化できます。
トラフィックの割り当て
Cloud Runでは、複数のリビジョン(バージョン)間でトラフィックを柔軟に分割できます。これは、新機能の段階的なロールアウトやA/Bテストに非常に有効です。
- パーセンテージベースの割り当て: 異なるリビジョン間でトラフィックを任意の割合で分割できます。
- タグベースのルーティング: 特定のリビジョンにタグを付け、URLを介して直接アクセスすることが可能です。
設定例(gcloudコマンド):
gcloud run services update-traffic myservice --to-revisions=v1=50,v2=50
認証とセキュリティ
Cloud Runでは、サービスへのアクセス制御を細かく設定できます。
- 公開アクセス: 誰でもアクセス可能な公開サービスとして設定。
- 認証済みアクセス: Google Cloud IAMを使用して特定のユーザーやサービスアカウントのみにアクセスを許可。
- 内部アクセス: VPCネットワーク内からのみアクセス可能に設定。
設定例(gcloudコマンド):
gcloud run services set-iam-policy myservice policy.yaml
カスタムドメインの設定
独自のドメイン名をCloud Runサービスにマッピングすることができます。
- ドメインの所有権を確認
- SSLサーティフィケートの自動プロビジョニング
- カスタムドメインのマッピング
設定例(gcloudコマンド):
gcloud run domain-mappings create --service=myservice --domain=www.example.com
ネットワーキングオプション
Cloud Runは様々なネットワーキングオプションをサポートしています。
- インターネットからのアクセス: デフォルトの設定
- 内部トラフィックのみ: VPC内からのアクセスに制限
- Serverless VPC Access: VPC内のリソースへの安全なアクセス
- VPC Native: VPCネットワーク内でCloud Runを直接実行
これらの設定を適切に組み合わせることで、セキュアで柔軟性の高いアプリケーション展開が可能になります。トラフィックパターン、セキュリティ要件、グローバル展開の必要性などを考慮し、最適な設定を選択することが重要です。
より詳細な情報や設定方法については、Cloud Run のトラフィック管理ドキュメントを参照してください。
ベストプラクティス
- コンテナの最適化:軽量なベースイメージを使用
- ヘルスチェックの実装:アプリケーションの健全性を確保
- 環境変数の活用:設定の柔軟性を高める
- 自動デプロイの設定:CI/CDパイプラインの構築
まとめ
Cloud Runは、コンテナ化されたアプリケーションを簡単にデプロイし、管理するための強力なツールです。サーバーレスの利点を活かしつつ、コンテナの柔軟性を享受できます。
より詳細な情報や実践的な例については、以下の書籍をおすすめします:
これらの書籍は、Cloud Runを含むGoogle Cloudの様々なサービスについて深く学ぶことができます。