地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【AWS】Lambda X-Rayを使ってみる

docs.aws.amazon.com

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)
}

こんな感じで実行すると以下のようにトレースができる。

コンソールから操作するとトレースを有効化するだけで権限が付与されたり投稿まで行ってくれるので便利。