AWS Lambda如何从API Gateway知道哪个终结点调用它?

时间:2019-09-15 01:16:33

标签: amazon-web-services aws-lambda

如果两个不同的终结点使用一个lambda,则lambda如何知道URL路径的各个部分?

如何从/zips/zip?zip_code=02140知道一个lambda?

我可以使用event["queryStringParameters"]['zip_Code']从lambda中获取URL查询字符串-/zip?zip_code=02140
但是如何知道是否从/zips端点打电话给我?

我尝试使用event["pathStringParameters"]['zips']为其创建了一个测试事件,但没有成功,未被识别。

我可以为每个特定资源使用一个lambda,但我也想知道其他方法,以及使用相同端点的方法如何显示其路径。

2 个答案:

答案 0 :(得分:3)

如果我遵循您的要求,即您拥有为两个 API网关端点提供服务的一个 Lambda函数,那么我认为您有两个选择: / p>

  1. 使用path参数
  2. 设置自定义标题,并检查headers

来自AWS documentation

  

在Lambda代理集成中,API网关将整个客户端请求映射到后端Lambda函数的输入事件参数,如下所示:

因此,此HTTP请求如下:

POST /testStage/hello/world?name=me HTTP/1.1
Host: gy415nuibc.execute-api.us-east-1.amazonaws.com
Content-Type: application/json
headerName: headerValue

{
    "a": 1
}

您将有空:

  "message": "Hello me!",
  "input": {
    "resource": "/{proxy+}",
    "path": "/hello/world",
    "httpMethod": "POST",
    "headers": {
      "Accept": "*/*",
      "Accept-Encoding": "gzip, deflate",
      ...

pathheaders都可以满足您的需求。

个人,我建议设置一个自定义标头。这样,无论您的API路由是否发生变化,您的Lambda都会继续使用它。

答案 1 :(得分:1)

您可以在event下的event["requestContext"]["path"]对象中获取调用Lambda的路径

您可以在documentation for using AWS Lambda with API Gateway

中查看有关event对象所包含内容的更多详细信息。