integration/resources/templates/combination/connector_table_to_function_read.yaml (111 lines of code) (raw):
Resources:
TriggerFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: nodejs18.x
Handler: index.handler
Timeout: 100
InlineCode: |
const {
DynamoDBDocument
} = require("@aws-sdk/lib-dynamodb"),
{
DynamoDB
} = require("@aws-sdk/client-dynamodb"),
{
SQS
} = require("@aws-sdk/client-sqs");
exports.handler = async (event) => {
console.log(JSON.stringify(event));
const docClient = DynamoDBDocument.from(new DynamoDB());
const response = await docClient.put({
TableName: process.env.TABLE_NAME,
Item: {
Id: 'TestInput1234'
}
});
await new Promise(resolve => setTimeout(resolve, 10000));
var retries = 5;
while (retries-- > 0) {
const data = await new SQS().receiveMessage({
QueueUrl: process.env.VERIFICATION_QUEUE_URL,
WaitTimeSeconds: 20,
});
console.log(data);
if (data.Messages && data.Messages.length > 0) {
return;
}
await new Promise(resolve => setTimeout(resolve, 10000));
}
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: nodejs18.x
Handler: index.handler
InlineCode: |
const {
SQS
} = require("@aws-sdk/client-sqs");
exports.handler = async (event) => {
const sqs = new SQS();
await sqs.sendMessage({
QueueUrl: process.env.VERIFICATION_QUEUE_URL,
MessageBody: "test"
});
};
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:
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
Metadata:
SamTransformTest: true