Amazon web services 如何创建映射模板以将路径参数映射到apigateway中的lambda函数?

Amazon web services 如何创建映射模板以将路径参数映射到apigateway中的lambda函数?,amazon-web-services,aws-lambda,aws-api-gateway,Amazon Web Services,Aws Lambda,Aws Api Gateway,我正在使用serverless部署API网关和lambda,使用lambda集成。以下是以下代码: myLambda: ... events: - http: path: customer/{id} method: delete integration: lambda request: parameters: paths: id: true

我正在使用serverless部署API网关和lambda,使用
lambda集成
。以下是以下代码:

myLambda:
   ...
   events:
    - http:
        path: customer/{id}
        method: delete
        integration: lambda
        request:
          parameters:
            paths:
              id: true
          template:
            text/plain: "$input.params('id')"

它创建一个
delete
API,根据path参数中指定的
id
删除客户。我想将
路径id
映射到其处理程序中myLambda的事件参数。但是上面的代码不起作用,因为lambda从API网关接收整个http请求。如何将
id
参数映射到lambda中的事件参数?

使用API网关和lambda函数时,有两个选项:

  • Lambda代理
  • Lambda积分
  • 默认情况下,无服务器框架使用Lambda代理。这种连接Lambda函数的方式要快得多。它将整个HTTP请求传递给Lambda函数,并允许您在Lambda函数端完全处理请求

    正如我所提到的,还有另一种方法是Lambda集成,不使用Lambda代理。如果要使用此方法,需要在请求和响应上设置映射。这种方式在LAmbda代码端是“更干净的”,因为LAmbda在事件中接收到映射参数,而在代理中接收整个HTTP请求。另一方面,这种集成的设置更加复杂,因为您需要进行所有映射,并且它使用VTL(ApacheVelocityTemplateLanguage,Apache Velocity模板语言)来实现


    为了使用Serverless进行设置,请查看中的“Lambda集成”部分:

    我认为ApiGateway事件本身应该包含查询/路径参数键值对,如果使用上面提到的@Caldazar的Lambda代理方法,您可以直接从事件中查询参数

    例如,假设您有一个URL

    您只需从处理程序中检索以下值:

    token = event['queryStringParameters']['token']
    uid = event["queryStringParameters"]['uid']  
    
    编辑

    请按照以下步骤进行Lambda集成:

    转到各自的API资源方法并单击集成请求部分

    找到集成请求的映射模板区域并将其打开。为application/json内容类型添加新的映射模板。您需要将组合框中的类型从“Input passthrough”更改为“Mapping Template”

    然后将以下JSON片段粘贴到模板中:

    {
      "id" : "$input.params('id')"
    }
    
    这样,您将不会在lambda中接收整个事件对象,而只接收在请求中发送的path参数


    一些参考资料:&

    我在API网关中设置了
    lambda集成
    。问题是如何将path参数映射到lambda事件?我使用的是
    lambda集成
    ,因此我不希望在lambda代码中看到整个http请求。如何将path参数映射到lambda事件?@Joeyizhao我已经更新了答案,请检查并让我知道它是否适用于您我可以让它工作,但lambda中的事件仍然包括请求中的所有内容,如
    正文
    标题
    等。我真正想要的是在lambda中仅获取id作为字符串参数。