serverless教程:使用AWS SNS


资源定义

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();

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !