首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在本地无服务器离线环境中通过SNS消息调用Lambda函数

在本地无服务器离线环境中通过SNS消息调用Lambda函数
EN

Stack Overflow用户
提问于 2018-05-05 11:32:08
回答 1查看 5K关注 0票数 2

我正在使用Serverless Framework &无服务器离线插件在本地开发无服务器web应用程序,并尝试测试以下过程。

  1. 用户按下一个按钮,它将调用API。
  2. API将调用Lambda函数,并将消息发布到SNS主题。
  3. 订阅SNS主题的几个lambda函数将被调用。

serverless.yml

代码语言:javascript
复制
plugins:
  - serverless-offline
  - serverless-offline-sns

functions:
  publisher:
    handler: publisher.main
    events:
      - http:
          path: publish
          method: post
          cors: true
          authorizer: aws_iam

  subscriber:
    handler: subscriber.main
    events:
      - sns: test-topic

我在AWS上测试了它,它成功了,但是我不知道如何在本地测试它。

sns目前不支持lambda的订阅。

脱机sns支持http、https和sqs订阅。此时不支持电子邮件、电子邮件-json、sms、应用程序和lambda协议。https://www.npmjs.com/package/serverless-offline-sns

我认为这是无服务器和事件驱动架构的一个非常常见的用例。如何在本地环境中测试?

EN

回答 1

Stack Overflow用户

发布于 2019-01-07 13:41:58

最近,我能够使用下面的代码/配置来脱机地模拟这个过程

serverless.yml

代码语言:javascript
复制
functions:  
  ########## SNS SUBSCRIPTIONS ##########
  newUser:
    memorySize: 128
    timeout: 120
    handler: src/sns-subscribers/newUser.handler
    name: sns-newUser-dev
    events:
      - sns:
          arn: arn:aws:sns:ap-southeast-2:13XXXXXXXXXX:new-user-dev

plugins:
  - serverless-offline-sns
  - serverless-offline

custom:
  serverless-offline-sns:
    port: 4002 # a free port for the sns server to run on
    debug: true
    # host: 0.0.0.0 # Optional, defaults to 127.0.0.1 if not provided to serverless-offline
    # sns-endpoint: http://127.0.0.1:4002 # Optional. Only if you want to use a custom endpoint
    accountId: 13XXXXXXXXXX # Optional

下面是触发我的脱机lambda的代码

trigger.js

代码语言:javascript
复制
const AWS = require('aws-sdk');

const sns = new AWS.SNS({
  endpoint: 'http://127.0.0.1:4002',
  region: 'ap-southeast-2',
});

sns.publish(
  {
    Message: 'new user!',
    MessageStructure: 'json',
    TopicArn: `arn:aws:sns:ap-southeast-2:13XXXXXXXXXX:new-user-dev`,
  },
  () => console.log('new user published'),
);

正常运行触发器

代码语言:javascript
复制
node trigger.js

注意:在您的示例中,声明sns订阅的方式还不支持

代码语言:javascript
复制
events:
  - sns: test-topic # try using ARN and sending this to the next line

您可以查看此github问题以获得更多信息和更新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50188932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档