github.com/epsagon/epsagon-go@v1.39.0/example/ddb_example/write/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/aws/aws-lambda-go/events"
     6  	"github.com/aws/aws-lambda-go/lambda"
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/aws/session"
     9  	"github.com/aws/aws-sdk-go/service/dynamodb"
    10  	"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
    11  	"github.com/epsagon/epsagon-go/epsagon"
    12  	"github.com/epsagon/epsagon-go/wrappers/aws/aws-sdk-go/aws"
    13  	"github.com/google/uuid"
    14  	"log"
    15  	"os"
    16  )
    17  
    18  // Item example
    19  type Item struct {
    20  	Item string `json:"item"`
    21  }
    22  
    23  func ddbHandler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    24  	log.Println("In ddbHandler, received body: ", request.Body)
    25  
    26  	session := epsagonawswrapper.WrapSession(session.Must(session.NewSession(&aws.Config{
    27  		Region: aws.String("eu-west-1")},
    28  	)))
    29  
    30  	svc := dynamodb.New(session)
    31  
    32  	item := Item{
    33  		Item: uuid.New().String(),
    34  	}
    35  
    36  	av, marshalErr := dynamodbattribute.MarshalMap(item)
    37  
    38  	if marshalErr != nil {
    39  		marshErrMsg := fmt.Sprintf("Failed to marshal table: %v", marshalErr)
    40  		log.Println(marshErrMsg)
    41  		return events.APIGatewayProxyResponse{Body: marshErrMsg, StatusCode: 500}, marshalErr
    42  	}
    43  
    44  	input := &dynamodb.PutItemInput{
    45  		Item:      av,
    46  		TableName: aws.String(os.Getenv("TABLE_NAME")),
    47  	}
    48  
    49  	_, err := svc.PutItem(input)
    50  
    51  	if err != nil {
    52  		fmt.Println("Failed calling PutItem:")
    53  		errMsg := fmt.Sprintf("Failed calling PutItem: %v", err.Error())
    54  		return events.APIGatewayProxyResponse{Body: errMsg, StatusCode: 500}, err
    55  	}
    56  
    57  	fmt.Println("Successfully written item to table")
    58  	return events.APIGatewayProxyResponse{Body: request.Body, StatusCode: 200}, nil
    59  }
    60  
    61  func main() {
    62  	log.Println("enter main")
    63  	config := epsagon.NewTracerConfig("ddb-test-go-v2", "")
    64  	config.Debug = true
    65  	lambda.Start(epsagon.WrapLambdaHandler(config, ddbHandler))
    66  	log.Println("exit main")
    67  }