lambdamiddleware

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Oct 25, 2022 License: MIT Imports: 14 Imported by: 1

README

lambdamiddleware

Useful lambda handler middleware repository

package main

import (
	"context"
	"encoding/json"
	"log"

	"github.com/mashiike/lambdamiddleware"
)

func main() {
    s := lambdamiddleware.NewStack(
        func(next lambda.Handler) lambda.Handler {
            return lambdamiddleware.HandlerFunc(
                func(ctx context.Context, payload []byte) ([]byte, error) {
                    fmt.Println("[start middleware1]")
                    output, err := next.Invoke(ctx, payload)
                    fmt.Println("[end middleware1]")
                    return output, err
                },
            )
        },
    )
    handler := s.Then(func(ctx context.Context, event json.RawMessage) error {
        fmt.Println("[handler]", string(event))
        return nil
    })
    lambda.Start(handler)
}
Parameters And Secrets Extention Hepler Middleware

helper middleware for https://docs.aws.amazon.com/systems-manager/latest/userguide/ps-integration-lambda-extensions.html

package main

import (
	"context"
	"encoding/json"
	"log"
	"os"
	"strings"

	"github.com/aws/aws-lambda-go/lambda"
	"github.com/mashiike/lambdamiddleware"
)

type ssmContextKey string

func main() {
	paramsAndSecrets, err := lambdamiddleware.ParametersAndSecrets(&lambdamiddleware.ParametersAndSecretsConfig{
		Names:          strings.Split(os.Getenv("SSMNAMES"), ","),
		ContextKeyFunc: func(key string) interface{} { return ssmContextKey(key) },
		EnvPrefix:      "SSM_",
		SetEnv:         true,
	})
	if err != nil {
		log.Fatalln(err)
	}
	lambda.Start(lambdamiddleware.NewStack(paramsAndSecrets).Then(
		func(ctx context.Context, payload json.RawMessage) (interface{}, error) {
			return map[string]interface{}{
				"env_foo": os.Getenv("SSM_FOO"),
				"env_bar": os.Getenv("SSM_BAR"),
				"foo":     ctx.Value(ssmContextKey("/lambdamiddleware-examples/foo")),
				"bar":     ctx.Value(ssmContextKey("/lambdamiddleware-examples/bar")),
				"tora":    ctx.Value(ssmContextKey("/lambdamiddleware-examples/tora")),
			}, nil
		},
	))
}

see deteils exampels/parameters-and-secrets

LICENSE

MIT

Documentation

Overview

Example
package main

import (
	"context"
	"encoding/json"
	"fmt"

	"github.com/aws/aws-lambda-go/lambda"
	"github.com/mashiike/lambdamiddleware"
)

func main() {
	s := lambdamiddleware.NewStack(
		func(next lambda.Handler) lambda.Handler {
			return lambdamiddleware.HandlerFunc(
				func(ctx context.Context, payload []byte) ([]byte, error) {
					fmt.Println("[start middleware1]")
					output, err := next.Invoke(ctx, payload)
					fmt.Println("[end middleware1]")
					return output, err
				},
			)
		},
		func(next lambda.Handler) lambda.Handler {
			return lambdamiddleware.HandlerFunc(
				func(ctx context.Context, payload []byte) ([]byte, error) {
					fmt.Println("[start middleware2]")
					output, err := next.Invoke(ctx, payload)
					fmt.Println("[end middleware2]")
					return output, err
				},
			)
		},
	)
	s.Append(
		func(next lambda.Handler) lambda.Handler {
			return lambdamiddleware.HandlerFunc(
				func(ctx context.Context, payload []byte) ([]byte, error) {
					fmt.Println("[start middleware3]")
					output, err := next.Invoke(ctx, payload)
					fmt.Println("[end middleware3]")
					return output, err
				},
			)
		},
	)
	handler := s.Then(func(ctx context.Context, event json.RawMessage) error {
		fmt.Println("[handler]", string(event))
		return nil
	})
	// lambda.Start(handler)
	handler.Invoke(context.Background(), []byte("{}"))

}
Output:

[start middleware1]
[start middleware2]
[start middleware3]
[handler] {}
[end middleware3]
[end middleware2]
[end middleware1]

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func WrapParametersAndSecrets added in v0.1.0

func WrapParametersAndSecrets(handler interface{}, cfg *ParametersAndSecretsConfig) (lambda.Handler, error)

Types

type HandlerFunc

type HandlerFunc func(ctx context.Context, payload []byte) ([]byte, error)

HandlerFunc er en type anonym funktion, der opfylder grænsefladen lambda.Handler

func (HandlerFunc) Invoke

func (h HandlerFunc) Invoke(ctx context.Context, payload []byte) ([]byte, error)

type Middleware

type Middleware func(next lambda.Handler) lambda.Handler

Middleware describes the processing that precedes the execution of the Lambda Handler.

func ParametersAndSecrets added in v0.1.0

func ParametersAndSecrets(cfg *ParametersAndSecretsConfig) (Middleware, error)

type ParametersAndSecretsConfig added in v0.1.0

type ParametersAndSecretsConfig struct {
	Names             []string
	ExtentionHTTPPort int
	Client            *http.Client
	ContextKeyFunc    func(key string) interface{}
	SetEnv            bool
	EnvPrefix         string
	// contains filtered or unexported fields
}

func (*ParametersAndSecretsConfig) WithDecryption added in v0.1.0

func (cfg *ParametersAndSecretsConfig) WithDecryption(value bool) *ParametersAndSecretsConfig

type Stack

type Stack struct {
	// contains filtered or unexported fields
}

Stack is a middleware Stack for the Lambda Handler.

func NewStack

func NewStack(middlewares ...Middleware) *Stack

func (*Stack) Append

func (s *Stack) Append(middleware Middleware)

Append adds new middleware to Stack The added middleware is executed last.

func (*Stack) Then

func (s *Stack) Then(handler interface{}) lambda.Handler

Then apply the middleware to a certain handler.

Directories

Path Synopsis
_examples

Jump to

Keyboard shortcuts

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