Serverless Manifest
Generate the Scaffolding
To ease user on-boarding tm
has a currently experimental feature to generate a scaffolding. To generate the scaffolding for a simple Python function do:
tm generate python
Currently it creates a directory named python
, this will soon be customizable. Check the scaffolding:
tree python
python
├── handler.py
└── serverless.yaml
Deploy the Function
To deploy the function you use a single command:
tm deploy -f python --wait
The --wait
allows you to wait till all resources enter ready state. Shortly thereafter you will be presented with a URL for your function (i.e a Knative service):
$ tm deploy -f python --wait
Uploading "python" to demo-service-python-function-mcsgp-pod-6dfb31
Waiting for taskrun "demo-service-python-function-mcsgp" ready state
Creating "demo-service-python-function" service
Waiting for service "demo-service-python-function" ready state
Service demo-service-python-function URL: http://demo-service-python-function-sebgoa.k.triggermesh.io
You will be able to call it easily:
$ curl http://demo-service-python-function-sebgoa.k.triggermesh.io
{"message": "Hello, the current time is 07:51:46.853233"}
How Does This Work
While this seems straightforward there is a bit of magic being the scene. That's because the Python function being deployed does not have any invoker, it needs to be wrapped into a function runtime.
At TriggerMesh we have developed the Knative Lambda Runtime (https://github.com/triggermesh/knative-lambda-runtime) which can deploy an AWS Lambda function to a Knative cluster. We discussed it at length on the AWS blog.
With the scaffolding in place, the serverless.yaml
manifest makes a reference to the KLR runtime:
service: demo-service
description: Sample knative service
provider:
name: triggermesh
registry: knative.registry.svc.cluster.local
functions:
python-function:
source: handler.py
runtime: https://raw.githubusercontent.com/triggermesh/runtime-build-tasks/master/aws-lambda/python37-runtime.yaml
buildargs:
- HANDLER=handler.endpoint
environment:
EVENT: API_GATEWAY
In this runtime you will see a Task
object that comes from the Tekton project. Hence in one command tm deploy
we create a Task and execute it to build a container image that injects the function into our KLR AWS compatible runtime. This allows us to take an existing lambda function and deploy it to Knative in a Serverless framework manner.
Check the runtime URL to see how Tekton comes into play.
Tear Everything Down
Deleting everything is straightforward:
$ tm delete -f python
Deleting demo-service-python-function
We hope you enjoyed it, if you have any feedback on the use of tm
or Knative and Tekton don't hesitate to leave us an issue or contact us at info@triggermesh.com