AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 AWS Lambda 中检测 Go 代码

您可以将适用于 Go 的 X-Ray 开发工具包与您的 Lambda 函数搭配使用。如果您的处理程序包含 Go 中的 AWS Lambda 上下文对象 作为其第一个参数,则该对象可传递给 X-Ray 开发工具包。Lambda 通过此上下文传递开发工具包可用于将子分段附加到 Lambda 调用服务分段的值。使用软件开发工具包创建的子分段将显示为您的 Lambda 跟踪的一部分。

安装适用于 Go 的 X-Ray 开发工具包

使用以下命令可安装适用于 Go 的 X-Ray 开发工具包。(该软件开发工具包的非测试依赖项将包含在内)。

go get -u github.com/aws/aws-xray-sdk-go/...

如果您要包含测试依赖项,请使用以下命令:

go get -u -t github.com/aws/aws-xray-sdk-go/...

您也可以使用 Glide 管理依赖项。

glide install

配置适用于 Go 的 X-Ray 开发工具包

以下代码示例演示了如何在您的 Lambda 函数中配置适用于 Go 的 X-Ray 开发工具包:

import ( "github.com/aws/aws-xray-sdk-go/xray" ) func myHandlerFunction(ctx context.Context, sample string) { xray.Configure(xray.Config{ LogLevel: "info", // default ServiceVersion: "1.2.3", }) ... //remaining handler code }

创建子分段

以下代码示例演示了如何启动子分段:

// Start a subsegment ctx, subSeg := xray.BeginSubsegment(ctx, "subsegment-name") // ... // Add metadata or annotation here if necessary // ... subSeg.Close(nil)

Capture

以下代码演示了如何跟踪和捕获关键代码路径:

func criticalSection(ctx context.Context) { // This example traces a critical code path using a custom subsegment xray.Capture(ctx, "MyService.criticalSection", func(ctx1 context.Context) error { var err error section.Lock() result := someLockedResource.Go() section.Unlock() xray.AddMetadata(ctx1, "ResourceResult", result) }) }

跟踪 HTTP 请求

如果您想跟踪 HTTP 客户端,也可以使用 xray.Client() 方法,如下所示:

func myFunction (ctx context.Context) ([]byte, error) { resp, err := ctxhttp.Get(ctx, xray.Client(nil), "https://aws.amazon.com") if err != nil { return nil, err } return ioutil.ReadAll(resp.Body), nil }