Skip to content

Events

topology.yml

name: TOPOLOGY
events:
EventName:
producer: String or Array
producers: Array
filter: <filter-expression>
pattern: <JSON Event Pattern>
function: <function1>
functions:
- <function1>
- <function2>
mutation: <mutationName>
state: <state-or-stepfn-fqn>
channel: <room1>
rule_name: <static-rule-name>
doc_only: <bool>

tc provides pre-defined triggers

events:
MyEvent:
producer: S3/PUT_OBJECT
filter: '{"key": "foo/bar.png"}'
function: function1

The following are available triggers for AWS provider

ResourceTriggerDescription
CognitoPRE_SIGNUP
CognitoPOST_CONFIRMATION
CognitoPRE_AUTHENTICATION
CognitoPOST_AUTHENTICATION
CognitoCREATE_AUTH_CHALLENGE
CognitoVERIFY_AUTH_CHALLENGE_RESPONSE
S3PUT_OBJECT
S3DELETE_OBJECT
DYNAMODBPUT_ITEM
events:
MyRawEvent:
filter: '{"detail_type": ["FooBar"]}'
function: '{{namespace}}_foo_{{sandbox}}'
MyFilterEvent:
producer: default
filter: '{"metadata": {"type": ["foo"]}}'
function: '{{namespace}}_foo_{{sandbox}}'
MyAbstractEvent:
producer: default
function: '{{namespace}}_foo_{{sandbox}}'

tc compiles JSON path filters to rules.

If we have more complex patterns that can’t fit into basic producer/filter keys, we can specify a JSON blob containing the pattern

events:
MyEvent:
pattern: '{"detail-type": ["foo"], "source": ["aws.s3"]}'
function: foo

Events can be composed with other entities. For example:

events:
ApiEvent:
function: function1
events:
StateEvent:
state: state-fqn
MyOtherStateEvent:
state: '{{namespace}}_{{sandbox}}'

To invoke an event with just the payload data ($.detail), do:

tc invoke -s SANDBOX -e PROFILE -c events/MyEvent -p payload.json
# or from s3
tc invoke -s SANDBOX -e PROFILE -c events/MyEvent -p s3://bucket/payload.json

To generate a visual flow:

Terminal window
tc compile -c events -f digraph | dot