requestParameters returning “Invalid mapping expression specified: true”

时光总嘲笑我的痴心妄想 提交于 2020-02-03 08:28:54

问题


I'm configuring a lambda function's API gateway integration with the Serverless Framework version 0.4.2.

My problem is with defining an endpoint's request parameters. The AWS docs for API gateway entry says:

requestParameters

Represents request parameters that can be accepted by Amazon API Gateway. Request parameters are represented as a key/value map, with a source as the key and a Boolean flag as the value. The Boolean flag is used to specify whether the parameter is required. A source must match the pattern method.request.{location}.{name}, where location is either querystring, path, or header. name is a valid, unique parameter name. Sources specified here are available to the integration for mapping to integration request parameters or templates.

As I understand it, the config in the s-function.json is given directly to the AWS CLI, so I've specified the request parameters in the format: "method.request.querystring.startYear": true. However, I'm receiving an Invalid mapping expression specified: true error. I've also tried specifying the config as "method.request.querystring.startYear": "true" with the same result.

s-function.json:

{
    "name": "myname",
    // etc...
    "endpoints": [
        {
            "path": "mypath",
            "method": "GET",
            "type": "AWS",
            "authorizationType": "none",
            "apiKeyRequired": false,
            "requestParameters": {
                "method.request.querystring.startYear": true,
                "method.request.querystring.startMonth": true,
                "method.request.querystring.startDay": true,
                "method.request.querystring.currentYear": true,
                "method.request.querystring.currentMonth": true,
                "method.request.querystring.currentDay": true,
                "method.request.querystring.totalDays": true,
                "method.request.querystring.volume": true,
                "method.request.querystring.userId": true
            },
            // etc...
        }
    ],
    "events": []
}

Any ideas? Thanks in advance!


回答1:


It looks like the requestParameters in the s-function.json file is meant for configuring the integration request section, so I ended up using:

"requestParameters": {
    "integration.request.querystring.startYear" : "method.request.querystring.startYear",
    "integration.request.querystring.startMonth" : "method.request.querystring.startMonth",
    "integration.request.querystring.startDay" : "method.request.querystring.startDay",
    "integration.request.querystring.currentYear" : "method.request.querystring.currentYear",
    "integration.request.querystring.currentMonth" : "method.request.querystring.currentMonth",
    "integration.request.querystring.currentDay" : "method.request.querystring.currentDay",
    "integration.request.querystring.totalDays" : "method.request.querystring.totalDays",
    "integration.request.querystring.volume" : "method.request.querystring.volume",
    "integration.request.querystring.userId" : "method.request.querystring.userId"
},

This ended up adding them automatically to the method request section on the dashboard as well:

I could then use them in the mapping template to turn them into a method post that would be sent as the event into my Lambda function. Right now I have a specific mapping template that I'm using, but I may in the future use Alua K's suggested method for mapping all of the inputs in a generic way so that I don't have to configure a separate mapping template for each function.




回答2:


You can pass query params to your lambda like

"requestTemplates": {
     "application/json": {
        "querystring": "$input.params().querystring"
      }
 }

In lambda function access querystring like this event.querystring




回答3:


Make sure you're using the right end points as well. There are two types or some such in AWS.. friend of mine got caught out with that in the past.



来源:https://stackoverflow.com/questions/36122250/requestparameters-returning-invalid-mapping-expression-specified-true

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!