/
main.go
73 lines (59 loc) · 1.96 KB
/
main.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package main
import (
"context"
"os"
"go.uber.org/zap"
lambdaclient "github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/lambda"
"github.com/yunomu/kansousen/lib/lambda/lambdagateway"
"github.com/yunomu/kansousen/lib/lambda/lambdarpc"
)
var logger *zap.Logger
func init() {
l, err := zap.NewProduction()
if err != nil {
panic(err)
}
logger = l
}
type apiLogger struct{}
func (*apiLogger) Error(msg string, err error) {
logger.Error(msg, zap.Error(err))
}
func main() {
ctx := context.Background()
region := os.Getenv("REGION")
if region == "" {
zap.L().Fatal("Getenv", zap.String("key", "REGION"))
}
kifuFuncArn := os.Getenv("KIFU_FUNCTION")
if kifuFuncArn == "" {
zap.L().Fatal("Getenv", zap.String("key", "KIFU_FUNCTION"))
}
basePath := os.Getenv("BASE_PATH")
session := session.New()
lambdaClient := lambda.New(session, aws.NewConfig().WithRegion(region))
gw := lambdagateway.NewLambdaGateway(lambdaClient,
lambdagateway.WithAPIRequestID(lambdarpc.ApiRequestIdField),
lambdagateway.WithClaimSubID(lambdarpc.UserIdField),
lambdagateway.AddFunction("/post-kifu", "POST", kifuFuncArn, "PostKifu"),
lambdagateway.AddFunction("/get-kifu", "POST", kifuFuncArn, "GetKifu"),
lambdagateway.AddFunction("/delete-kifu", "POST", kifuFuncArn, "DeleteKifu"),
lambdagateway.AddFunction("/recent-kifu", "POST", kifuFuncArn, "RecentKifu"),
lambdagateway.AddFunction("/same-positions", "POST", kifuFuncArn, "GetSamePositions"),
lambdagateway.SetBasePath(basePath),
lambdagateway.SetLogger(&apiLogger{}),
lambdagateway.SetFunctionErrorHandler(func(e *lambdagateway.LambdaError) error {
switch e.ErrorType {
case "InvalidArgumentError":
return lambdagateway.ClientError(400, e.ErrorMessage)
default:
zap.L().Error("lambda.Invoke", zap.Any("error", e))
return lambdagateway.ServerError()
}
}),
)
lambdaclient.StartWithContext(ctx, gw.Serve)
}