如何将参数传递给无服务器调用本地

Las*_*apa 24 aws-lambda serverless-framework aws-serverless

我正在开发一个无服务器的无需项目,需要在本地测试lambda函数.
我正在使用serverless invoke local -f {function_name}命令来测试不请求任何路径或查询参数的API调用.
我的问题是如何使用此命令将任何路径或查询参数传递给函数?

示例无服务器描述

getFoodDetails:
    handler: handler.getFoodDetails
    events:
      - http:
          method: get
          path: /foods/{food_id}
          cors: true
          request:
            parameters:
              paths:
                food_id: true
Run Code Online (Sandbox Code Playgroud)

max*_*igo 40

数据字符串

如上所述,您可以使用该--data选项将字符串数据作为事件传递给您的函数.

serverless invoke local -f {function_name} --data '{ "queryStringParameters": {"id":"P50WXIl6PUlonrSH"}}'
Run Code Online (Sandbox Code Playgroud)

数据文件

你还可以做的是传递一个--path带有数据的json文件event,并在"事件文件"中定义你想要的数据.

serverless invoke --function {function_name} --path event_mock.json
Run Code Online (Sandbox Code Playgroud)

您可以以某种方式从调用中返回事件并将其保存在JSON文件中或从Amazon获取一个.他们提供了一些例子:https: //docs.aws.amazon.com/lambda/latest/dg/eventsources.html

请记住,如果你同时通过--path--data,包括在数据--path文件将覆盖你与传递的数据--data标志.

文档:https://serverless.com/framework/docs/providers/aws/cli-reference/invoke#invoke-local


Nec*_*dil 11

我已经尝试了属性的答案,--data不起作用。
事实上,问题在于--data将字符串值传递给框架。所以如果你在你的 javascript 文件中写:console.log(typeof(event));,你会得到String而不是Object. 这意味着无服务器框架不会正确地将输入转换为 JSON 对象。这就是为什么您收到xx 未定义错误的原因。

我的解决方案是使用-p(or --path) 属性。在您的示例中,请按照下列步骤操作:

  1. 在控制台的当前位置创建一个 .json 文件。例如:test.json
  2. 在json文件中写: {"pathParameters":{"food_id":"100"}}
  3. 在 js 文件中,要获取food_id,请使用event.pathParameters.food_id
  4. 运行命令: sls invoke local -f yourFunction -p test.json


paf*_*de2 10

QueryStringParameters 和pathParameters 是两种不同的输入类型。

对于前者,接受的回应对我有用。

后者几乎相同,只需将queryStringParameters替换为pathParameters

sls invoke local -f {function_name} --data '{ "pathParameters": {"id":"1"}}'
Run Code Online (Sandbox Code Playgroud)


Kan*_*yan 6

使用--data 和传递是您要发送到本地lambda的任何数据格式。

字符串数据示例:

无服务器调用--function functionName --stage dev --region us-east-1 --data“ hello world”

JSON数据示例:

无服务器调用--function functionName --stage dev --region us-east-1 --data'{“ property1”:“ value”}'

来自文件的JSON数据:

无服务器调用--function functionName --stage dev --region us-east-1 --path lib / data.json

完整的文档可以从这里访问

希望能帮助到你。


d0u*_*one 5

备查。你的案子就这样解决了。感谢 Kannayans JSON Example 才弄明白了。

sls invoke local -f getFoodDetails --data '{ "queryStringParameters": {"food_id":"123"}}'
Run Code Online (Sandbox Code Playgroud)