lambda-go-extras

module
v1.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 10, 2023 License: Apache-2.0

README

lambda-go-extras

This module provides a middleware layer for github.com/aws/aws-lambda-go. This project is heavily based on https://github.com/justinas/alice.

GitHub Actions status Go Report Card Documentation

Why?

Having used the github.com/aws/aws-lambda-go package for a while now I have found it annoying switching between the Go standard libraries http package and this library. After some review I think the thing I miss the most is the ability to chain a list of handlers, with each link responsible for a part of the puzzle.

Being able to compose these chains offers a lot of flexibility and reuse across projects.

Given the default way of using the github.com/aws/aws-lambda-go is via the Start(handler interface{}) function, which is very flexible, but not easily extended due it's dynamic nature. So I have moved to using the less used func StartHandler(handler Handler) which is more idiomatic with its Handler being just an interface with a single Invoke method. This module has extended this with a simple middleware chain inspired by alice as mentioned above.

Usage

This illustrates how easy it is to dump the input and output payloads using a simple middleware chain.

package main

import (
	"context"

	"github.com/aws/aws-lambda-go/events"
	"github.com/aws/aws-lambda-go/lambda"
	"github.com/rs/zerolog"
	"github.com/wolfeidau/lambda-go-extras/lambdaextras"
	lmw "github.com/wolfeidau/lambda-go-extras/middleware"
	"github.com/wolfeidau/lambda-go-extras/middleware/raw"
	zlog "github.com/wolfeidau/lambda-go-extras/middleware/zerolog"
)

var (
	commit    = "unknown"
	buildDate = "unknown"
)

func main() {
	flds := lmw.FieldMap{"commit": commit, "buildDate": buildDate}

	ch := lmw.New(
		raw.New(raw.Fields(flds)),   // raw event logger which prints input and output of handler
		zlog.New(zlog.Fields(flds)), // inject zerolog into the context
	).Then(lambdaextras.GenericHandler(processSQSEvent))

	// use StartWithOptions as StartHandler is deprecated
	lambda.StartWithOptions(ch)
}

func processSQSEvent(ctx context.Context, sqsEvent events.SQSEvent) (string, error) {
	zerolog.Ctx(ctx).Info().Msg("sqsEvent")
	return "ok", nil
}

There are two bundled middleware, these are

  • github.com/wolfeidau/lambda-go-extras/middleware/raw - raw event logger which outputs input and output events which also includes aws_request_id and the fields you provide at initialisation.
  • github.com/wolfeidau/lambda-go-extras/middleware/zerolog - configures the context with a zerolog logger which includes aws_request_id and the fields you provide at initialisation.

License

This code was authored by Mark Wolfe and is licensed under the Apache 2.0 license.

Directories

Path Synopsis
example module
Package lambdaextras contains extras for building Go based lambdas.
Package lambdaextras contains extras for building Go based lambdas.
Package middleware implements a middleware chaining solution for Go based lambdas.
Package middleware implements a middleware chaining solution for Go based lambdas.
raw module
zerolog module
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
standard module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL