首页 > 解决方案 > 如何创建映射模板以将路径参数映射到 apigateway 中的 lambda 函数?

问题描述

我正在使用无服务器部署 API 网关和 lambda,使用lambda integration. 下面是基础代码:

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

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

标签: amazon-web-servicesaws-lambdaaws-api-gateway

解决方案


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

例如,假设你有一个 URL

https://example.execute-api.us-west-2.amazonaws.com/prod/confirmReg?token=12345&uid=5

您可以简单地从您的处理程序中检索如下值:

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

编辑

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

转到您各自的 API 资源方法,然后单击集成请求部分

在此处输入图像描述

找到集成请求的映射模板区域并将其打开。为 application/json Content-Type 添加一个新的映射模板。您需要将组合框中的类型从“输入直通”更改为“映射模板”。

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

{
  "id" : "$input.params('id')"
}

这样,您最终不会在 lambda 中收到整个事件对象,而只会收到在您的请求中发送的路径参数。

一些参考资料:1 & 2


推荐阅读