Search code examples
aws-lambdaaws-event-bridge

Multiple EventBridge events called from a single Lambda Function(python)


I am trying to create a lambda function in python that can execute some queries in Redshift depending the creation or deletion of parameters in the parameter store.

I have the following eventbridge patterns

 {
  "source": [
    "aws.ssm"
  ],
  "detail-type": [
    "Parameter Store Change"
  ],
  "detail": {
    "name": [{
      "prefix": "/Users/"
    }],
    "operation": [
      "Create"
    ]
  }
}

And the one for deletion:

     {
  "source": [
    "aws.ssm"
  ],
  "detail-type": [
    "Parameter Store Change"
  ],
  "detail": {
    "name": [{
      "prefix": "/Users"
    }],
    "operation": [
      "Delete"
    ]
  }
}

So basically I want that if a create a parameter: /users/user1 It will trigger my function and execute the user creation

if I delete parameter It will trigger the lambda function and execute the user deletion

I have this sample code in my lambda:

def insert(event, context):
    
    action = client.execute_statement(ClusterIdentifier =cluster, Database=database, DbUser=dbuser ,Sql= "create user user1 password 'blablabla';")

def delete(event, context):
    
    action = client.execute_statement(ClusterIdentifier =cluster, Database=database, DbUser=dbuser ,Sql= "drop user user1;")
    

def lambda_handler(event, context):
    if event['EventType'] == 'insert':
    insert(event, context)
  elif event['EventType'] == 'delete':
    delete(event, context)
    print(action)

Can I call this two event patterns from one lambda code? something like the code above? or should I create two different lambdas one for creation and another one for deletion? any recommendation? Thanks a lot


Solution

  • Yes, you can do with one Lambda function for multiple patterns.

    To invoke EventBridge, just set multiple patterns in [].

    ...
        "operation": [
          "Create",
          "Delete"
        ]
    ...
    

    And in the Lambda function, check which pattern is sent, like this.

    def lambda_handler(event, context):
        
        if event["detail"]["operation"] == ...