DEV Community

Cover image for Deploying FastAPI app with Google Cloud Run
Nari
Nari

Posted on • Edited on

109 1

Deploying FastAPI app with Google Cloud Run

Introduction

This post explains how to deploy a FastAPI app using Google Cloud Run.

Prerequisites

  • Google Cloud account
  • gcloud CLI
  • Docker
  • Python

Project setup

Create a FastAPI app using Poetry.

pip install poetry
poetry new sample
cd sample
mv sample app
cd app
poetry add fastapi
poetry add 'uvicorn[standard]'
Enter fullscreen mode Exit fullscreen mode

Create app/main.py

touch app/main.py
Enter fullscreen mode Exit fullscreen mode

Edit main.py as follows

# main.py

from fastapi import FastAPI

app = FastAPI()


@app.get("/", tags=["root"])
async def root():
    return {"message": "Hello World"}
Enter fullscreen mode Exit fullscreen mode

Run it in uvicorn

poetry shell
uvicorn app.main:app --reload
Enter fullscreen mode Exit fullscreen mode

Google Cloud Run setup

If you have already installed gcloud CLI, update it as follows.

gcloud components update
Enter fullscreen mode Exit fullscreen mode

Connect the gcloud CLI to your GCP account.

gcloud auth login
Enter fullscreen mode Exit fullscreen mode

Set up your project ID

gcloud config set project PROJECT_ID
Enter fullscreen mode Exit fullscreen mode

Region settings

gcloud config set run/region REGION
Enter fullscreen mode Exit fullscreen mode

Docker settings

gcloud auth configure-docker
Enter fullscreen mode Exit fullscreen mode

Prepare Dockerfile in the same hierarchy as the app directory.

FROM python:3.11.3
ENV PYTHONUNBUFFERED True

RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip install --no-cache-dir -r  requirements.txt

ENV APP_HOME /root
WORKDIR $APP_HOME
COPY /app $APP_HOME/app

EXPOSE 8080
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]

Enter fullscreen mode Exit fullscreen mode

Prepare requirements.txt file for Dockerfile.
(In this case, use requirements.txt in the Dockerfile.)

poetry export -f requirements.txt --output requirements.txt
Enter fullscreen mode Exit fullscreen mode

Now that it is ready, deploy to Cloud Run.

gcloud run deploy sample --port 8080 --source .
Enter fullscreen mode Exit fullscreen mode

If successful, it will be created with the name sample.
A URL will be created, so check the operation.


Conclusion

With the above, you can now deploy your FastAPI app to Google Cloud Run.

Although the details are omitted here, it would be a good idea to actually add CORS and headers in middleware and implement an authentication function such as Firebase Authentication.

Note: The path to import must be specified from the app directory.

Example: app/lib/test.py

# app/main.py
from app.lib import test
Enter fullscreen mode Exit fullscreen mode

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more