【问题标题】:serverless invoke local with mocked SNS event使用模拟的 SNS 事件进行本地无服务器调用
【发布时间】:2018-04-06 17:14:26
【问题描述】:

我在使用 serverless 在本地调用时遇到了一些问题。

使用 Python3.6 运行时

serverless.yml中的函数是:

functions:
  myFunction:
  events:
    - sns: arn:aws:sns:us-east-1:123456789:myTopic

我的命令是

sls invoke local -f myFunction -s dev -r us-east-1 -p events/myMockedSnsMessage.json

Serverless 不喜欢 myMockedSnsMessage.json 上的语法

当我在我的 lambda 函数中记录事件时,我得到如下信息:

{
  'Records': [
    {
      'Sns': {
        'Message': '{"version":"0","id":"a965ce94-fcb2-ad15-319d-04adab1072d0","detail-type":"AWS API Call via CloudTrail",...}'
      }
    }
  ]
}

即SNS消息是一个字符串,里面有有效的JSON

我应该如何为 SNS 消息存储模拟事件并且仍然具有有效的 JSON,这样 serverless 才不会因为 JSON 语法错误而对我大喊大叫?

【问题讨论】:

  • myMockedSnsMessage.json 中的代码是什么?我敢打赌它是无效的。请将其包含在您的问题中。
  • json直接来自Lambda收到的sns event sourceMessage 属性是一个 JSON 字符串
  • 请将其包含在您的问题中。它看起来像下面特伦特答案中的 JSON 吗?

标签: python python-3.x amazon-web-services amazon-sns serverless-framework


【解决方案1】:

也许使用双引号,并将 json 字符串化。例如

{
  "Records": [
    {
      "Sns": {
        "Message": "{\"version\":\"0\",\"id\":\"a965ce94-fcb2-ad15-319d-04adab1072d0\",\"detail-type\":\"AWS API Call via CloudTrail\",...}"
      }
    }
  ]
}

如果您需要更多示例,AWS 文档中有您可以修改的 sample events,当您使用 AWS 控制台测试您的 lambda 时,您可以从下拉列表中选择许多不同的事件模板。

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 2020-07-13
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多