/
aws.go
49 lines (39 loc) · 998 Bytes
/
aws.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package lambda
import (
"encoding/json"
"errors"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/lambda"
)
type AWSLambdaManager struct {
client *lambda.Lambda
}
func NewAWSLambdaManager(session *session.Session) *AWSLambdaManager {
return &AWSLambdaManager{
client: lambda.New(session),
}
}
func (m *AWSLambdaManager) Invoke(name string, payload interface{}) error {
// encode the payload to JSON
encoded, err := json.Marshal(payload)
if err != nil {
return err
}
resp, err := m.client.Invoke(&lambda.InvokeInput{
FunctionName: aws.String(name),
InvocationType: aws.String(lambda.InvocationTypeEvent),
Payload: encoded,
})
if err != nil {
return err
}
if *(resp.StatusCode) != 202 {
if resp.FunctionError != nil {
return errors.New(*(resp.FunctionError))
}
return errors.New(fmt.Sprintf("lambda invocation resulted in status code: %d", *(resp.StatusCode)))
}
return nil
}