This guide will show you how to deploy the following example function to Cloud Run:
def hello(request):
return "Hello world!"This guide assumes your Python function is defined in a main.py file and dependencies are specified in requirements.txt file.
To run your function in a container, create a Dockerfile with the following contents:
# Use the official Python image.
# https://hub.docker.com/_/python
FROM python:3.7-slim
# Copy local code to the container image.
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . .
# Install production dependencies.
RUN pip install gunicorn functions-framework
RUN pip install -r requirements.txt
# Run the web service on container startup. Here we use the gunicorn
# webserver, with one worker process and 8 threads.
# For environments with multiple CPU cores, increase the number of workers
# to be equal to the cores available.
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 -e FUNCTION_TARGET=hello functions_framework:appStart the container locally by running docker build and docker run:
docker build -t helloworld . && docker run --rm -p 8080:8080 -e PORT=8080 helloworldSend requests to this function using curl from another terminal window:
curl localhost:8080
# Output: Hello world!To use Docker with gcloud, configure the Docker credential helper:
gcloud auth configure-dockerYou can deploy your containerized function to Cloud Run by following the Cloud Run quickstart.
Use the docker and gcloud CLIs to build and deploy a container to Cloud Run, replacing [PROJECT-ID] with the project id and helloworld with a different image name if necessary:
docker build -t gcr.io/[PROJECT-ID]/helloworld .
docker push gcr.io/[PROJECT-ID]/helloworld
gcloud run deploy helloworld --image gcr.io/[PROJECT-ID]/helloworld --region us-central1If you want even more control over the environment, you can deploy your container image to Cloud Run on GKE. With Cloud Run on GKE, you can run your function on a GKE cluster, which gives you additional control over the environment (including use of GPU-based instances, longer timeouts and more).