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
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"] == ...