ginger
is the framework manages Serverless
architecture for Go runtime.
ginger
manages following AWS services:
API Gateway
endpointsS3
storage filesCloudwatch
schedule events and Lambda function loggerLambda
forgo1.x
runtime
- Go (we recommend latest version)
- AWS user who has above resource permissions
You can download prebuilt binary at Release.
But although you need to install Go
for compile Lambda function.
To see a general usage, run ginger help
command.
Run the ginger init
command at your project directory:
cd /path/to/project
ginger init
>>> some output...
If you want to use (probably almost case yes) external Go package, we suggest you should put project directory under the $GOPATH/src
to enable to detect vendor tree.
For example:
export GOPATH=$HOME/go
cd $HOME/go/src/ginger-project
ginger init
ginger
wants to input Lambda execution role
and S3 storage name
, you should input suitable value.
To create new function, run the ginger function create --name [function name]
command.
ginger
creates function structure under the functions/
directory, and write out to configuration of Ginger.toml
.
ginger function create --name example
You can find a functions/example
directory which contains main.go
and Function.toml
.
The main.go
is a Lambda function handler. The github.com/aws/aws-lambda-go/lambda
is installed as default.
On the other hand, the Function.toml
is setting file of Lambda function e.g. memory limit, timeout, and so on.
Of course you can install additional package with go get
or other verndoring tools like glide
, dep
, ...
Note that ginger function create
creates function only on your local. To work on AWS Lambda
, you need to deploy function
.
After you modified a function, run ginger deploy function
command to deploy to the AWS Lambda
.
ginger deploy function (--name [destination function])
ginger
compiles function automatically and archive to zip
, finally send to AWS
to create on destination region.
Or ginger function deploy
is alias of this command, so you can also use it to deploy function.
Once you deployed function to AWS
, you can invoke the function via AWS Lambda
:
ginger function invoke --name [function name] --event [event source json]
An --event
option indicates event source for input of lambda function handler. ginger
gets the payload as following options and pass to the function input:
- If option doesn't exists, pass as empty payload
- If option supplied as string, pass as it is
- If option starts with
@
, likecurl
, ginger tries to load the file and pass its content
After invocation end, the result print on your terminal.
To see in details, run the help command:
ginger function help
To create API endpoint, run the ginger resource create --path [endpoint path]
command.
ginger
creates endpoint on Ginger.toml
.
ginger resource create --path /foo/bar
Note that ginger resource create
creates endpoint info only on your local. To work on AWS API Gateway
, you need to deploy api
.
After you created endpoint, run ginger deploy resource
command to deploy to the AWS API Gateway
.
ginger deploy resource --stage [target stage] (--path [destination path])
Command creates resouce which we need, and also create root REST API
if you haven't create it.
if --stage
option id supplied, ginger tries to create deployment to target stage. Otherwise, only create resources.
Note that the AWS API Gateway
manages endpoints as pathpart
, it is part of segment, so we need to create recursively by each segment.
But you don't need to care about it because ginger
creates and manages sub-path automatically and save on Ginger.toml
.
In detail, see AWS API Gateway documentation.
Or ginger resource deploy
is alias of this command, so you can also use it to deploy resources.
The AWS API Gateway
supports Lambda Proxy Integration, and ginger
can manage its feature.
To set up it, run ginger function mount
command with function name and endpoint option:
ginger function mount
Then, ginger
asks target function and endpoint by choosing list. After select both and deploy api to AWS, proxy integration creates automatically.
Let's access to API Gateway URL!
In default, the API Gateway
endpoint is complicated a little. So you can invoke HTTP request through ginger resource invoke
command with --stage
option to determine invoke stage.
ginger resource invoke --stage [stage name]
ginger
asks path input, make request URI and send HTTP request, and outputs response headers and body.
Now writing...
Checkout this project and build locally:
cd $GOPATH
go get github.com/ysugimoto/ginger
cd src/github.com/ysugimoto/ginger
make
On make
command builds with debug flag
. This flag dumps stacktrace on error and all AWS SDK requests and responses.
It will help you how command processed.
We welcome your feedbacks and PRs :-)
MIT
ysugimoto (Yoshiaki Sugimoto)