DEV Community

Cover image for Lambda Scheduling & Event Filtering with EventBridge using Serverless Framework

Lambda Scheduling & Event Filtering with EventBridge using Serverless Framework

Lambda Scheduling & Event Filtering with EventBridge using Serverless Framework

Application Stack:
  • Serverless Framework
  • AWS EventBridge
  • AWS Lambda
  • NodeJs

In this post, We will take a look at a use-case that allows us to schedule lambda function call and custom event pattern matching based lambda function call with EventBridge using Serverless Framework.

AWS Architecture:

AWS Architecture
Above is an AWS Serverless architecture diagram showing EventBridge calling Lambda, using scheduled rules, and filtering lambda calls using custom even pattern matching rules.

1. Install Serverless Framework

npm install -g serverless
Enter fullscreen mode Exit fullscreen mode

2. Create basic NodeJs type template project using Serverless Framework

serverless create --template aws-nodejs
Enter fullscreen mode Exit fullscreen mode

By default it will generate a folder structure like this:

  • handler.js
  • serverless.yml

Default serverless.yml will have below IaC code:

service: default-aws-nodejs
frameworkVersion: '2'
provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: 20201221

functions:
  hello:
    handler: handler.hello
Enter fullscreen mode Exit fullscreen mode

Default handler.js will have below NodeJs code:

'use strict';

module.exports.hello = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'Go Serverless v1.0! Your function executed successfully!',
        input: event,
      },
      null,
      2
    ),
  };
};

Enter fullscreen mode Exit fullscreen mode

3. Modify serverless.yml Infrastructure as code to provision needful Lambda functions with EventBridge as Event Source

service: sls-eventbridge
frameworkVersion: '2'
provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: 20201221
  stage: dev
  region: ap-south-1

functions:
  scheduledService:
    handler: handler.scheduledService
    events:
      - schedule: rate(1 minute)

  invoiceService:
    handler: handler.invoiceService
    events:
      - cloudwatchEvent:
          event:            
            detail:
              operation:
                - invoice-service

  rewardService:
    handler: handler.rewardService
    events:
      - cloudwatchEvent:
          event:            
            detail:
              operation:
                - reward-service
Enter fullscreen mode Exit fullscreen mode

4. Modify handler.js with below sample demo code

'use strict';

const scheduledService = async (event) => {
  console.log(event);
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'scheduledService lambda function call through EventBridge scheduling rule!',
        input: event,
      },
      null,
      2
    ),
  };
};

const invoiceService = async (event) => {
  console.log(event);
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'invoiceService lambda function call through EventBridge custom pattern matching!',
        input: event,
      },
      null,
      2
    ),
  };
};

const rewardService = async (event) => {
  console.log(event);
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'rewardService lambda function call through EventBridge custom pattern matching!',
        input: event,
      },
      null,
      2
    ),
  };
};

module.exports = {
  scheduledService,
  invoiceService,
  rewardService
};
Enter fullscreen mode Exit fullscreen mode

5. Create AWS IAM user with programmatic access and give needful permission that allows Serverless Framework to provision resources

The Serverless Framework needs access to your cloud provider account so that it can create and manage resources on your behalf.

During Creating AWS IAM user copy API Key & Secret.

6. Configure AWS Credentials for Serverless Framework Deployment

serverless config credentials --provider aws --key xxxxx --secret xxxxx
Enter fullscreen mode Exit fullscreen mode

7. Deploy using Serverless Framework

serverless deploy
Enter fullscreen mode Exit fullscreen mode
> serverless deploy
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Service files not changed. Skipping deployment...
Service Information
service: sls-eventbridge
stage: dev
region: ap-south-1
stack: sls-eventbridge-dev
resources: 18
api keys:
  None
endpoints:
  None
functions:
  scheduledService: sls-eventbridge-dev-scheduledService
  invoiceService: sls-eventbridge-dev-invoiceService
  rewardService: sls-eventbridge-dev-rewardService
layers:
  None
Enter fullscreen mode Exit fullscreen mode

8. Amazon EventBridge and AWS Lambda Screenshots

AWS Lambda Functions List

AWS Lambda Functions List

AWS Lambda Functions Event Source Configuration

AWS Lambda Functions List

Amazon EventBridge Default Bus Scheduling Rules

Amazon EventBridge Default Bus Rules

Amazon EventBridge Default Bus Custom Event Pattern Rule

Amazon EventBridge Default Bus Custom Event Pattern Rule

Amazon EventBridge Default Bus Custom Event Pattern Rule

Amazon EventBridge Default Bus Custom Event Pattern Rule

9. Remove already provisioned resources

serverless remove
Enter fullscreen mode Exit fullscreen mode

Relevant Resources Link

Top comments (0)