如何使用事件将 json 输入传递到部署在无服务器中的 Cron 计划 Lambda?

问题描述 投票:0回答:2

我一直在尝试在 Serverless 中部署 Lambda,按照每小时调用它的 Cron 计划运行。当它被调用时,我希望 Lambda 内的事件由我自己的 JSON 输入填充,而不是来自 Cron 事件的信息,这是部署时的默认输入。

在 AWS 控制台内,我可以手动进入 Lambda 的 Cron 触发器,并将输入从“匹配事件”更改为“常量(JSON 文本)”,以获得我想要的结果。由于 Serverless 在部署 Lambda 时创建了此规则,因此我觉得应该有某种方法可以通过 serverless.yml 文件中的配置来更改输入。在搜索无服务器文档时,我找不到任何内容,所以现在我想知道在当前状态下通过无服务器是否可以做到这一点,如果可以,该如何去做。

如有任何建议,我们将不胜感激。

编辑:有一个更新应该添加此功能,但是我仍然无法使用 Serverless 1.3.0 通过 JSON 进行部署(并且还使用 1.2.0 进行了测试)。我使用的 serverless.yml 的一些示例如下:

functions:
  test:
    handler: test.test
    description: "test serverless Lambda"
    memorySize: 128
    timeout: 300
    events:
      - schedule:
        rate: rate(10 minutes)
        input:
          key: value
      - schedule:
        rate: rate(10 minutes)
        input: '{"key": "value"}'
      - schedule:
        rate: rate(10 minutes)
        input:
          key: 'value'

从 1.3.0 开始,任何人都可以对 Serverless 中此功能的状态发表评论,以及我上面的 serverless.yml 看起来是否正常?

编辑 2:发布工作的 serverless.yml

functions:
  test:
    handler: test.test
    description: "test serverless Lambda"
    memorySize: 128
    timeout: 300
    events:
      - schedule:
          rate: rate(10 minutes)
          enabled: true
          input:
            key: value
      - schedule:
          rate: rate(10 minutes)
          input: '{"key": "value"}'
          enabled: true
      - schedule:
          rate: rate(10 minutes)
          input:
            key: 'value'
          enabled: true
aws-lambda serverless-framework
2个回答
31
投票

编辑您的编辑:我做了一些挖掘,似乎无服务器会自动禁用计划,如果它不是字符串。这意味着如果您的整个活动是

- schedule: rate(10 minutes)
,它将被启用。但如果您有其他属性,则必须启用它,因为默认情况下它会被禁用。

所以你当前的 .yml 应该如下所示:

functions:   test:
    handler: test.test
    description: "test serverless Lambda"
    memorySize: 128
    timeout: 300
    events:
      - schedule:
        rate: rate(10 minutes)
        enabled: true
        input:
          key: value
      - schedule:
        rate: rate(10 minutes)
        input: '{"key": "value"}'
        enabled: true
      - schedule:
        rate: rate(10 minutes)
        input:
          key: 'value'
        enabled: true

您可以在 serverless.yml 文件中使用相同的

input
inputPath
,就像使用 cloudwatch 事件规则一样。与 cloudwath 规则的唯一区别是,您实际上可以传递一个对象,而 Serverless 会自动为您对其进行字符串化。

示例:

functions:
  crawl:
    handler: crawl
    events:
      - schedule: 
          rate: rate(1 hours)
          input: 
            key1: value1
            key2: value2

这将等于具有

input:"{'key1':'value1','key2':'value2'}"
的 cloudformation 事件规则,从而传递 json 而不是匹配的事件。

刚才注意到这个问题是11月2日提出的。当时做不到,但提出问题后很快就实施了。 https://github.com/serverless/serverless/pull/2567


0
投票

添加来自无服务器的示例参考

这是 无服务器文档的链接

© www.soinside.com 2019 - 2024. All rights reserved.