90 lines
3.0 KiB
Go
90 lines
3.0 KiB
Go
|
// Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||
|
//
|
||
|
// Helpers for accessing context information from an Invoke request. Context information
|
||
|
// is stored in a https://golang.org/pkg/context/#Context. The functions FromContext and NewContext
|
||
|
// are used to retrieving and inserting an isntance of LambdaContext.
|
||
|
|
||
|
package lambdacontext
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"os"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
// LogGroupName is the name of the log group that contains the log streams of the current Lambda Function
|
||
|
var LogGroupName string
|
||
|
|
||
|
// LogStreamName name of the log stream that the current Lambda Function's logs will be sent to
|
||
|
var LogStreamName string
|
||
|
|
||
|
// FunctionName the name of the current Lambda Function
|
||
|
var FunctionName string
|
||
|
|
||
|
// MemoryLimitInMB is the configured memory limit for the current instance of the Lambda Function
|
||
|
var MemoryLimitInMB int
|
||
|
|
||
|
// FunctionVersion is the published version of the current instance of the Lambda Function
|
||
|
var FunctionVersion string
|
||
|
|
||
|
func init() {
|
||
|
LogGroupName = os.Getenv("AWS_LAMBDA_LOG_GROUP_NAME")
|
||
|
LogStreamName = os.Getenv("AWS_LAMBDA_LOG_STREAM_NAME")
|
||
|
FunctionName = os.Getenv("AWS_LAMBDA_FUNCTION_NAME")
|
||
|
if limit, err := strconv.Atoi(os.Getenv("AWS_LAMBDA_FUNCTION_MEMORY_SIZE")); err != nil {
|
||
|
MemoryLimitInMB = 0
|
||
|
} else {
|
||
|
MemoryLimitInMB = limit
|
||
|
}
|
||
|
FunctionVersion = os.Getenv("AWS_LAMBDA_FUNCTION_VERSION")
|
||
|
}
|
||
|
|
||
|
// ClientApplication is metadata about the calling application.
|
||
|
type ClientApplication struct {
|
||
|
InstallationID string `json:"installation_id"`
|
||
|
AppTitle string `json:"app_title"`
|
||
|
AppVersionCode string `json:"app_version_code"`
|
||
|
AppPackageName string `json:"app_package_name"`
|
||
|
}
|
||
|
|
||
|
// ClientContext is information about the client application passed by the calling application.
|
||
|
type ClientContext struct {
|
||
|
Client ClientApplication
|
||
|
Env map[string]string `json:"env"`
|
||
|
Custom map[string]string `json:"custom"`
|
||
|
}
|
||
|
|
||
|
// CognitoIdentity is the cognito identity used by the calling application.
|
||
|
type CognitoIdentity struct {
|
||
|
CognitoIdentityID string
|
||
|
CognitoIdentityPoolID string
|
||
|
}
|
||
|
|
||
|
// LambdaContext is the set of metadata that is passed for every Invoke.
|
||
|
type LambdaContext struct {
|
||
|
AwsRequestID string
|
||
|
InvokedFunctionArn string
|
||
|
Identity CognitoIdentity
|
||
|
ClientContext ClientContext
|
||
|
}
|
||
|
|
||
|
// An unexported type to be used as the key for types in this package.
|
||
|
// This prevents collisions with keys defined in other packages.
|
||
|
type key struct{}
|
||
|
|
||
|
// The key for a LambdaContext in Contexts.
|
||
|
// Users of this package must use lambdacontext.NewContext and lambdacontext.FromContext
|
||
|
// instead of using this key directly.
|
||
|
var contextKey = &key{}
|
||
|
|
||
|
// NewContext returns a new Context that carries value lc.
|
||
|
func NewContext(parent context.Context, lc *LambdaContext) context.Context {
|
||
|
return context.WithValue(parent, contextKey, lc)
|
||
|
}
|
||
|
|
||
|
// FromContext returns the LambdaContext value stored in ctx, if any.
|
||
|
func FromContext(ctx context.Context) (*LambdaContext, bool) {
|
||
|
lc, ok := ctx.Value(contextKey).(*LambdaContext)
|
||
|
return lc, ok
|
||
|
}
|