Lambda event filter dynamodb TTL deletions

0

I'm trying to trigger a Lambda from a DynamodDB stream, but only if the change is not a deletion due to TTL. I know that TTL deletes have 'userIdentity': {'principalId': 'dynamodb.amazonaws.com', 'type': 'Service'} in their events, while other events do not have useridentity at all, so I tried this filter: {"userIdentity": [ { "exists": false } ]}. This passes validation, but all events trigger the Lambda, including TTL deletes.

Any idea how I can filter the TTLs out? The reason I want to do that is I have a phase where no changes to the database should be made, and I'd like to verify that the Lambda is not triggered. Therefore I want to block TTL deletions before the Lambda invocation.

profile picture
已提问 1 年前420 查看次数
1 回答
-1

To filter out TTL deletions, you can't directly set up a filter on the event source mapping in Lambda. Instead, you can add a conditional check within your Lambda function to filter out TTL deletions based on the userIdentity field in the event record.

Here's an example of how you can modify your Lambda function to filter out TTL deletions:

import json

def lambda_handler(event, context):
    for record in event['Records']:
        if ('userIdentity' not in record['dynamodb']['NewImage']) or (record['dynamodb']['NewImage']['userIdentity']['principalId'] != 'dynamodb.amazonaws.com'):
            # Process the non-TTL deletion event
            print("Non-TTL event:", json.dumps(record, indent=2))

This code snippet checks each record in the event to see if the userIdentity field is present and if its principalId is equal to 'dynamodb.amazonaws.com'. If the condition is false, it processes the non-TTL event. By doing so, your Lambda function only processes events that are not TTL deletions.

profile picture
专家
已回答 1 年前
profile picture
专家
已审核 2 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则