Need a Codepipeline Structure to deploy your Serverless Project with Quality? See this repo!
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
functions:
# 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
# Background Function
books-consumer:
handler: modules/books/functions/worker/handler.worker #Path to function
events:
- schedule: #Cloudwatch Event Trigger
rate: cron(* * * * * *) # Cron Syntax
enabled: true # Trigger Enabled
This boilerplate uses serverless-local
plugin and some containers and plugins to emulate the AWS Resources
docker-compose up
The applications will start on http://localhost:3000
This boilerplate contains following plugins for local development:
serverless deploy -v
serverless deploy function -f books-consumer
serverless books-consumer -f bananinha -t
serverless remove
Create Book
curl -X POST \
-H "Content-Type: application/json" \
-d '{"title": "American Gods", "author": "Neil Gaiman", "price": 10.00 }' \
https://yur25zhqo0.execute-api.us-east-1.amazonaws.com/production/services/books -i
List Books
curl -X GET \
https://yur25zhqo0.execute-api.us-east-1.amazonaws.com/production/services/books
Detail Book
curl -X GET \
https://yur25zhqo0.execute-api.us-east-1.amazonaws.com/production/services/books/456c9e8f-6c50-d656-dc69-dc828c42af65
Delete Book
curl -X DELETE \
https://yur25zhqo0.execute-api.us-east-1.amazonaws.com/production/services/books/456c9e8f-6c50-d656-dc69-dc828c42af65 -i
Update Book
curl -X PUT \
-d '{"title": "updated modafoca"}' -H "Content-type: application/json" \
https://eusrv4mci5.execute-api.us-east-1.amazonaws.com/production/services/books/bbafdb0c-ee6e-fca0-f224-ed534f5b7766 -i
Creating and Using custom variables to build dynamic name
custom:
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
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}.amazonaws.com/#{AWS::AccountId}/${self:custom.sqs-logs}'
REGION: ${self:custom.region}
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: "*"
# 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}
AttributeDefinitions:
- AttributeName: hashkey
AttributeType: S
KeySchema:
- AttributeName: hashkey
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 2
WriteCapacityUnits: 1
# SQS Queue to Update DynamoDB
BooksQueueExample:
Type: AWS::SQS::Queue
Properties:
QueueName: ${self:custom.sqs-logs}
MessageRetentionPeriod: 1209600
VisibilityTimeout: 60
If you are interested in learning more about how Jest works, what the architecture behind the framework is, and how Jest is split up into individual reusable packages, check out this video:
Spring可能是所有企业应用程序的一站式商店。 但是,Spring是模块化的,允许您挑选和选择适用于您的模块,而无需引入其余模块。 以下部分提供有关Spring Framework中可用的所有模块的详细信息。 Spring Framework提供了大约20个可以根据应用程序需求使用的模块。 核心容器 核心容器由核心,Bean,上下文和表达式语言模块组成,其详细信息如下 - Core模块提供了框架
以下是Spring Batch架构的图解表示。 如图所示,该体系结构包含三个主要组件,即Application, Batch Core和Batch Infrastructure 。 Application - 该组件包含我们使用Spring Batch框架编写的所有作业和代码。 Batch Core - 此组件包含控制和启动批处理作业所需的所有API类。 Batch Infrastructure
Architecture https://rafaelfgx-architecture.herokuapp.com This project is an example of architecture using new technologies and best practices. The goal is to share knowledge and use it as reference f
云原生应用开发 回顾过去二十年,应用开发有以下几个显著的特点: 以应用服务器为中心,典型应用服务器包括 tomcat,JBoss,WebLogic,WebSphere,应用服务器提供了丰富的技术堆栈和系统构建范式,对应用开发人员友好 JavaEE/Spring,JavaEE/Spring 是应用开发的基本技能,这项技能有广泛的开发者基础,过去二十年中 JavaEE/Spring 的技术发展/版本的
The Serverless Framework (无服务器架构)允许你自动扩展、按执行付费、将事件驱动的功能部署到任何云。 目前支持 AWS Lambda、Apache OpenWhisk、Microsoft Azure,并且正在扩展以支持其他云提供商。 Serverless 降低了维护应用程序的总成本,能够更快地构建更多逻辑。它是一个命令行工具,提供脚手架、工作流自动化和开发部署无服务器架构的最佳实践。它也可以通过插件完全扩展。