Go言語

GoアプリをCloud Runへデプロイする手順とベストプラクティス

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

1. 前提条件と環境設定

1‑1. 必要なツール

ツール 用途
Google Cloud SDK(gcloud) GCP のリソース作成・操作
Go (≥ 1.22) アプリケーションのビルド
Docker (任意) Dockerfile をローカルでテストしたい場合

1‑2. Cloud SDK のインストール

ポイントgcloud init は実行しなくても構いませんが、初回は gcloud auth login で認証情報を取得してください。

1‑3. 認証とプロジェクトの作成

※ Organization が必須の場合
- --organization=ORG_ID を付与すると、組織配下にプロジェクトが作成されます。
- 組織が設定できない環境(個人アカウントやフォルダ単位で管理している場合)はオプションを省略してください。

続いて、作業対象のプロジェクトをデフォルトに設定します。

1‑4. 必要な API と課金の有効化

1‑5. 最小権限の IAM ロール付与

1‑6. Go 環境の確認

まとめ
上記手順で Cloud SDK・Go・GCP プロジェクト・必要 API が整い、以降はコード実装とデプロイに専念できます。


2. シンプルな Go Web アプリの実装とローカルテスト

2‑1. コード例

2‑2. ビルドとローカル実行

ポイント
- os.Getenv("PORT") が空の場合に 8080 をフォールバックさせることで、Cloud Run の自動ポート割り当てとローカルテストの両方に対応できます。


3. コンテナイメージの作成と Artifact Registry へのプッシュ

3‑1. Artifact Registry リポジトリの作成

IAM の付与(ビルダーがイメージを書き込めるように)
bash
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$(gcloud config get-value account)" \
--role="roles/artifactregistry.writer"

3‑2. Dockerfile(マルチステージビルド)

3‑3. Cloud Build でイメージをビルド & プッシュ

  • --tag の形式は Artifact Registry のリポジトリ URLasia-northeast1-docker.pkg.dev)に続けて PROJECT_ID/REPO/IMAGE:TAG とします。
  • $SHORT_SHA は Cloud Build が自動で設定する Git コミットの短縮ハッシュです。

Buildpacks を使う場合(Dockerfile 不要)
bash
gcloud builds submit \
--pack-image=gcr.io/buildpacks/builder:v1 \
--tag=asia-northeast1-docker.pkg.dev/$PROJECT_ID/go-repo/go-app:latest


4. Cloud Run へのデプロイと動作確認

4‑1. デプロイコマンド

オプション 説明
--image Artifact Registry に保存したコンテナイメージのフルパス
--region デプロイ先リージョン(東京は asia-northeast1 が最も近い)
--platform=managed フルマネージド Cloud Run を使用
--allow-unauthenticated 認証なしで全員がアクセスできるように設定
--port コンテナがリッスンするポート(コード側と合わせて 8080)

Organization が関係する場合
プロジェクト作成時に組織を指定したなら、デプロイ実行ユーザーの IAM に roles/run.adminroles/artifactregistry.reader が付与されているか確認してください。

4‑2. デプロイ完了後の URL 取得

4‑3. 動作確認

よくあるエラーと対策

エラーメッセージ 主な原因 推奨対処
Port not allowed コンテナが $PORT 以外でリッスンしている アプリ側で os.Getenv("PORT") を必ず使用
Permission denied (serviceAccount) デプロイ用サービスアカウントに Artifact Registry の read 権限がない roles/artifactregistry.reader を付与
Health check failed ヘルスチェックのパスが / 以外になっている --health-check-path=/ オプションで明示
Invalid region 指定リージョンが有効化されていない gcloud run regions list で利用可能リージョンを確認

5. CI/CD パイプライン構築とベストプラクティス

5‑1. GitHub リポジトリとの連携

  1. Cloud Build の設定画面 → 「GitHub」タブ → 対象リポジトリを接続(OAuth 認可が必要)。
  2. トリガー作成コマンド:

5‑2. cloudbuild.yaml のサンプル

5‑3. 最小権限サービスアカウントの作成とロール付与

5‑4. コスト最適化とスケーリング設定

設定項目 推奨値・備考
無料枠活用 Cloud Run の毎月 2 vCPU·1 GiB、Artifact Registry の 200 MiB は自動的に適用されます。
最大インスタンス数 --max-instances=5(過剰スケール防止)
CPU スロットリング --cpu-throttling=true(アイドル時の課金抑制)
リージョン選択 東京 (asia-northeast1) が最もレイテンシが低く、料金も安価です。

6. まとめ

  1. 環境構築
  2. gcloud と Go をインストールし、Organization がある場合は --organization オプションでプロジェクトを作成。
  3. 必要 API と課金を有効化し、最小権限の IAM ロールを付与。

  4. アプリ実装

  5. PORT 環境変数からポート番号を取得するだけのシンプルなハンドラでローカルテストが完了すれば、Cloud Run でもそのまま動作します。

  6. コンテナ化 & Registry

  7. マルチステージ Dockerfile または Buildpacks を用いてイメージをビルドし、gcloud builds submit で Artifact Registry にプッシュ。

  8. デプロイ

  9. gcloud run deploy に必要オプション(リージョン・イメージ・ポート・認証設定)を全て明示すれば数分で公開 URL が取得できます。

  10. CI/CD

  11. GitHub → Cloud Build のトリガーでコード変更時に自動ビルド・デプロイが走るパイプラインを構築し、最小権限のサービスアカウントで安全かつ低コストに運用できます。

以上の手順を踏めば、Go アプリケーションを Cloud Run にシームレスにデプロイでき、継続的なリリースも自動化可能です。ぜひご自身のプロジェクトでも試してみてください。


参考リンク


スポンサードリンク

-Go言語
-, , , , , ,