AWS Lambda
Guia do desenvolvedor

Instrumentação do código Go no AWS Lambda

Você pode usar o X-Ray SDK para Go com sua função do Lambda. Se o manipulador incluir Objeto de contexto do AWS Lambda no Go como seu primeiro argumento, esse objeto poderá ser passado para o X-Ray SDK. O Lambda passa valores por meio desse contexto, que o SDK pode usar para anexar subsegmentos para o Lambda invocar o segmento do serviço. Os subsegmentos criados com o SDK aparecerão como parte de seus rastreamentos do Lambda.

Instalar o X-Ray SDK para Go

Use o comando a seguir para instalar o X-Ray SDK para Go. (As dependências que não são de testes do SDK serão incluídas).

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

Se desejar incluir dependências de teste, use o comando a seguir:

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

Você também pode usar o Glide para gerenciar dependências.

glide install

Configurar o X-Ray SDK para Go

O exemplo de código a seguir ilustra como configurar o X-Ray SDK para Go em sua função do Lambda:

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 }

Criar um subsegmento

O exemplo de código a seguir mostra como iniciar um subsegmento:

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

Capture

O código a seguir ilustra como rastrear e capturar um caminho de código crítico:

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

Rastrear solicitações HTTP

Você também pode usar o método xray.Client() se desejar rastrear um cliente HTTP, conforme mostrado a seguir:

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 }