如何使用事件将 json 输入传递给部署在无服务器中的 Cron 计划 Lambda?
How do I pass json inputs to a Cron scheduled Lambda deployed in Serverless using event?
我一直在尝试将无服务器中的 Lambda 部署到 运行,按每小时调用它的 Cron 计划进行。调用它时,我希望 Lambda 内的事件由我自己的 JSON 输入填充,而不是来自 Cron 事件的信息,后者是部署时的默认输入。
在 AWS 控制台内,我可以手动进入 Lambda 的 Cron 触发器并将输入从 "Matched event" 更改为 "Constant (JSON text)" 以获得我想要的结果。由于 Serverless 在部署 Lambda 时创建了这条规则,我觉得应该有一些方法可以通过 serverless.yml 文件中的配置来更改输入。在搜索 Serverless 的文档时我没有找到任何东西,所以现在我想知道这是否可以通过 Serverless 在其当前状态下实现,如果可以的话如何实现。
如有任何建议,我们将不胜感激。
编辑:有一个应该添加此功能的更新,但是我仍然无法使用 JSON 使用无服务器 1.3.0 按计划进行部署(并且还使用 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.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
编辑您的编辑:我做了一些挖掘,如果它不是字符串,似乎无服务器会自动禁用计划。这意味着如果您的整个活动是 - 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
我一直在尝试将无服务器中的 Lambda 部署到 运行,按每小时调用它的 Cron 计划进行。调用它时,我希望 Lambda 内的事件由我自己的 JSON 输入填充,而不是来自 Cron 事件的信息,后者是部署时的默认输入。
在 AWS 控制台内,我可以手动进入 Lambda 的 Cron 触发器并将输入从 "Matched event" 更改为 "Constant (JSON text)" 以获得我想要的结果。由于 Serverless 在部署 Lambda 时创建了这条规则,我觉得应该有一些方法可以通过 serverless.yml 文件中的配置来更改输入。在搜索 Serverless 的文档时我没有找到任何东西,所以现在我想知道这是否可以通过 Serverless 在其当前状态下实现,如果可以的话如何实现。
如有任何建议,我们将不胜感激。
编辑:有一个应该添加此功能的更新,但是我仍然无法使用 JSON 使用无服务器 1.3.0 按计划进行部署(并且还使用 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.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
编辑您的编辑:我做了一些挖掘,如果它不是字符串,似乎无服务器会自动禁用计划。这意味着如果您的整个活动是 - 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