Resources: TriggerFunction: Type: AWS::Serverless::Function Properties: Runtime: nodejs14.x Handler: index.handler Timeout: 10 # in case eb has delay InlineCode: | const AWS = require('aws-sdk'); exports.handler = async (event) => { console.log(JSON.stringify(event)); const docClient = new AWS.DynamoDB.DocumentClient(); const response = await docClient.put({ TableName: process.env.TABLE_NAME, Item: { Id: 'TestInput1234' } }).promise(); const data = await new AWS.SQS().receiveMessage({ QueueUrl: process.env.VERIFICATION_QUEUE_URL, WaitTimeSeconds: 5, }).promise(); if (data.Messages.length == 0) { throw 'No messages in the queue!'; } }; Environment: Variables: TABLE_NAME: !Ref Table VERIFICATION_QUEUE_URL: !Ref VerificationQueue Policies: - SQSPollerPolicy: QueueName: !GetAtt VerificationQueue.QueueName InvokedFunction: Type: AWS::Serverless::Function Properties: Runtime: nodejs14.x Handler: index.handler InlineCode: | const AWS = require('aws-sdk'); exports.handler = async (event) => { const sqs = new AWS.SQS(); await sqs.sendMessage({ QueueUrl: process.env.VERIFICATION_QUEUE_URL, MessageBody: "test" }).promise(); }; Environment: Variables: VERIFICATION_QUEUE_URL: !Ref VerificationQueue Policies: - SQSSendMessagePolicy: QueueName: !GetAtt VerificationQueue.QueueName VerificationQueue: Type: AWS::SQS::Queue Table: Type: AWS::DynamoDB::Table Properties: BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: Id AttributeType: S KeySchema: - AttributeName: Id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES DynamoDBTableStream: Type: AWS::Lambda::EventSourceMapping Properties: BatchSize: 1 Enabled: true EventSourceArn: !GetAtt Table.StreamArn FunctionName: !GetAtt InvokedFunction.Arn StartingPosition: TRIM_HORIZON Connector: Type: AWS::Serverless::Connector Properties: Source: Id: Table Destination: Id: InvokedFunction Permissions: - Read ConnectorNotTested: Type: AWS::Serverless::Connector Properties: Source: Id: TriggerFunction Destination: Id: Table Permissions: - Write