资源定义
yaml
custom:
sns:
myTopicName: testTopic
resources:
Resources:
SNSTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: 'test SNS topic'
TopicName: ${self:custom.sns.myTopicName}
访问权限
yaml
iam:
role:
statements:
- Effect: "Allow"
Action:
- ses:SendEmail
Resource:
- "*"
- Effect: "Allow"
Action:
- sns:Publish
- sns:Subscribe
Resource:
- "*"
订阅代码
JavaScript
const params = {
Protocol: 'EMAIL',
TopicArn: topicArn,
Endpoint: userInput.email
};
sns.subscribe(params, (err, data) => {
// ...
});
发布消息代码
JavaScript
const params = {
TopicArn: `${topicArn}`,
Subject: `test subject`,
Message: 'test message'
}
await sns.publish(params, (err, data) => {
if(err) console.log('err', err);
console.log(data);
}).promise();
注意:上面代码可能会导致SNS发送两遍消息。这应该是SNS的一个bug吧。改为如下方式就可以解决重复发送的问题了:
JavaScript
await sns.publish(params).promise();