Вызвать лямбда-функцию по сообщению SNS в локальной автономной среде без сервера - PullRequest
0 голосов
/ 05 мая 2018

Я использую Serverless Framework и плагин без сервера для локальной разработки веб-приложения без сервера и пытаюсь протестировать следующую процедуру.

  1. Пользователь нажимает кнопку, которая вызывает API
  2. API вызовет функцию Lambda и опубликует сообщение в теме SNS
  3. Будет задействовано несколько лямбда-функций, подписывающихся на тему SNS

serverless.yml

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, и он работал, но я не знаю, как это проверить локально.

serverless-offline-sns пока не поддерживает подписку lambda.

serverless-offline-sns поддерживает подписки http, https и sqs. протоколы email, email-json, sms, application и lambda не поддерживаются. https://www.npmjs.com/package/serverless-offline-sns

Я думаю, что это очень распространенный вариант использования для серверной и управляемой событиями архитектуры. Как вы тестируете это в локальной среде?

1 Ответ

0 голосов
/ 07 января 2019

Недавно мне удалось смоделировать это в автономном режиме, используя следующий код / ​​config

serverless.yml

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

Вот код, который запускает мою автономную лямбду

trigger.js

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'),
);

нормально запустить триггер

node trigger.js

Примечание: В вашем примере способ объявления подписки sns еще не поддерживается AFAIK.

events:
  - sns: test-topic # try using ARN and sending this to the next line

Вы можете проверить эту проблему github для получения дополнительной информации и обновлений.

...