github.com/terraform-modules-krish/terratest@v0.29.0/modules/aws/lambda.go (about) 1 package aws 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 "github.com/aws/aws-sdk-go/service/lambda" 8 "github.com/terraform-modules-krish/terratest/modules/testing" 9 "github.com/stretchr/testify/require" 10 ) 11 12 // InvokeFunction invokes a lambda function. 13 func InvokeFunction(t testing.TestingT, region, functionName string, payload interface{}) []byte { 14 out, err := InvokeFunctionE(t, region, functionName, payload) 15 require.NoError(t, err) 16 return out 17 } 18 19 // InvokeFunctionE invokes a lambda function. 20 func InvokeFunctionE(t testing.TestingT, region, functionName string, payload interface{}) ([]byte, error) { 21 lambdaClient, err := NewLambdaClientE(t, region) 22 if err != nil { 23 return nil, err 24 } 25 26 invokeInput := &lambda.InvokeInput{ 27 FunctionName: &functionName, 28 } 29 30 if payload != nil { 31 payloadJson, err := json.Marshal(payload) 32 33 if err != nil { 34 return nil, err 35 } 36 invokeInput.Payload = payloadJson 37 } 38 39 out, err := lambdaClient.Invoke(invokeInput) 40 require.NoError(t, err) 41 if err != nil { 42 return nil, err 43 } 44 45 if out.FunctionError != nil { 46 return out.Payload, &FunctionError{Message: *out.FunctionError, StatusCode: *out.StatusCode, Payload: out.Payload} 47 } 48 49 return out.Payload, nil 50 } 51 52 type FunctionError struct { 53 Message string 54 StatusCode int64 55 Payload []byte 56 } 57 58 func (err *FunctionError) Error() string { 59 return fmt.Sprintf("%s error invoking lambda function: %v", err.Message, err.Payload) 60 } 61 62 // NewLambdaClient creates a new Lambda client. 63 func NewLambdaClient(t testing.TestingT, region string) *lambda.Lambda { 64 client, err := NewLambdaClientE(t, region) 65 require.NoError(t, err) 66 return client 67 } 68 69 // NewLambdaClientE creates a new Lambda client. 70 func NewLambdaClientE(t testing.TestingT, region string) (*lambda.Lambda, error) { 71 sess, err := NewAuthenticatedSession(region) 72 if err != nil { 73 return nil, err 74 } 75 76 return lambda.New(sess), nil 77 }