This module provides a middleware layer for github.com/aws/aws-lambda-go. This project is heavily based on https://github.com/justinas/alice.
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.
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 includesaws_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 includesaws_request_id
and the fields you provide at initialisation.
This code was authored by Mark Wolfe and is licensed under the Apache 2.0 license.