Domovoi is an extension to AWS Labs Chalice to handle AWS Lambda event sources other than HTTP requests through API Gateway. Domovoi lets you easily configure and deploy a Lambda function to run on a schedule or in response to an SNS push notification:
import json, boto3, domovoi
app = domovoi.Domovoi()
@app.scheduled_function("cron(0 18 ? * MON-FRI *)")
def foo(event, context):
context.log("foo invoked at 06:00pm (UTC) every Mon-Fri")
return dict(result=True)
@app.scheduled_function("rate(1 minute)")
def bar(event, context):
context.log("bar invoked once a minute")
boto3.resource("sns").create_topic(Name="bartender").publish(Message=json.dumps({"beer": 1}))
return dict(result="Work work work")
@app.sns_topic_subscriber("bartender")
def tend(event, context):
message = json.loads(event["Records"][0]["Sns"]["Message"])
context.log(dict(beer="Quadrupel", quantity=message["beer"]))
@app.cloudwatch_event_handler(source=["aws.ecs"])
def monitor_ecs_events(event, context):
message = json.loads(event["Records"][0]["Sns"]["Message"])
context.log("Got an event from ECS: {}".format(message))
@app.s3_event_handler(bucket="myS3bucket", events=["s3:ObjectCreated:*"], prefix="foo", suffix=".bar")
def monitor_s3(event, context):
message = json.loads(event["Records"][0]["Sns"]["Message"])
context.log("Got an event from S3: {}".format(message))
pip install domovoi
First-time setup:
chalice new-project
Replace the Chalice app entry point (in app.py
) with the Domovoi app entry point as above, then deploy the event handlers:
domovoi deploy
To stage files into the deployment package, use a domovoilib
directory in your project where you would use chalicelib
in Chalice. For example, my_project/domovoilib/rds_cert.pem
becomes /var/task/domovoilib/rds_cert.pem
with your function executing in /var/task/app.py
with /var/task
as the working directory. See the Chalice docs for more information on how to set up Chalice configuration.
See http://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html for an overview of event sources that can be used to trigger Lambda functions. Domovoi supports the following event sources:
- SNS subscriptions
- CloudWatch Events rule targets, including CloudWatch Scheduled Events (see http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html for a list of event types supported by CloudWatch Events)
- S3 events
TODO:
- CloudWatch Logs filter subscriptions
- DynamoDB events
- SES (email) events
Please report bugs, issues, feature requests, etc. on GitHub.
Licensed under the terms of the Apache License, Version 2.0.