This guide explains how to deploy the FastAPI application to Google Cloud Run.
- Google Cloud SDK installed and configured
- A Google Cloud project with billing enabled
- Cloud Run API enabled
- Container Registry API enabled
- Set your project ID:
export PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID- Enable required APIs:
gcloud services enable run.googleapis.com
gcloud services enable containerregistry.googleapis.com
gcloud services enable cloudbuild.googleapis.com- Create a Cloud SQL instance:
gcloud sql instances create postgres-instance \
--database-version=POSTGRES_15 \
--tier=db-f1-micro \
--region=us-central1- Create a database:
gcloud sql databases create dbname --instance=postgres-instance- Create a user:
gcloud sql users create dbuser --instance=postgres-instance --password=your-password- Get the connection name:
gcloud sql instances describe postgres-instance --format="value(connectionName)"- Update
cloudbuild.yamlwith the connection name:
- '--add-cloudsql-instances'
- 'PROJECT_ID:REGION:INSTANCE_NAME'For development, you can use a local PostgreSQL instance or a managed service.
- Create a
.envfile for local development:
cp env.example .env- For Cloud Run, set environment variables in the deployment:
gcloud run services update self-improving-engine-api \
--set-env-vars="DATABASE_URL=postgresql://user:password@host:5432/dbname"chmod +x deploy.sh
./deploy.shgcloud builds submit --config=cloudbuild.yaml \
--substitutions=_SERVICE_NAME=self-improving-engine-api,_REGION=us-central1- Build the Docker image:
docker build -t gcr.io/$PROJECT_ID/self-improving-engine-api .- Push to Container Registry:
docker push gcr.io/$PROJECT_ID/self-improving-engine-api- Deploy to Cloud Run:
gcloud run deploy self-improving-engine-api \
--image gcr.io/$PROJECT_ID/self-improving-engine-api \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--port 8080gcloud run services update self-improving-engine-api \
--region us-central1 \
--set-env-vars="DATABASE_URL=postgresql://user:pass@host:5432/db,DEBUG=False"gcloud run services logs read self-improving-engine-api --region us-central1Access the Cloud Run console:
https://console.cloud.google.com/run
- Check if Cloud SQL instance is running:
gcloud sql instances describe postgres-instance- Verify connection from Cloud Run:
gcloud run services describe self-improving-engine-api --region us-central1- Check Cloud Build logs:
gcloud builds list --limit=5
gcloud builds log <BUILD_ID>- Check container logs:
gcloud run services logs read self-improving-engine-api --region us-central1 --limit=50- Use Secret Manager for sensitive data:
echo -n "your-secret-value" | gcloud secrets create database-url --data-file=-- Grant Cloud Run access to secrets:
gcloud secrets add-iam-policy-binding database-url \
--member="serviceAccount:YOUR_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"- Update service to use secret:
gcloud run services update self-improving-engine-api \
--update-secrets="DATABASE_URL=database-url:latest"- Use
min-instances: 0for development to avoid charges when idle - Set appropriate
max-instancesbased on expected traffic - Consider using Cloud SQL tier appropriate for your workload
- Monitor usage in Cloud Console
If needed, rollback to a previous revision:
gcloud run services update-traffic self-improving-engine-api \
--region us-central1 \
--to-revisions=REVISION_NAME=100