メニュー
AWS Lambda
開発者ガイド

Go

Lambda 関数で Go 用 X-Ray SDK を使用できます。ハンドラに最初の引数として コンテキストオブジェクト (Go) が含まれている場合には、このオブジェクトを X-Ray SDK に渡すことができます。Lambda は、Lambda 呼び出しサービスセグメントにアタッチするサブセグメントに SDK が使用できるこのコンテキストを介して値を渡します。SDK で作成されたサブセグメントは、Lambda トレースの一部として表示されます。

Go 用 X-Ray SDK のインストール

次のコマンドを使用して Go 用 X-Ray SDK をインストールします(SDK の非テスト依存関係が含まれます)。

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 SDK の設定

次のコードサンプルでは、Lambda 関数で Go 用 X-Ray SDK を設定する方法を示しています。

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)

キャプチャ

次のコードでは、重要なコードパスをトレースしてキャプチャする方法を示しています。

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 }