Lambdaで実行途中のtraceをX-Rayに投稿することでトレーシングを行うことができる。
package main import ( "context" "fmt" "io/ioutil" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-xray-sdk-go/xray" "golang.org/x/net/context/ctxhttp" ) type MyEvent struct { Name string `json:"name"` } func init() { xray.Configure(xray.Config{ LogLevel: "info", ServiceVersion: "1.2.3", }) } func HandleRequest(ctx context.Context, evt MyEvent) (string, error) { ctx, seg := xray.BeginSegment(context.Background(), "api-request") _, err := getExample(ctx, "https://example.com") if err != nil { fmt.Println(err) return "", err } seg.Close(nil) return "OK", nil } func getExample(ctx context.Context, url string) ([]byte, error) { resp, err := ctxhttp.Get(ctx, xray.Client(nil), url) if err != nil { return nil, err } return ioutil.ReadAll(resp.Body) } func main() { lambda.Start(HandleRequest) }
こんな感じで実行すると以下のようにトレースができる。
コンソールから操作するとトレースを有効化するだけで権限が付与されたり投稿まで行ってくれるので便利。