This repository contains the Bazel (Starlark) rules to build Python 3 and deploy to Google App Engine and Google Cloud Functions.
There is a GAE app example and a GCF example in the examples
directory.
Put this in the BUILD
file:
py_binary( name = "app", srcs = [ "app.py", ], ) py_app_engine( name = "app_deploy", src = ":app", descriptor = "app.yaml", entry = "app", requirements = [ "flask", ], )
and run:
examples$ bazel run //app_engine:app_deploy
Put this in the BUILD
file:
py_binary( name = "hello", srcs = [ "hello.py", ], ) py_cloud_function( name = "hello_deploy", src = ":hello", entry = "hello", )
and run:
examples$ bazel run //function:hello_deploy
In the BUILD rule you can also specify:
- PyPI (pip) requirements
- either as a package list or pointing to a
requirements.txt
file - The GCP project name
- if you don't want to use the default one used by
gcloud
- Version (App Engine only)
- the version string of the GAE deployment
- Python Runtime (Cloud Functions only)
- the Python runtime to use (default: python37)
- Deploy name (Cloud Functions only)
- the name of the deployed function (in GCP) and also in the HTTP path
- Pub/Sub topic trigger (Cloud Functions only)
- if you want your function to be triggered by a Cloud Pub/Sub message
- GCS bucket trigger (Cloud Functions only)
- if you want your function to be triggered by events from a GCS bucket
- General event trigger (Cloud Functions only)
- if you want your function to be triggered by other event types
- Memory in MiB (Cloud Functions only)
- the default is 256 MiB but you can request more, up to 2,048 MiB
- Timeout in seconds (Cloud Functions only)
- the default is 60 s but you can request up to 540 s.
This solution depends on these commands being available:
- The Python 3 interpreter at
/usr/bin/python3
- The fish shell at
fish
- The Google Cloud SDK at
gcloud
Your Bazel workspace should be set to generate a ZIP package for py_binary
targets, by setting some parameters in the .bazelrc
file, like this.
bazel_for_gcloud_python
is released under the Apache 2.0 License.