Golang Lambda を AWS X-Ray で表示する
概要
Golang Lambda で DynamoDB のトレース、外部HTTPリクエストのトレースをした際のメモです。
Lambda のトレースの有効化
Lambda での AWS X-Ray のセットアップにあるように、
「アクティブトレースを有効にします」にチェックを入れれば、Lambda の起動・実行時間は表示できるようになります。
しかし、DynamoDB などの AWSサービスの呼び出しや、HTTPリクエストの呼び出しにはプラスの対応が必要でした。
X-Ray SDK for Go の使用
公式のドキュメントはこれらです。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/go-tracing.html
https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-sdk-go-awssdkclients.html
Lambda 関数で Go 用 X-Ray SDK を使用することで、DynamoDB などの AWSサービスの呼び出しや、HTTPリクエストの呼び出しをトレースすることが可能になります。
ポイントとしては、Lambda 関数が実行されたときにハンドラに渡されるコンテキストを X-Ray SDK で使う点です。
また、2019/2月現在、aws-xray-sdk-go は rc を使わねばならないことも注意です。issue
DynamoDB のトレース一部抜粋。xxxxxWithContextメソッドを使います。
sess, err := session.NewSession() dynamo := dynamodb.New(sess) xray.AWS(dynamo.Client) dynamo.ScanWithContext(ctx, params) dynamo.PutItemWithContext(ctx, input) dynamo.UpdateItemWithContext(ctx, input) dynamo.DeleteItemWithContext(ctx, input)
外部HTTPリクエストのトレース一部抜粋。ctxhttpを使います。
client := &http.Client{} client = xray.Client(client) ctxhttp.Get(ctx, client, "https://www.google.com/")
表示
AWS マネジメントコンソールでの表示はこんな感じに
X-Ray Service Map
X-Ray Traces