在后端 api 中获取 AWS API Gateway 请求 ID

Arj*_*ECH 2 docker aws-api-gateway asp.net-core-2.1

我们的 api 设置如下

Development : ASP NET Core 2.1 C#
Backend api deployment : In AWS through docker
Gateway : AWS API Gateway which contains custom lambda Authorizer
Run Code Online (Sandbox Code Playgroud)

需求:在后端api中获取API网关请求id以进行日志记录和请求跟踪。

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

现在,当请求被授权时,将调用实际的 api。我希望在此 api 中使用相同的请求 id 来进行日志记录。最终 - 通过具有相同请求的 gateway-aurhorizer-api 识别请求的旅程并生成统计数据。

在api代码中,我们还实现了APIControllerActionFilterOnActionExecuting()。我想知道网关请求 ID 是否可用?或者有什么方法可以将 id 从网关传递到实际的 api 吗?

K M*_* Mo 9

在 API Gateway 控制台中,您可以在集成请求部分添加 HTTP 标头。因此,您可以添加自定义标头并将其映射回 requestId。

在此输入图像描述

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

#set($context.requestOverride.header.requestId = $context.requestId)
Run Code Online (Sandbox Code Playgroud)

然后,该数据将通过 API 网关向下游传递。

来自使用 Beeceptor.com 的测试

在此输入图像描述