by msfidelis

:package: :zap: :rocket: Boilerplate to organize and deploy big projects using AWS API Gateway and...

233 Stars 32 Forks Last release: Not found MIT License 94 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Serverless Architecture Boilerplate serverless License: MIT Build Status

CI / CD Pipeline

Need a Codepipeline Structure to deploy your Serverless Project with Quality? See this repo!

Serverless Archictecture Boilerplate with Go?

Looking for boilerplates to organize big projects using AWS Lambda with Go? See this repo


├── modules (modules folder)
│   └── books (module / context)
│       ├── endpoints (API endpoints)
│       │   ├── create.js
│       │   ├── delete.js
│       │   ├── read.js
│       │   └── update.js
│       └── functions (workers / background functions)
│           └── worker
│               └── handler.js
├── package.json
├── serverless.yml (serverless config)
├── handlers (functions config)
│   ├── books-endpoints.yml (endpoints config)
│   └── books-workers.yml (workers config)
├── shared (shared components)
│   └── lib (shared libraries)
│       ├── dynamo.js
│       ├── kinesis.js
│       ├── lambda.js
│       ├── parsers.js
│       ├── sqs.js
│       └── uuid.js
└── test (tests folder)
    └── unit (unit tests folder)
        ├── modules (unit tests for modules)
        │   └── books
        └── shared (unit tests for shared components)
            └── lib (unit tests for libraries)
                ├── dynamo.test.js
                ├── kinesis.test.js
                ├── parsers.test.js
                ├── sqs.test.js
                └── uuid.test.js


HTTP Trigger Function (API Gateway)


API Endpoints

books-register: handler: modules/books/endpoints/create.create #Path to function memorySize: 128 # Lambda Memory Limit timeout: 60 # Lambda Timeout events: - http: # HTTP Trigger path: services/books # API Endpoint method: post # HTTP Method

Cloudwatch Events Functions (Cron)

Lambda Schedule Docs

# Background Function
    handler: modules/books/functions/worker/handler.worker #Path to function
      - schedule: #Cloudwatch Event Trigger
        rate: cron(* * * * * *) # Cron Syntax 
        enabled: true # Trigger Enabled

Development environment

This boilerplate uses

plugin and some containers and plugins to emulate the AWS Resources
docker-compose up

The applications will start on


Dev Plugins

This boilerplate contains following plugins for local development:

Production environment

Deploy full services

serverless deploy -v


Deploy a function

serverless deploy function -f books-consumer

Get function logs

serverless books-consumer -f bananinha -t

Clean All

serverless remove


Create Book

curl -X POST \
    -H "Content-Type: application/json" \
    -d '{"title": "American Gods", "author": "Neil Gaiman", "price": 10.00  }' \ -i

List Books

curl -X GET \


Detail Book

curl -X GET \

Delete Book

curl -X DELETE \ -i 

Update Book

curl -X PUT \
    -d '{"title": "updated modafoca"}' -H "Content-type: application/json" \ -i


Custom and Environment Variables

Custom Items

Creating and Using custom variables to build dynamic name

  region: ${self:provider.region} 
  stage: ${opt:stage, self:provider.stage}
  prefix: ${self:custom.stage}-${self:service}
  process: ${self:custom.prefix}-process
  config: ${self:custom.prefix}-config
  dynamo-books: ${self:custom.prefix}-BooksCatalog
  sns-logs: ${self:custom.prefix}-trigger-logs 
  sqs-logs: ${self:custom.prefix}-messages-logs

Environment Variables

Building URL Resources using CloudFormation parameters and Custom Variables

  environment: # Global Environment variables
    DYNAMO_TABLE_BOOKS: ${self:custom.dynamo-books} # Reference to Custom Env
    SQS_QUEUE_URL: 'https://sqs.${self:provider.region}{AWS::AccountId}/${self:custom.sqs-logs}'
    REGION: ${self:custom.region}

Manage AWS Cloudformation with Serverless

IAM Roles

IAM Docs

  iamRoleStatements: # Permissions for all of your functions can be set here

  • Effect: Allow Action: # Gives permission to DynamoDB tables in a specific region

    • dynamodb:DescribeTable
    • dynamodb:Query
    • dynamodb:Scan
    • dynamodb:GetItem
    • dynamodb:PutItem
    • dynamodb:UpdateItem
    • dynamodb:DeleteItem Resource: "arn:aws:dynamodb:us-east-1::"
  • Effect: Allow Action: # Gives permission to Lambda execution

    • lambda:InvokeFunction
    • lambda:InvokeAsync Resource: "*"

Manage Infrastructure Components - Docs

# Infrastrucure - Cloud Formation
resources:  # CloudFormation template syntax

Resources: #DynamoDB Books Table BooksCatalog: Type: AWS::DynamoDB::Table # CloudFormation Pseudo Parameter Example Properties:

TableName: ${self:custom.dynamo-books}
  - AttributeName: hashkey
    AttributeType: S
  - AttributeName: hashkey
    KeyType: HASH
  ReadCapacityUnits: 2
  WriteCapacityUnits: 1

SQS Queue to Update DynamoDB

BooksQueueExample: Type: AWS::SQS::Queue Properties:

QueueName: ${self:custom.sqs-logs}
MessageRetentionPeriod: 1209600
VisibilityTimeout: 60

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.