Cookiecutter template for Google Cloud Run
While working on a couple of projects that would be deployed on Google Cloud Run, I realized that a couple of them tend to have some sort of similar structure. Due to the number of repositories I would typically handle on a personal basis as well as the amount of context switch I would need to move between projects; it would ideal that all of such projects are automated as much as possible.
This is a small list of features that would great to be templatized across projects:
- Cloud Build templates
- Include the handling of secrets via Google KMS if necessary.
- Handle cases between http based vs msg based Cloud Run deployments (they have slight differences which can easily trip you while you are rushing out a project)
- Handle little issues when dealing with Cloud Build; Previously, I found out that Cloud Build would generate a
.gcloudignorefile from a
.gitignoreif it doesn’t exist. Let’s say you were to deploy it to Google Cloud Functions and you added
.gitignore. That would mean that
*.jsonwould be added to
.gcloudignorecausing all json file to ignored (even though the files could have been decoded/generated during cloud build steps)
- Convenience commands
- Make commands to test locally
- Make commands to fire pubsub messages
- Make commands to alter topics/subscriptions
- Able to templatize conveniently without resorting to using git hacks etc or libs. (Previous methods involved relying on git providing to set one of the projects that you own as a template. Gitlab used to be able to allow to do this but that suddenly became a paid feature - a painful lesson indeed)
From above, it seems that creating a template would be nice. And in order to aid with this, there is a tool called
cookiecutter. Here is a link to the project: https://github.com/cookiecutter/cookiecutter
This is a template that can be generated via
To use the tool, one can run the following after installing cookiecutter on your computer:
It is a prompt based cli tool; it would provide options that you can alter accordingly. This is an example of what it would like when you run it now:
cookiecutter https://github.com/hairizuanbinnoorazman/cookiecutter-cloud-run-go You've downloaded /Users/hairizuannoorazman/.cookiecutters/cookiecutter-cloud-run-go before. Is it okay to delete and re-download it? [yes]: no Do you want to re-use the existing version? [yes]: yes golang_mod_name [github.com/sample/sample]: mod_name [sample]: app_name [sample]: Select type: 1 - http 2 - msg Choose from 1, 2 :
There might be more options in the future as more features would be added to this template to support more complex cases.