integration/resources/templates/combination/connector_sns_to_function_write.yaml (88 lines of code) (raw):
Resources:
Topic:
Type: AWS::SNS::Topic
Properties:
Subscription:
- Endpoint: !GetAtt 'InvokedFunction.Arn'
Protocol: lambda
TriggerFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: nodejs18.x
Handler: index.handler
Timeout: 10 # in case eb has delay
InlineCode: |
const {
SNS
} = require("@aws-sdk/client-sns"),
{
SQS
} = require("@aws-sdk/client-sqs");
exports.handler = async (event) => {
var params = {
Message: 'Test Message',
TopicArn: process.env.TOPIC_ARN,
};
var sns = new SNS();
var sqs = new SQS();
await sns.publish(params);
const data = await sqs.receiveMessage({
QueueUrl: process.env.VERIFICATION_QUEUE_URL,
WaitTimeSeconds: 5,
});
if (data.Messages.length == 0) {
throw 'No messages in the queue!';
}
};
Environment:
Variables:
TOPIC_ARN: !Ref Topic
VERIFICATION_QUEUE_URL: !Ref VerificationQueue
EVENT_SOURCE: !Sub '${AWS::StackName}-test-event'
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
Connector:
Type: AWS::Serverless::Connector
Properties:
Source:
Id: Topic
Destination:
Id: InvokedFunction
Permissions:
- Write
ConnectorNotTested:
Type: AWS::Serverless::Connector
Properties:
Source:
Id: TriggerFunction
Destination:
Id: Topic
Permissions:
- Write
Metadata:
SamTransformTest: true