Go サービスを GCP Cloud Run にデプロイするには、Dockerfile のセットアップや環境変数の構成など、いくつかの手順が必要です。
このガイドでは、プロセスを順を追って説明します。
まだアカウントを作成していない場合は、GCP アカウントの作成に移動して始めます。
GCP コンソールに移動し、新しいプロジェクトを作成します。
デプロイメント用のプロジェクト ID をメモします。
Go アプリがローカルで実行できることを確認し、Dockerfile をセットアップします。
cmd/main.go
// cmd/main.go func main() { flag.Parse() a := app.Application{} if err := a.LoadConfigurations(); err != nil { log.Fatalf("Failed to load configurations: %v", err) } if err := runtime.Start(&a); err != nil { log.Fatalf("Failed to start the application: %v", err) } }
runtime/base.go
func Start(a *app.Application) error { router := gin.New() router.Use(cors.New(md.CORSMiddleware())) api.SetCache(router, a.RedisClient) api.SetRoutes(router, a.FireClient, a.FireAuth, a.RedisClient) err := router.Run(":" + a.ListenPort) log.Printf("Starting server on port: %s", a.ListenPort) if err != nil { return err } return nil }
Dockerfile を作成する
# Use the official Go image as the base image FROM golang:1.18 WORKDIR /app # Copy the Go module files COPY go.mod go.sum ./ RUN go mod download # Copy the rest of the application code COPY . . RUN go build -o main ./cmd/main.go CMD ["./main"]
環境変数を設定する
シェル スクリプトを使用して GCP の環境変数の設定を自動化します
として env-variables.sh.
// env-variables.sh #!/bin/bash # Environment variables export PROJECT_ID=recepies-6e7c0 export REGION=europe-west1 export REDIS_URL="rediss://default:AVrvA....-lemur-23279.u....:6379" export FIREBASE_ACCOUNT_KEY="/app/config/account_key.json" export CLIENT_URL="https://.....vercel.app/"
deploy-with-yaml.sh としてのデプロイメント スクリプト。
#!/bin/bash source env-variables.sh #Comment if correctly deployed docker build -t gcr.io/$PROJECT_ID/recipe-server:latest . docker push gcr.io/$PROJECT_ID/recipe-server:latest #Uncomment if json needs to be added to GCP # gcloud secrets create firebase-account-key --data-file=/mnt/c/own_dev/RecipesApp/server/config/account_key.json --project=recepies-6e7c0 #Add permission IAM gcloud projects add-iam-policy-binding recepies-6e7c0 \ --member="serviceAccount:service-988443547488@serverless-robot-prod.iam.gserviceaccount.com" \ --role="roles/artifactregistry.reader" gcloud run deploy recipe-service \ --image gcr.io/$PROJECT_ID/recipe-server:latest \ --region $REGION \ --platform managed \ --set-env-vars REDIS_URL=$REDIS_URL,CLIENT_URL=$CLIENT_URL,FIREBASE_ACCOUNT_KEY=$FIREBASE_ACCOUNT_KEY
展開スクリプトを実行します
環境変数.sh
必要に応じてすべての設定が完了すると、イメージがビルドされ、GCP プロジェクトの Artifact Registry にプッシュされていることがわかります。結局、これを手に入れました。
a9099c3159f5: Layer already exists latest: digest: sha256:8c98063cd5b383df0b444c5747bb729ffd17014d42b049526b8760a4b09e5df1 size: 2846 Deploying container to Cloud Run service [recipe-service] in project [recepies-6e7c0] region [europe-west1] ✓ Deploying... Done. ✓ Creating Revision... ✓ Routing traffic... Done. Service [recipe-service] revision [recipe-service-00024-5mh] has been deployed and is serving 100 percent of traffic. Service URL: https://recipe-service-819621241045.europe-west1.run.app
何度も遭遇した標準エラーがありますか?
Deploying container to Cloud Run service [recipe-service] in project [recepies-6e7c0] region [europe-west1] X Deploying… - Creating Revision… . Routing traffic… Deployment failed ERROR: (gcloud.run.deploy) Revision 'recipe-service-00005-b6h' is not ready and cannot serve traffic. Google Cloud Run Service Agent service-819621241045@serverless-robot-prod.iam.gserviceaccount.com must have permission to read the image, gcr.io/loyal-venture-436807-p7/recipe-server:latest. Ensure that the provided container image URL is correct and that the above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that the image is from project [loyal-venture-436807-p7], which is not the same as this project [recepies-6e7c0]. Permission must be granted to the Google Cloud Run Service Agent service-819621241045@serverless-robot-prod.iam.gserviceaccount.com from this project. See https://cloud.google.com/run/docs/deploying#other-projects
多くの場合、PORT=8080 を設定できなかったと表示されますが、主な問題は、環境変数が設定されていない、または私の場合は firebase account_key.json がデプロイ用に誤って設定されているなど、別の何かです。
すべてが設定されたら、接続をテストしてリクエストを実行できます。
Vercel にフロントエンドをデプロイしました。以下に Cloud Run ログが表示されます
Go サービスの GCP Cloud Run へのデプロイは、いくつかの主要な構成と自動スクリプトを使用して効率化できます。
権限の問題や環境変数の誤りなど、一般的なエラーが発生する可能性がありますが、Cloud Run ログを使用してエラーをトラブルシューティングする方法を理解することで、スムーズなデプロイが保証されます。
私のリポジトリはここにあります。
以上がGo サービスを GCP Cloud Run にデプロイする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。