在后端获取 AWS API 网关请求 ID api

Getting AWS API Gateway Request Id in backend api

我们设置了 api 如下

Development : ASP NET Core 2.1 C#
Backend api deployment : In AWS through docker
Gateway : AWS API Gateway which contains custom lambda Authorizer

要求:在后端获取 API 网关请求 ID api 用于日志记录和请求跟踪。

当请求通过 API 网关时,它会生成一个请求 ID。这是网关在“x-amzn-RequestId”中响应 header 设置的,并且可以在客户端(如邮递员)中可见。我发现此 ID 在 APIGatewayCustomAuthorizerRequest 的 object 中的 lambda 授权方中也可用 - .RequestContext.RequestId,我可以将其用于授权方日志记录。

现在当请求被授权时,实际的 api 被调用。我希望此 api 中的相同请求 ID 用于记录目的。最终 - 通过具有相同请求的 gateway-aurhorizer-api 来识别请求的旅程并生成统计信息。

在api代码中,我们还实现了OnActionExecuting()APIControllerActionFilter。我想知道这里是否可以通过任何方式获得网关请求 ID?或者以任何方式将 id 从网关传递到实际的 api ?

在 API 网关控制台中,您可以在集成请求部分添加 HTTP headers。所以你可以添加一个自定义 header 并将其映射回 requestId.

或者您可以在映射模板中执行此操作

#set($context.requestOverride.header.requestId = $context.requestId)

然后将通过 API 网关向下游传递。

来自使用 Beeceptor.com

的测试

HTTP 版本的 API 网关似乎可以自动执行此操作。

网关生成请求 ID 并将其添加到发送到应用程序的请求中。它通过 X-Request-ID header.

传输