Boilerplate Golang API with AWS Severless Application Model (SAM) Deployment to AWS Lambda & API Gateway
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin/githooks
.gitignore
.overcommit.yml
.pre-commit-config.yaml
.travis.yml
Gopkg.lock
Gopkg.toml
LICENSE
Makefile
README.md
handlers.go
handlers_test.go
template.yaml

README.md

Build Status Go Report Card

go-serverless-api

  • Boilerplate Golang API
  • AWS Severless Application Model (SAM) Deployment to AWS Lambda & API Gateway

Deploy to AWS

1. Build and package into a zip

$ make bundle-lambda

2. Upload zip to AWS S3 & create updated SAM template (packaged-template.yaml)

$ aws s3 mb s3://my-bucket

$ aws cloudformation package \
    --template-file template.yaml \
    --s3-bucket my-bucket \
    --output-template-file packaged-template.yaml

2. Deploy to AWS Lambda & API Gateway with updated SAM template

$ aws cloudformation deploy \
    --template-file packaged-template.yaml \
    --stack-name go-serverless-api-stack \
    --capabilities CAPABILITY_IAM

3. Test

AWS API Gateway addresses take the following format.

https://<api-rest-id>.execute-api.<your-aws-region>.amazonaws.com/<api-stage>
$ aws apigateway get-rest-apis
{
    "items": [
        {
            "id": "0qu18x8pyd",
            "name": "go-serverless-api-stack",
            "createdDate": 1523987269,
            "version": "1.0",
            "apiKeySource": "HEADER",
            "endpointConfiguration": {
                "types": [
                    "EDGE"
                ]
            }
        }
    ]
}
$ curl -s https://0qu18x8pyd.execute-api.eu-west-1.amazonaws.com/Stage/healthz
ok
$ curl -s https://0qu18x8pyd.execute-api.eu-west-1.amazonaws.com/Prod/healthz
ok

4. Delete Stack

$ aws cloudformation delete-stack \
	--stack-name go-serverless-api-stack

Local Development

Build & Run API

$ make run

Manually call APi

$ make test-run

Tests

$ go test ./...