What, why, how in less than 10 slides
Bare
Metal
VMs
App. Servers
Serverless
Hetzner
DigitalOcean
Heroku
AWS Lambda
/**
* This is an example of a controller aka handler.
*/
module.exports.handler = async function registerUserHandler(event, context, callback) {
const { name, email, country } = event.body; // This is raw input directly from a client
const userId = await db.save({ name, email, country });
events.emit(USER_REGISTERED, userId);
callback(null, {
statusCode: 200,
headers: {},
body: {
success: true,
response: { userId, name, email, country }
}
})
}
$ curl -X POST \
-D '{\"name\":\"Kostas\",\"email\":\"konmpar@gmail.com\",\"country\":\"GR\"}' \
https://a.domain.com/users
/**
* Response:
*
* {
* success: true,
* response: {
* userId: 321,
* name: "Kostas",
* email: "konmpar@gmail.com",
* country: "GR"
* }
* }
*/
service: serverless-example
provider:
name: aws
runtime: nodejs4.3
environment:
DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}
functions:
create:
handler: users/register.handler
events:
- http:
path: users
method: post
cors: true
resources:
Resources:
UsersDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
-
AttributeName: id
AttributeType: S
KeySchema:
-
AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:provider.environment.DYNAMODB_TABLE}
* API Gateway
* DynamoDB record change
* S3 file contents change
* Time change (cron)
* Plus much more
All these can trigger a Lambda Function
* Cost effective
* Auto-scaling
* Many many many things out of the box
* Vendor lock-in
* Not exactly simpler
* Development experience is
😎