The EventBridge makes it possible to connect applications using data from external sources (e.g. own applications, SaaS) or AWS services. The eventBridge
event types helps setting up AWS Lambda functions to react to events coming in via the EventBridge.
Note: Prior to 2.27.0
version of the Framework, eventBridge
resources were provisioned with Custom Resources. With 2.27.0
an optional support for native CloudFormation was introduced and can be turned on by setting provider.eventBridge.useCloudFormation
property to true
. It is recommended to migrate to native CloudFormation as it will become a default with next major version. It also adds the ability to define eventBus
with CF intrinsic functions as values.
functions:
myFunction:
handler: index.handler
events:
- eventBridge:
schedule: rate(10 minutes)
input:
key1: value1
Note: eventBridge
events are enabled by default. Use enabled: false
to disable the rule.
functions:
myFunction:
handler: index.handler
events:
- eventBridge:
enabled: false
schedule: rate(10 minutes)
input:
key1: value1
functions:
myFunction:
handler: index.handler
events:
- eventBridge:
pattern:
source:
- aws.cloudformation
detail-type:
- AWS API Call via CloudTrail
detail:
eventSource:
- cloudformation.amazonaws.com
The eventBridge
event source will use the default
event bus (the one AWS uses internally) when none is explicitly specified.
The Serverless Framework will create the eventBus
for your if you provide a name for it. Otherwise, if literal arn
or reference to an existing event bus name via CF intrinsic function is provided, Framework will attach to it.
functions:
myFunction:
handler: index.handler
events:
- eventBridge:
eventBus: custom-saas-events
pattern:
source:
- saas.external
If you want to reuse an existing event bus, you can define it with literal arn
or with a reference to an existing event bus name via CF intrinsic functions. Referencing via intrinsic functions is available only if you use native CloudFormation support with provider.eventBridge.useCloudFormation: true
setting:
provider:
eventBridge:
useCloudFormation: true
Using literal arn
:
- eventBridge:
eventBus: arn:aws:events:us-east-1:12345:event-bus/custom-private-events
pattern:
source:
- custom.private
inputTransformer:
inputPathsMap:
eventTime: '$.time'
inputTemplate: '{"time": <eventTime>, "key1": "value1"}'
Using reference to event bus' name via GetAtt
CF intrinsic function:
- eventBridge:
eventBus: !GetAtt EventBusResource.Name
pattern:
source:
- custom.private
inputTransformer:
inputPathsMap:
eventTime: '$.time'
inputTemplate: '{"time": <eventTime>, "key1": "value1"}'
Note: It is not possible to reference event bus ARN with CF intrinsic function as it makes it impossible for Serverless Framework to construct valid SourceArn
for AWS::Lambda::Permission
resource.
Using reference to event bus' name via Ref
CF intrinsic functions:
- eventBridge:
eventBus: !Ref EventBusResource
pattern:
source:
- custom.private
inputTransformer:
inputPathsMap:
eventTime: '$.time'
inputTemplate: '{"time": <eventTime>, "key1": "value1"}'
You can specify different input types which will produce different input values ​​for the Lambda function.
functions:
myFunction:
handler: index.handler
events:
- eventBridge:
pattern:
source:
- 'aws.ec2'
detail-type:
- 'EC2 Instance State-change Notification'
detail:
state:
- pending
input:
key1: value1
key2: value2
stageParams:
stage: dev
- eventBridge:
pattern:
source:
- 'aws.ec2'
detail-type:
- 'EC2 Instance State-change Notification'
detail:
state:
- pending
inputPath: '$.stageVariables'
- eventBridge:
pattern:
source:
- 'aws.ec2'
detail-type:
- 'EC2 Instance State-change Notification'
detail:
state:
- pending
inputTransformer:
inputPathsMap:
eventTime: '$.time'
inputTemplate: '{"time": <eventTime>, "key1": "value1"}'
DeadLetterConfig is not available for custom resources, only for native CloudFormation.
functions:
myFunction:
handler: index.handler
events:
- eventBridge:
eventBus: custom-saas-events
pattern:
source:
- saas.external
deadLetterConfig:
targetArn:
Fn::GetAtt:
- QueueName
- Arn
RetryPolicy is not available for custom resources, only for native CloudFormation.
functions:
myFunction:
handler: index.handler
events:
- eventBridge:
eventBus: custom-saas-events
pattern:
source:
- saas.external
deadLetterConfig:
Fn::GetAtt:
- QueueName
- Arn
retryPolicy:
maximumEventAge: 3600
maximumRetryAttempts: 3
Product