如何记录 AWS Lambda Go 函数的 API 调用
AWS Lambda 是一种无服务器计算服务,可响应事件运行您的代码并自动为您管理底层计算资源。Amazon API Gateway 是一种托管服务,允许开发人员定义 REST API 的 HTTP 终端节点并将这些终端节点与相应的后端业务逻辑连接起来。API Gateway 位于 API 的后端服务和 API 用户之间,处理对 API 终端节点的 HTTP 请求、任何身份验证需求,并将它们路由到正确的后端。在无服务器环境中,我们对底层基础设施的控制较少,日志记录是构建后端的重要部分,对于无服务器 API 也不例外。跟踪 API 请求不仅可以了解 API 的执行情况和需要优化的地方,还可以了解 API 的使用情况以及使用最多的功能。
在本指南中,我们将向您展示如何在几分钟内设置 Moesif API 分析,以使用 API Gateway 作为触发器来跟踪托管在 AWS Lambda 上的 API。
创建 AWS Lambda 函数处理程序
在用 Go 编写的 lambda 函数中,我们需要包含aws-lambda-go
以下是示例类和 Lambda 函数,它接收 Amazon API Gateway 事件记录数据作为输入,并以 200 状态、标头和与请求相同的正文进行响应。
package main
import (
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/events"
"context"
)
func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
return events.APIGatewayProxyResponse{
Body: request.Body,
StatusCode: 200,
Headers: map[string] string {
"RspHeader1": "RspHeaderValue1",
"Content-Type": "application/json",
"Content-Length": "1000",
},
}, nil
}
func main() {
lambda.Start(handleRequest)
}
我们需要按照请求发生的顺序保存请求的历史记录。每个日志条目都包含有关请求的信息,包括客户端 IP 地址、请求日期/时间、请求路径、HTTP 代码、提供的字节数、用户代理等。适用于 Go 的 Moesif AWS Lambda 中间件
我们将定义函数的配置选项。有关更多详细信息,请参阅Moesif 配置选项
func MoesifOptions() map[string]interface{} {
var moesifOptions = map[string]interface{} {
"Log_Body": true,
}
return moesifOptions
}
现在,我们将添加Moesif Middleware
到我们的 lambda 函数。
func main() {
lambda.Start(moesifawslambda.MoesifLogger(HandleLambdaEvent, MoesifOptions()))
}
集成后,我们将看到所有 API 调用都被捕获并发送到 Moesif。
安全记录数据
身份验证请求包含凭证,响应包含安全令牌,在日志中记录凭证和令牌是不安全的。使用 Moesif,我们可以安全地提取所需的信息,同时保持安全性,并且不需要对我们的代码库进行大量更改。使用Mask_Event_Model
配置选项,我们可以屏蔽请求/响应标头字段或请求/响应主体以保护身份验证信息的机密性。此外,如果我们想删除对 Moesif 的日志记录请求和响应主体,我们可以将Log_Body
配置选项设置为false
。我们还可以捕获从我们的应用程序到第三方(如 Stripe、Github)或我们自己的内部 API 的所有传出 API 调用。
要了解您的 API 的使用方式,请捕获 API 请求和响应,并记录到 Moesif,以便通过 AWS Lambda 分析和实时调试您的 API 流量。有关如何集成 Moesif 的更多详细信息,您可以从 git clone 并运行此示例应用程序GitHub
原文地址:https://www.moesif.com/blog/aws-lambda/go/How-to-Log-API-Calls-for-AWS-Lambda-Go-functions/