AWS API 网关 AWS 代理事件中的路径和资源(或资源路径)之间有什么区别?

Die*_*rDP 5 amazon-web-services aws-lambda aws-sam

我正在学习 AWS Lambda。我创建了一个 lambda,它将充当 REST API(APIEvent用 CloudFormation 术语来说),并希望使用事件在本地调试该 Lambda。

如果我理解正确的话,运行sam local generate-event apigateway aws-proxy会生成一个适合本地运行/调试我的 Lambda 的事件。这会产生以下事件(一些嵌套值被缩写):

{
  "body": "eyJ0ZXN0IjoiYm9keSJ9",
  "resource": "/{proxy+}",
  "path": "/path/to/resource",
  "httpMethod": "POST",
  "isBase64Encoded": true,
  "queryStringParameters": {
    "foo": "bar"
  },
  "multiValueQueryStringParameters": {
    "foo": [
      "bar"
    ]
  },
  "pathParameters": {
    "proxy": "/path/to/resource"
  },
  "stageVariables": {
    "baz": "qux"
  },
  "headers": {
    ...
  },
  "multiValueHeaders": {
    ...
  },
  "requestContext": {
    "accountId": "123456789012",
    "resourceId": "123456",
    "stage": "prod",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef",
    "requestTime": "09/Apr/2015:12:34:56 +0000",
    "requestTimeEpoch": 1428582896000,
    "identity": {
      ...
    },
    "path": "/prod/path/to/resource",
    "resourcePath": "/{proxy+}",
    "httpMethod": "POST",
    "apiId": "1234567890",
    "protocol": "HTTP/1.1"
  }
}
Run Code Online (Sandbox Code Playgroud)

resource但是,我不明白(在 中复制requestContext.resourcePath) 和path(在 中复制requestContext.path)之间的关系。我应该为这些值填写什么?

wil*_*nux 1

resource是您在 API 网关中定义的 API 资源。例如你的情况/{proxy+}

path是请求的实际路径。

因此,当您提出请求时GET https://yourdomain.com/v1/pets

  • 路径是/v1/pets
  • 资源是/{proxy+}