# SAM template for Lambda fn Event-filtering with DynamoDB Streams

AWSTemplateFormatVersion: 2010-09-09
Description: >-
  SAM template for Lambda fn Event-filtering with DynamoDB Streams

Transform:
- AWS::Serverless-2016-10-31

Resources:
  putItemTriggerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/handlers/
      Handler: dynamodb-insert-trigger.putItemTriggerHandler
      Runtime: nodejs14.x
      Architectures:
        - x86_64
      MemorySize: 128
      Timeout: 100
      Description: DynamoDB put event trigger.
      Policies:
        - DynamoDBCrudPolicy:
            TableName: !Ref DynamoDBTable
      Events:
        DynamoDBTable:
          Type: DynamoDB
          Properties:
            Stream:
              !GetAtt DynamoDBTable.StreamArn
            StartingPosition: TRIM_HORIZON
            BatchSize: 100
            FilterCriteria:
              Filters:
                  # Filter pattern to check only inserted action on DynamoDB
                - Pattern: '{"eventName": ["INSERT"]}'

  deleteItemTriggerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/handlers/
      Handler: dynamodb-delete-trigger.deleteItemTriggerHandler
      Runtime: nodejs14.x
      Architectures:
        - x86_64
      MemorySize: 128
      Timeout: 100
      Description: DynamoDB delete event trigger.
      Policies:
        - DynamoDBCrudPolicy:
            TableName: !Ref DynamoDBTable
      Events:
        DynamoDBTable:
          Type: DynamoDB
          Properties:
            Stream:
              !GetAtt DynamoDBTable.StreamArn
            StartingPosition: TRIM_HORIZON
            BatchSize: 100
            FilterCriteria:
              Filters:
                  # Filter pattern to check only deleted action on DynamoDB
                - Pattern: '{"eventName": ["REMOVE"]}'

  DynamoDBTable:
    Type: AWS::DynamoDB::Table
    Properties:
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5
      StreamSpecification:
        StreamViewType: NEW_AND_OLD_IMAGES