Close
logoStacktape docs



Event Buses

Overview

Event bus makes it easier to build event-driven applications at scale. It is fully serverless, there are no servers to provision, patch, and manage. It automatically scales based on the number of events ingested, and you pay only for events published into your event bus. Events can be published from your custom apps. It is also possible for event bus to receive events from SaaS partner applications and services.

When to use

Event buses make it easier to connect applications. In Stacktape you can seemlessly integrate a batch-job or a function with event bus, which gives you ability to trigger them as a reaction to published events.

Advantages

  • Pay-per-use - You are NOT paying for event-bus being deployed. You are only paying for the events published to the event-bus. AWS charges $1.00 per million events published.
  • Scaling - Event buses are able to digest thousands of events per second. Exact limits differ based on the region and can be found in AWS docs. Most of these limits are soft and can be increased, therefore there are virtually almost no limits.
  • Security - Event buses are robustly secured by default. Events can be published from your functions, batch-jobs or container-workloads.
  • Integrating with workloads - Thanks to event-bus integration, you can easily trigger your function or batchJob as a reaction to specific event.

Usage

➡️ Basic usage

EventBus API reference
eventSourceName
string
if you are creating a partner event bus, this specifies the partner event source that the new event bus will be matched with.

No properties need to be specified when creating event-bus.

resources:
myEventBus:
Type: 'event-bus'

➡️ Integrating with workloads

Events published into event-bus can easily trigger:

Events can be published from any workload: function, batch-job or container-workloads with sufficient rights granted.

Following example demonstrates infrastructure consisting of multiple resources:

  • myEventBus - event-bus, which is used as a bridge between myPublisherFunction and myConsumerBatchJob
  • myHttpApi - http-api-gateway, which is integrated with and triggers myPublisherFunction
  • myPublisherFunction - function, which receives events (requests) from myHttpApi and decides whether to publish BUDGET_ANALISYS event to myEventBus
  • myConsumerBatchJob - batch-job, which is integrated with myEventBus and is triggered by BUDGET_ANALISYS event (published by myPublisherFunction)

variables:
eventName: 'BUDGET_ANALYSIS'
resources:
myEventBus:
Type: 'event-bus'
myPublisherFunction:
Type: 'function'
Properties:
packageConfig:
filePath: 'lambdas/event-bus-publisher.ts'
environment:
- name: EVENT_NAME
value: $Var().eventName
- name: EVENT_BUS_NAME
value: "$GetParam('myEventBus', 'EventBus::Name')"
# granting access for function to publish events into myEventBus
accessControl:
allowAccessTo:
- 'myEventBus'
events:
- type: http-api-gateway
properties:
httpApiGatewayName: 'myHttpApi'
method: 'GET'
path: '/budget-analysis'
myConsumerBatchJob:
Type: batch-job
Properties:
container:
imageConfig:
filePath: 'batch-jobs/event-bus-consumer'
resources:
cpu: 1
memory: 200
# batch-job is triggered if myEventBus receives event that matches the specified eventPattern
events:
- type: event-bus
properties:
customEventBusArn: "$GetParam('myEventBus', 'EventBus::Arn')"
eventPattern:
detail:
EventName:
- '$Var().eventName'
myHttpApi:
Type: 'http-api-gateway'