SlideShare a Scribd company logo
USING THE SERVERLESS
FRAMEWORK
Presented by: Tyler Hendrickson
tyler@shiftgig.com
WHAT IS “SERVERLESS”? (The Concept)
• No servers!
• Infrastructure-as-Code
• More time focusing on features that matter to your users
WHY SERVERLESS? (The Framework)
• Easy to get started
WHY SERVERLESS? (The Framework)
• Easy to get started
• Simple templating
WHY SERVERLESS? (The Framework)
• Easy to get started
• Simple templating
• Language-agnostic
WHY SERVERLESS? (The Framework)
• Easy to get started
• Simple templating
• Language-agnostic
• Active community
WHY SERVERLESS? (The Framework)
• Easy to get started
• Simple templating
• Language-agnostic
• Active community
• Good support for common event sources
WHY SERVERLESS? (The Framework)
• Easy to get started
• Simple templating
• Language-agnostic
• Active community
• Good support for common event sources
• Supports various aspects of the development
lifecycle
WHAT ARE MY ALTERNATIVES?
SAM
(Serverless Application Model)
Chalice
?
HOW DO WE USE SERVERLESS AT SHIFTGIG?
• A few notes about Shiftgig architecture:
+ Microservices!
+ Microservice = Codebase = CloudFormation stack = Serverless application
+ Lambda functions as the main compute resource of choice
+ Avoid HTTP(S)-based communication between microservices and prefer asynchronous
messaging instead
+ Microservice stacks are self-contained with little to no overlapping resources
+ Domain models
HOW DO WE USE SERVERLESS AT SHIFTGIG?
WAIT…
ISN’T THIS SUPPOSED TO BE
A WORKSHOP?
GETTING STARTED: PREREQUISITES
• Development requirements:
+ Serverless:
• Node JS
• NPM
• npm install -g serverless
+ Development:
• Python 3.6 (not strictly necessary, but the examples will conform to this)
• Also: Pipenv or pip + virtualenv
• Project directory/workspace
GETTING STARTED: PREREQUISITES
• AWS authentication
+ Serverless will authenticate with AWS automatically using your environment-sourced AWS
credentials.
+ Check for ~/.aws/config and ~/.aws/credentials files
+ If you use an AWS config file, make sure you set this environment variable to instruct the
Node JS AWS SDK (used internally by Serverless) to load the config file:
$ export AWS_SDK_LOAD_CONFIG=1
GETTING STARTED: PREREQUISITES
• Deployment requirements:
+ AWS account (full permissions are ideal)
+ AWS services we will use
• Lambda
• API Gateway
• DynamoDB
• CloudWatch
• CloudFormation
• S3
STEP 0: GOALS
• We will create a simple cloud-native service in AWS as a CloudFormation
stack
• Our service will…
+ Execute custom logic defined as code run within Lambda functions
+ Store data in a DynamoDB table
+ Provide a web API with API Gateway
+ Log execution data to CloudWatch
• But what will my application do?
• Navigate to your project directory and set up your development workspace
+ $ cd ~/your/projects
$ git clone git@github.com:shiftgig/aws-serverless-workshop.git
+ Using Python with Pipenv?
$ pipenv shell --python 3.6 to set up your virtual environment
+ Initialize Node JS in the current directory:
$ npm init -f to create a package.json file
$ npm install to install plugin dependencies
+ Open in your editor: serverless.yml
STEP 1: CONFIGURE SERVERLESS
STEP 1: CONFIGURE SERVERLESS
service: candystore
plugins:
- serverless-python-requirements # Python only
custom:
foo: bar
Name your service. This is
used to name your AWS
resources.
Define array of Serverless
plugins
STEP 1: CONFIGURE SERVERLESS
custom:
foo: bar
pythonRequirements: # Python only
usePipenv: true
dockerizePip: true
dockerImage: lambci/lambda:build-python3.6
dockerSsh: true
The custom section lets you
define arbitrary variables that
you can reference in other
parts of your Serverless config
file.
This section is also often used
to configure your installed
Serverless plugins.
These docker* values tell
Serverless to use a Docker
image that matches the
Lambda Python 3.6 runtime to
install dependencies.
STEP 1: CONFIGURE SERVERLESS
provider:
name: aws
stage: ${opt:stage}
region: ${opt:region}
logRetentionInDays: 7
stackTags:
SERVICE: ${self:service}
iamRoleStatements:
environment:
FOO_VALUE: ${self:custom.foo}
The provider section
configures values specific
to your vendor.
STEP 1: CONFIGURE SERVERLESS
Our vendor is AWS.
provider:
name: aws
stage: ${opt:stage}
region: ${opt:region}
logRetentionInDays: 7
stackTags:
SERVICE: ${self:service}
iamRoleStatements:
environment:
FOO_VALUE: ${self:custom.foo}
STEP 1: CONFIGURE SERVERLESS
The stage value is used
(along with the service
name) to name resources.
provider:
name: aws
stage: ${opt:stage}
region: ${opt:region}
logRetentionInDays: 7
stackTags:
SERVICE: ${self:service}
iamRoleStatements:
environment:
FOO_VALUE: ${self:custom.foo}
STEP 1: CONFIGURE SERVERLESS
These are variables:
${source:variable}
There are several variable
sources. The opt: source
retrieves variables from
command line flags (e.g.
--region us-east-1 ).
The self: source
references variables from
within this YAML file.
provider:
name: aws
stage: ${opt:stage}
region: ${opt:region}
logRetentionInDays: 7
stackTags:
SERVICE: ${self:service}
iamRoleStatements:
environment:
FOO_VALUE: ${self:custom.foo}
STEP 1: CONFIGURE SERVERLESS
Tagging resources comes
in handy when trying to
control and manage costs
in AWS.
provider:
name: aws
stage: ${opt:stage}
region: ${opt:region}
logRetentionInDays: 7
stackTags:
SERVICE: ${self:service}
iamRoleStatements:
environment:
FOO_VALUE: ${self:custom.foo}
STEP 1: CONFIGURE SERVERLESS
iamRoleStatements is
an array of IAM
permissions used to create
your Lambda functions’
execution role. For now,
we’ll leave it blank.
provider:
name: aws
stage: ${opt:stage}
region: ${opt:region}
logRetentionInDays: 7
stackTags:
SERVICE: ${self:service}
iamRoleStatements:
environment:
FOO_VALUE: ${self:custom.foo}
STEP 1: CONFIGURE SERVERLESS
The environment section
is for defining environment
variables available to your
Lambda functions at
runtime. We’ll add more
useful items to this section
later.
provider:
name: aws
stage: ${opt:stage}
region: ${opt:region}
logRetentionInDays: 7
stackTags:
SERVICE: ${self:service}
iamRoleStatements:
environment:
FOO_VALUE: ${self:custom.foo}
STEP 2: ADD FUNCTIONS
functions:
PutProduct:
description: Creates and updates products
memorySize: 128
runtime: python3.6
handler: handlers.put_product__http
events:
-
http:
method: put
path: "/product/{name}"
request:
parameters:
paths:
name: true
The functions section of
your Serverless
configuration defines the
various Lambda functions
for your service.
STEP 2: ADD FUNCTIONS
Your Lambda function’s
memory allocation, in
megabytes.
functions:
PutProduct:
description: Creates and updates products
memorySize: 128
runtime: python3.6
handler: handlers.put_product__http
events:
-
http:
method: put
path: "/product/{name}"
request:
parameters:
paths:
name: true
STEP 2: ADD FUNCTIONS
functions:
PutProduct:
description: Creates and updates products
memorySize: 128
runtime: python3.6
handler: handlers.put_product__http
events:
-
http:
method: put
path: "/product/{name}"
request:
parameters:
paths:
name: true
Any supported Lambda
runtime
STEP 2: ADD FUNCTIONS
functions:
PutProduct:
description: Creates and updates products
memorySize: 128
runtime: python3.6
handler: handlers.put_product__http
events:
-
http:
method: put
path: "/product/{name}"
request:
parameters:
paths:
name: true
The handler string
defines the function in your
source code that should be
called by your Lambda
function when it is invoked.
STEP 2: ADD FUNCTIONS
The events array defines
various triggers for your
Lambda function. Here, we
are defining API Gateway
triggers to expose this
functionality within a web
API.
This marks the name
segment of the URL as
required.
functions:
PutProduct:
description: Creates and updates products
memorySize: 128
runtime: python3.6
handler: handlers.put_product__http
events:
-
http:
method: put
path: "/product/{name}"
request:
parameters:
paths:
name: true
STEP 3: WRITE HANDLER CODE
# handlers.py
import json
from urllib.parse import unquote
def put_product__http(event, context):
payload = json.loads(event['body'])
product = {
'name': unquote(event['pathParameters']['name']),
'price': payload['price'],
'description': payload['description']
}
print('Saving product {}'.format(product['name']))
return {
'statusCode': '200',
'body': json.dumps(product),
'headers': {
'Content-Type': 'application/json'
}
}
Standard (event, context)
signature for our handler function.
The event argument is a dict
containing information about the
request.
STEP 3: WRITE HANDLER CODE
# handlers.py
import json
from urllib.parse import unquote
def put_product__http(event, context):
payload = json.loads(event['body'])
product = {
'name': unquote(event['pathParameters']['name']),
'price': payload['price'],
'description': payload['description']
}
print('Saving product {}'.format(product['name']))
return {
'statusCode': '200',
'body': json.dumps(product),
'headers': {
'Content-Type': 'application/json'
}
}
We’ll add database interactions here,
but just log something for now.
API Gateway expects response data
in this format.
STEP 4: DEPLOY!
$ export SLS_DEBUG=*
$ serverless deploy 
--region us-east-1 
--aws-profile myprofile 
--stage dev 
--verbose
Makes our output nice and verbose!
Specify the AWS region your deployment should target
If you use IAM role-assumption to authenticate with multiple
AWS accounts, specify your profile name here
Sensible and consistent stage values help keep things
organized. It is used to name your CloudFormation stack
and its resources.
Even more verbose!
STEP 4: DEPLOY!
CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - candystore-dev
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - PutProductLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - PutProductLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - PutProductLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceProduct
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceProduct
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Resource - ApiGatewayResourceProduct
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource -
ApiGatewayResourceProductNameVar
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource -
ApiGatewayResourceProductNameVar
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Resource - ApiGatewayResourceProductNameVar
CloudFormation - CREATE_COMPLETE - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - PutProductLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - PutProductLambdaFunction
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Function - PutProductLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Method -
ApiGatewayMethodProductNameVarPut
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version -
PutProductLambdaVersionI17kp6Q9rcYZSzgFOR8MgEqWaxZpBDZjz94X6WavEcD
Look at all that
CloudFormation you
didn’t have to write!
STEP 4: DEPLOY!
Serverless: Stack update finished...
Service Information
service: candystore
stage: dev
region: us-east-1
stack: candystore-dev
api keys:
None
endpoints:
PUT - https://fv907pkjxg.execute-api.us-east-1.amazonaws.com/dev/product/{name}
functions:
PutProduct: candystore-dev-PutProduct
Stack Outputs
PutProductLambdaFunctionQualifiedArn:
arn:aws:lambda:us-east-1:123456789876:function:candystore-dev-PutProduct:1
ServiceEndpoint: https://fv907pkjxg.execute-api.us-east-1.amazonaws.com/dev
ServerlessDeploymentBucketName: candystore-dev-serverlessdeploymentbucket-1s7wgv4xc93h6
Useful information
printed at the end!
Includes our API
Gateway endpoints
STEP 5: TEST
$ curl -X PUT 
https://fv907pkjxg.execute-api.us-east-1.amazonaws.com/dev/product/skittles 
-H 'Content-Type: application/json' 
-d '{
"description": "Taste the rainbow",
"price": "2.55"
}' 
-w 'n'
{"name": "skittles", "price": "2.55", "description": "Taste the rainbow"}
STEP 5: TEST
$ serverless logs 
--function PutProduct 
--region us-east-1 
--aws-profile poc 
--stage dev 
--verbose 
--tail
START RequestId: ff3ff102-692f-11e8-801f-cde97c6f36e8 Version: $LATEST
Saving product skittles
END RequestId: ff3ff102-692f-11e8-801f-cde97c6f36e8
REPORT RequestId: ff3ff102-692f-11e8-801f-cde97c6f36e8 Duration: 1.72 ms
Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 22 MB
STEP 6: ADD A DYNAMODB TABLE
custom:
foo: bar
pythonRequirements: # Python only
usePipenv: true
dockerizePip: true
dockerImage: lambci/lambda:build-python3.6
dockerSsh: true
product_table_name: ${self:service}-${self:provider.stage}-product
We centrally define the
name of our DynamoDB
table in custom so we
can reference it
elsewhere.
resources:
Resources:
ProductDynamoDBTable:
Type: "AWS::DynamoDB::Table"
Properties:
AttributeDefinitions:
-
AttributeName: name
AttributeType: S
KeySchema:
-
AttributeName: name
KeyType: HASH
TableName: ${self:custom.product_table_name}
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
The resources section is reserved for
CloudFormation syntax.
In the Resources subsection, you
define AWS resources for your stack that
aren’t implicitly created for you in the
functions section.
Use the variable defined in custom to
name the table
STEP 6: ADD A DYNAMODB TABLE
iamRoleStatements:
-
Effect: Allow
Action:
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource:
-
Fn::GetAtt: [ "ProductDynamoDBTable", "Arn" ]
We add the IAM permissions
our Lambda functions will
require in order to interact
with our DynamoDB table.
This statement will be added
to the existing execution role.
We can use CloudFormation
intrinsic functions in our
serverless.yml file too!
STEP 6: ADD A DYNAMODB TABLE
environment:
FOO_VALUE: ${self:custom.foo}
PRODUCT_TABLE_NAME: ${self:custom.product_table_name}
We’ll also add an
environment variable to make
our table’s name available to
our Lambda functions
STEP 6: ADD A DYNAMODB TABLE
STEP 6: ADD A DYNAMODB TABLE
# handlers.py
import json
import os
from urllib.parse import unquote
import boto3
def put_product__http(event, context):
payload = json.loads(event['body'])
product = {
'name': unquote(event['pathParameters']['name']),
'price': payload['price'],
'description': payload['description']
}
db = boto3.resource('dynamodb')
table = db.Table(name=os.getenv('PRODUCT_TABLE_NAME'))
table.put_item(Item=product)
print('Saved product {}'.format(product['name']))
return {
'statusCode': '200',
'body': json.dumps(product),
'headers': {
'Content-Type': 'application/json'
Lambda provides the boto3
library automatically.
Save the product to the
DynamoDB table!
STEP 7: DEPLOY CHANGES AND TEST (AGAIN)
$ serverless deploy 
--region us-east-1 
--aws-profile myprofile 
--stage dev 
--verbose
STEP 7: DEPLOY CHANGES AND TEST (AGAIN)
$ curl -X PUT 
https://fv907pkjxg.execute-api.us-east-1.amazonaws.com/dev/product/snickers 
-H 'Content-Type: application/json' 
-d '{
"description": "Hungry? Grab a Snickers!",
"price": "2.55"
}' 
-w 'n'
{"name": "snickers", "price": "1.25", "description": "Hungry? Grab a Snickers!"}
STEP 7: DEPLOY CHANGES AND TEST (AGAIN)
$ serverless logs 
--function PutProduct 
--region us-east-1 
--aws-profile poc 
--stage dev 
--verbose 
--tail 
--startTime 5m
START RequestId: b7ebe0b5-76b0-4b31-bfe9-334892d57674 Version: $LATEST
Saved product snickers
END RequestId: b7ebe0b5-76b0-4b31-bfe9-334892d57674
REPORT RequestId: b7ebe0b5-76b0-4b31-bfe9-334892d57674 Duration: 464.11 ms
Billed Duration: 500 ms Memory Size: 128 MB Max Memory Used: 32 MB
NEXT STEPS: MORE FEATURES
• Respond to GET requests
• Respond to DELETE requests
• Bonus: Restrict access to your API with a usage plan in under 5 minutes!
RECAP
FINAL NOTES: LINKS
• Shiftgig is hiring!
+ https://www.shiftgig.com/careers
• Example code used today:
+ https://github.com/shiftgig/aws-serverless-workshop
Q & A
Ad

More Related Content

What's hot (14)

Riga DevDays 2017 - Efficient AWS Lambda
Riga DevDays 2017 - Efficient AWS LambdaRiga DevDays 2017 - Efficient AWS Lambda
Riga DevDays 2017 - Efficient AWS Lambda
Antons Kranga
 
Aurora Serverless, 서버리스 RDB의 서막 - 트랙2, Community Day 2018 re:Invent 특집
Aurora Serverless, 서버리스 RDB의 서막 - 트랙2, Community Day 2018 re:Invent 특집Aurora Serverless, 서버리스 RDB의 서막 - 트랙2, Community Day 2018 re:Invent 특집
Aurora Serverless, 서버리스 RDB의 서막 - 트랙2, Community Day 2018 re:Invent 특집
AWSKRUG - AWS한국사용자모임
 
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
Serverless cat detector   workshop - cloudyna 2017 (16.12.2017)Serverless cat detector   workshop - cloudyna 2017 (16.12.2017)
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
Paweł Pikuła
 
AWS Lambda from the trenches (Serverless London)
AWS Lambda from the trenches (Serverless London)AWS Lambda from the trenches (Serverless London)
AWS Lambda from the trenches (Serverless London)
Yan Cui
 
Building a serverless company on AWS lambda and Serverless framework
Building a serverless company on AWS lambda and Serverless frameworkBuilding a serverless company on AWS lambda and Serverless framework
Building a serverless company on AWS lambda and Serverless framework
Luciano Mammino
 
JavaDay Lviv: Serverless Archtiectures
JavaDay Lviv: Serverless ArchtiecturesJavaDay Lviv: Serverless Archtiectures
JavaDay Lviv: Serverless Archtiectures
Antons Kranga
 
Aws lambda and accesing AWS RDS - Clouddictive
Aws lambda and accesing AWS RDS - ClouddictiveAws lambda and accesing AWS RDS - Clouddictive
Aws lambda and accesing AWS RDS - Clouddictive
Clouddictive
 
AWS Lambda
AWS LambdaAWS Lambda
AWS Lambda
Scott Leberknight
 
AWS Introduction
AWS IntroductionAWS Introduction
AWS Introduction
Dimosthenis Botsaris
 
Slick eventsourcing
Slick eventsourcingSlick eventsourcing
Slick eventsourcing
Adam Warski
 
Serverless Architectures on AWS Lambda
Serverless Architectures on AWS LambdaServerless Architectures on AWS Lambda
Serverless Architectures on AWS Lambda
Serhat Can
 
Aws Lambda Cart Microservice Server Less
Aws Lambda Cart Microservice Server LessAws Lambda Cart Microservice Server Less
Aws Lambda Cart Microservice Server Less
Dhanu Gupta
 
Node Summit 2018 - Optimize your Lambda functions
Node Summit 2018 - Optimize your Lambda functionsNode Summit 2018 - Optimize your Lambda functions
Node Summit 2018 - Optimize your Lambda functions
Matt Lavin
 
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step FunctionsBUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
Raphael Londner
 
Riga DevDays 2017 - Efficient AWS Lambda
Riga DevDays 2017 - Efficient AWS LambdaRiga DevDays 2017 - Efficient AWS Lambda
Riga DevDays 2017 - Efficient AWS Lambda
Antons Kranga
 
Aurora Serverless, 서버리스 RDB의 서막 - 트랙2, Community Day 2018 re:Invent 특집
Aurora Serverless, 서버리스 RDB의 서막 - 트랙2, Community Day 2018 re:Invent 특집Aurora Serverless, 서버리스 RDB의 서막 - 트랙2, Community Day 2018 re:Invent 특집
Aurora Serverless, 서버리스 RDB의 서막 - 트랙2, Community Day 2018 re:Invent 특집
AWSKRUG - AWS한국사용자모임
 
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
Serverless cat detector   workshop - cloudyna 2017 (16.12.2017)Serverless cat detector   workshop - cloudyna 2017 (16.12.2017)
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
Paweł Pikuła
 
AWS Lambda from the trenches (Serverless London)
AWS Lambda from the trenches (Serverless London)AWS Lambda from the trenches (Serverless London)
AWS Lambda from the trenches (Serverless London)
Yan Cui
 
Building a serverless company on AWS lambda and Serverless framework
Building a serverless company on AWS lambda and Serverless frameworkBuilding a serverless company on AWS lambda and Serverless framework
Building a serverless company on AWS lambda and Serverless framework
Luciano Mammino
 
JavaDay Lviv: Serverless Archtiectures
JavaDay Lviv: Serverless ArchtiecturesJavaDay Lviv: Serverless Archtiectures
JavaDay Lviv: Serverless Archtiectures
Antons Kranga
 
Aws lambda and accesing AWS RDS - Clouddictive
Aws lambda and accesing AWS RDS - ClouddictiveAws lambda and accesing AWS RDS - Clouddictive
Aws lambda and accesing AWS RDS - Clouddictive
Clouddictive
 
Slick eventsourcing
Slick eventsourcingSlick eventsourcing
Slick eventsourcing
Adam Warski
 
Serverless Architectures on AWS Lambda
Serverless Architectures on AWS LambdaServerless Architectures on AWS Lambda
Serverless Architectures on AWS Lambda
Serhat Can
 
Aws Lambda Cart Microservice Server Less
Aws Lambda Cart Microservice Server LessAws Lambda Cart Microservice Server Less
Aws Lambda Cart Microservice Server Less
Dhanu Gupta
 
Node Summit 2018 - Optimize your Lambda functions
Node Summit 2018 - Optimize your Lambda functionsNode Summit 2018 - Optimize your Lambda functions
Node Summit 2018 - Optimize your Lambda functions
Matt Lavin
 
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step FunctionsBUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
Raphael Londner
 

Similar to Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs (13)

Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020
Andrea Scuderi
 
Building Serverless APIs on AWS
Building Serverless APIs on AWSBuilding Serverless APIs on AWS
Building Serverless APIs on AWS
Julien SIMON
 
Integrating Jira Software Cloud With the AWS Code Suite
Integrating Jira Software Cloud With the AWS Code SuiteIntegrating Jira Software Cloud With the AWS Code Suite
Integrating Jira Software Cloud With the AWS Code Suite
Atlassian
 
AWS Serverless Workshop
AWS Serverless WorkshopAWS Serverless Workshop
AWS Serverless Workshop
Mikael Puittinen
 
Developing and deploying serverless applications (February 2017)
Developing and deploying serverless applications (February 2017)Developing and deploying serverless applications (February 2017)
Developing and deploying serverless applications (February 2017)
Julien SIMON
 
muCon 2017 - 12 Factor Serverless Applications
muCon 2017 - 12 Factor Serverless ApplicationsmuCon 2017 - 12 Factor Serverless Applications
muCon 2017 - 12 Factor Serverless Applications
Chris Munns
 
Building serverless applications (April 2018)
Building serverless applications (April 2018)Building serverless applications (April 2018)
Building serverless applications (April 2018)
Julien SIMON
 
An introduction to serverless architectures (February 2017)
An introduction to serverless architectures (February 2017)An introduction to serverless architectures (February 2017)
An introduction to serverless architectures (February 2017)
Julien SIMON
 
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
Cloud Native Day Tel Aviv
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
Loiane Groner
 
Into The Box | Alexa and ColdBox Api's
Into The Box | Alexa and ColdBox Api'sInto The Box | Alexa and ColdBox Api's
Into The Box | Alexa and ColdBox Api's
Ortus Solutions, Corp
 
Serverless solution architecture in AWS
Serverless solution architecture in AWSServerless solution architecture in AWS
Serverless solution architecture in AWS
Runcy Oommen
 
Building Serverless APIs (January 2017)
Building Serverless APIs (January 2017)Building Serverless APIs (January 2017)
Building Serverless APIs (January 2017)
Julien SIMON
 
Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020
Andrea Scuderi
 
Building Serverless APIs on AWS
Building Serverless APIs on AWSBuilding Serverless APIs on AWS
Building Serverless APIs on AWS
Julien SIMON
 
Integrating Jira Software Cloud With the AWS Code Suite
Integrating Jira Software Cloud With the AWS Code SuiteIntegrating Jira Software Cloud With the AWS Code Suite
Integrating Jira Software Cloud With the AWS Code Suite
Atlassian
 
Developing and deploying serverless applications (February 2017)
Developing and deploying serverless applications (February 2017)Developing and deploying serverless applications (February 2017)
Developing and deploying serverless applications (February 2017)
Julien SIMON
 
muCon 2017 - 12 Factor Serverless Applications
muCon 2017 - 12 Factor Serverless ApplicationsmuCon 2017 - 12 Factor Serverless Applications
muCon 2017 - 12 Factor Serverless Applications
Chris Munns
 
Building serverless applications (April 2018)
Building serverless applications (April 2018)Building serverless applications (April 2018)
Building serverless applications (April 2018)
Julien SIMON
 
An introduction to serverless architectures (February 2017)
An introduction to serverless architectures (February 2017)An introduction to serverless architectures (February 2017)
An introduction to serverless architectures (February 2017)
Julien SIMON
 
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
Cloud Native Day Tel Aviv
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
Loiane Groner
 
Into The Box | Alexa and ColdBox Api's
Into The Box | Alexa and ColdBox Api'sInto The Box | Alexa and ColdBox Api's
Into The Box | Alexa and ColdBox Api's
Ortus Solutions, Corp
 
Serverless solution architecture in AWS
Serverless solution architecture in AWSServerless solution architecture in AWS
Serverless solution architecture in AWS
Runcy Oommen
 
Building Serverless APIs (January 2017)
Building Serverless APIs (January 2017)Building Serverless APIs (January 2017)
Building Serverless APIs (January 2017)
Julien SIMON
 
Ad

More from AWS Chicago (20)

Chicago AWS Architectural Resilience Day 2024
Chicago AWS Architectural Resilience Day 2024Chicago AWS Architectural Resilience Day 2024
Chicago AWS Architectural Resilience Day 2024
AWS Chicago
 
David Michels: DevOps My AI at AWS Community Day Midwest 2024
David Michels: DevOps My AI at AWS Community Day Midwest 2024David Michels: DevOps My AI at AWS Community Day Midwest 2024
David Michels: DevOps My AI at AWS Community Day Midwest 2024
AWS Chicago
 
Girish Bhatia: 2024 CommunityDay AWS Lambda develop locally with SAM, Docker ...
Girish Bhatia: 2024 CommunityDay AWS Lambda develop locally with SAM, Docker ...Girish Bhatia: 2024 CommunityDay AWS Lambda develop locally with SAM, Docker ...
Girish Bhatia: 2024 CommunityDay AWS Lambda develop locally with SAM, Docker ...
AWS Chicago
 
Julia Furst Morgado Managing EKS Clusters at Scale using Blueprints and Infra...
Julia Furst Morgado	Managing EKS Clusters at Scale using Blueprints and Infra...Julia Furst Morgado	Managing EKS Clusters at Scale using Blueprints and Infra...
Julia Furst Morgado Managing EKS Clusters at Scale using Blueprints and Infra...
AWS Chicago
 
Max De Jong: Avoiding Common Pitfalls with Hosting Machine Learning Models
Max De Jong: Avoiding Common Pitfalls with Hosting Machine Learning ModelsMax De Jong: Avoiding Common Pitfalls with Hosting Machine Learning Models
Max De Jong: Avoiding Common Pitfalls with Hosting Machine Learning Models
AWS Chicago
 
Jason Butz Building Testable Serverless Applications with the Hexagonal Archi...
Jason Butz	Building Testable Serverless Applications with the Hexagonal Archi...Jason Butz	Building Testable Serverless Applications with the Hexagonal Archi...
Jason Butz Building Testable Serverless Applications with the Hexagonal Archi...
AWS Chicago
 
Muthukumaran Ardhanary AWS Datasync to migrate objects from on-prem to s3
Muthukumaran Ardhanary	AWS Datasync to migrate objects from on-prem to s3Muthukumaran Ardhanary	AWS Datasync to migrate objects from on-prem to s3
Muthukumaran Ardhanary AWS Datasync to migrate objects from on-prem to s3
AWS Chicago
 
Jeff Maruschek: How does RAG REALLY work?
Jeff Maruschek: How does RAG REALLY work?Jeff Maruschek: How does RAG REALLY work?
Jeff Maruschek: How does RAG REALLY work?
AWS Chicago
 
Jay Kahlon: Tagging Compliance The Tags are Coming!
Jay Kahlon: Tagging Compliance The Tags are Coming!Jay Kahlon: Tagging Compliance The Tags are Coming!
Jay Kahlon: Tagging Compliance The Tags are Coming!
AWS Chicago
 
Jason Wadsworth: Step Up Your SaaS Game: Serverless Orchestration and Automat...
Jason Wadsworth: Step Up Your SaaS Game: Serverless Orchestration and Automat...Jason Wadsworth: Step Up Your SaaS Game: Serverless Orchestration and Automat...
Jason Wadsworth: Step Up Your SaaS Game: Serverless Orchestration and Automat...
AWS Chicago
 
Drake Pocsatko: We have HOW many documents? We have HOW many Documents? Archi...
Drake Pocsatko: We have HOW many documents? We have HOW many Documents? Archi...Drake Pocsatko: We have HOW many documents? We have HOW many Documents? Archi...
Drake Pocsatko: We have HOW many documents? We have HOW many Documents? Archi...
AWS Chicago
 
Chris Ebert: Getting Started With Serverless Website Analytics.pdf
Chris Ebert: Getting Started With Serverless Website Analytics.pdfChris Ebert: Getting Started With Serverless Website Analytics.pdf
Chris Ebert: Getting Started With Serverless Website Analytics.pdf
AWS Chicago
 
Cameron Williams: Intelligent Document Processing for Artificial Intelligence
Cameron Williams: Intelligent Document Processing for Artificial IntelligenceCameron Williams: Intelligent Document Processing for Artificial Intelligence
Cameron Williams: Intelligent Document Processing for Artificial Intelligence
AWS Chicago
 
Brian Tarbox: S3 - Sophisticated Storage System
Brian Tarbox: S3 - Sophisticated Storage SystemBrian Tarbox: S3 - Sophisticated Storage System
Brian Tarbox: S3 - Sophisticated Storage System
AWS Chicago
 
Bob Eisenmann and Justin Ranta: Automated Application Delivery on AWS using G...
Bob Eisenmann and Justin Ranta: Automated Application Delivery on AWS using G...Bob Eisenmann and Justin Ranta: Automated Application Delivery on AWS using G...
Bob Eisenmann and Justin Ranta: Automated Application Delivery on AWS using G...
AWS Chicago
 
Mayur Runwal and Steven David: User desktops in AWS for low latency and grap...
Mayur Runwal and Steven David:  User desktops in AWS for low latency and grap...Mayur Runwal and Steven David:  User desktops in AWS for low latency and grap...
Mayur Runwal and Steven David: User desktops in AWS for low latency and grap...
AWS Chicago
 
Justin Wheeler How to Explain AWS to Non-Technical People
Justin Wheeler	How to Explain AWS to Non-Technical PeopleJustin Wheeler	How to Explain AWS to Non-Technical People
Justin Wheeler How to Explain AWS to Non-Technical People
AWS Chicago
 
Angelo Mandato: Learn about the benefits with examples how to create and main...
Angelo Mandato: Learn about the benefits with examples how to create and main...Angelo Mandato: Learn about the benefits with examples how to create and main...
Angelo Mandato: Learn about the benefits with examples how to create and main...
AWS Chicago
 
Christopher Judd: Monitor All Your Stuff with OpenTelemetry and AWS
Christopher Judd: Monitor All Your Stuff with OpenTelemetry and AWSChristopher Judd: Monitor All Your Stuff with OpenTelemetry and AWS
Christopher Judd: Monitor All Your Stuff with OpenTelemetry and AWS
AWS Chicago
 
Lena Taupier: Secure your App from bots and attacks with AWS WAF (Web Applica...
Lena Taupier: Secure your App from bots and attacks with AWS WAF (Web Applica...Lena Taupier: Secure your App from bots and attacks with AWS WAF (Web Applica...
Lena Taupier: Secure your App from bots and attacks with AWS WAF (Web Applica...
AWS Chicago
 
Chicago AWS Architectural Resilience Day 2024
Chicago AWS Architectural Resilience Day 2024Chicago AWS Architectural Resilience Day 2024
Chicago AWS Architectural Resilience Day 2024
AWS Chicago
 
David Michels: DevOps My AI at AWS Community Day Midwest 2024
David Michels: DevOps My AI at AWS Community Day Midwest 2024David Michels: DevOps My AI at AWS Community Day Midwest 2024
David Michels: DevOps My AI at AWS Community Day Midwest 2024
AWS Chicago
 
Girish Bhatia: 2024 CommunityDay AWS Lambda develop locally with SAM, Docker ...
Girish Bhatia: 2024 CommunityDay AWS Lambda develop locally with SAM, Docker ...Girish Bhatia: 2024 CommunityDay AWS Lambda develop locally with SAM, Docker ...
Girish Bhatia: 2024 CommunityDay AWS Lambda develop locally with SAM, Docker ...
AWS Chicago
 
Julia Furst Morgado Managing EKS Clusters at Scale using Blueprints and Infra...
Julia Furst Morgado	Managing EKS Clusters at Scale using Blueprints and Infra...Julia Furst Morgado	Managing EKS Clusters at Scale using Blueprints and Infra...
Julia Furst Morgado Managing EKS Clusters at Scale using Blueprints and Infra...
AWS Chicago
 
Max De Jong: Avoiding Common Pitfalls with Hosting Machine Learning Models
Max De Jong: Avoiding Common Pitfalls with Hosting Machine Learning ModelsMax De Jong: Avoiding Common Pitfalls with Hosting Machine Learning Models
Max De Jong: Avoiding Common Pitfalls with Hosting Machine Learning Models
AWS Chicago
 
Jason Butz Building Testable Serverless Applications with the Hexagonal Archi...
Jason Butz	Building Testable Serverless Applications with the Hexagonal Archi...Jason Butz	Building Testable Serverless Applications with the Hexagonal Archi...
Jason Butz Building Testable Serverless Applications with the Hexagonal Archi...
AWS Chicago
 
Muthukumaran Ardhanary AWS Datasync to migrate objects from on-prem to s3
Muthukumaran Ardhanary	AWS Datasync to migrate objects from on-prem to s3Muthukumaran Ardhanary	AWS Datasync to migrate objects from on-prem to s3
Muthukumaran Ardhanary AWS Datasync to migrate objects from on-prem to s3
AWS Chicago
 
Jeff Maruschek: How does RAG REALLY work?
Jeff Maruschek: How does RAG REALLY work?Jeff Maruschek: How does RAG REALLY work?
Jeff Maruschek: How does RAG REALLY work?
AWS Chicago
 
Jay Kahlon: Tagging Compliance The Tags are Coming!
Jay Kahlon: Tagging Compliance The Tags are Coming!Jay Kahlon: Tagging Compliance The Tags are Coming!
Jay Kahlon: Tagging Compliance The Tags are Coming!
AWS Chicago
 
Jason Wadsworth: Step Up Your SaaS Game: Serverless Orchestration and Automat...
Jason Wadsworth: Step Up Your SaaS Game: Serverless Orchestration and Automat...Jason Wadsworth: Step Up Your SaaS Game: Serverless Orchestration and Automat...
Jason Wadsworth: Step Up Your SaaS Game: Serverless Orchestration and Automat...
AWS Chicago
 
Drake Pocsatko: We have HOW many documents? We have HOW many Documents? Archi...
Drake Pocsatko: We have HOW many documents? We have HOW many Documents? Archi...Drake Pocsatko: We have HOW many documents? We have HOW many Documents? Archi...
Drake Pocsatko: We have HOW many documents? We have HOW many Documents? Archi...
AWS Chicago
 
Chris Ebert: Getting Started With Serverless Website Analytics.pdf
Chris Ebert: Getting Started With Serverless Website Analytics.pdfChris Ebert: Getting Started With Serverless Website Analytics.pdf
Chris Ebert: Getting Started With Serverless Website Analytics.pdf
AWS Chicago
 
Cameron Williams: Intelligent Document Processing for Artificial Intelligence
Cameron Williams: Intelligent Document Processing for Artificial IntelligenceCameron Williams: Intelligent Document Processing for Artificial Intelligence
Cameron Williams: Intelligent Document Processing for Artificial Intelligence
AWS Chicago
 
Brian Tarbox: S3 - Sophisticated Storage System
Brian Tarbox: S3 - Sophisticated Storage SystemBrian Tarbox: S3 - Sophisticated Storage System
Brian Tarbox: S3 - Sophisticated Storage System
AWS Chicago
 
Bob Eisenmann and Justin Ranta: Automated Application Delivery on AWS using G...
Bob Eisenmann and Justin Ranta: Automated Application Delivery on AWS using G...Bob Eisenmann and Justin Ranta: Automated Application Delivery on AWS using G...
Bob Eisenmann and Justin Ranta: Automated Application Delivery on AWS using G...
AWS Chicago
 
Mayur Runwal and Steven David: User desktops in AWS for low latency and grap...
Mayur Runwal and Steven David:  User desktops in AWS for low latency and grap...Mayur Runwal and Steven David:  User desktops in AWS for low latency and grap...
Mayur Runwal and Steven David: User desktops in AWS for low latency and grap...
AWS Chicago
 
Justin Wheeler How to Explain AWS to Non-Technical People
Justin Wheeler	How to Explain AWS to Non-Technical PeopleJustin Wheeler	How to Explain AWS to Non-Technical People
Justin Wheeler How to Explain AWS to Non-Technical People
AWS Chicago
 
Angelo Mandato: Learn about the benefits with examples how to create and main...
Angelo Mandato: Learn about the benefits with examples how to create and main...Angelo Mandato: Learn about the benefits with examples how to create and main...
Angelo Mandato: Learn about the benefits with examples how to create and main...
AWS Chicago
 
Christopher Judd: Monitor All Your Stuff with OpenTelemetry and AWS
Christopher Judd: Monitor All Your Stuff with OpenTelemetry and AWSChristopher Judd: Monitor All Your Stuff with OpenTelemetry and AWS
Christopher Judd: Monitor All Your Stuff with OpenTelemetry and AWS
AWS Chicago
 
Lena Taupier: Secure your App from bots and attacks with AWS WAF (Web Applica...
Lena Taupier: Secure your App from bots and attacks with AWS WAF (Web Applica...Lena Taupier: Secure your App from bots and attacks with AWS WAF (Web Applica...
Lena Taupier: Secure your App from bots and attacks with AWS WAF (Web Applica...
AWS Chicago
 
Ad

Recently uploaded (20)

Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 

Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs

  • 2. WHAT IS “SERVERLESS”? (The Concept) • No servers! • Infrastructure-as-Code • More time focusing on features that matter to your users
  • 3. WHY SERVERLESS? (The Framework) • Easy to get started
  • 4. WHY SERVERLESS? (The Framework) • Easy to get started • Simple templating
  • 5. WHY SERVERLESS? (The Framework) • Easy to get started • Simple templating • Language-agnostic
  • 6. WHY SERVERLESS? (The Framework) • Easy to get started • Simple templating • Language-agnostic • Active community
  • 7. WHY SERVERLESS? (The Framework) • Easy to get started • Simple templating • Language-agnostic • Active community • Good support for common event sources
  • 8. WHY SERVERLESS? (The Framework) • Easy to get started • Simple templating • Language-agnostic • Active community • Good support for common event sources • Supports various aspects of the development lifecycle
  • 9. WHAT ARE MY ALTERNATIVES? SAM (Serverless Application Model) Chalice ?
  • 10. HOW DO WE USE SERVERLESS AT SHIFTGIG? • A few notes about Shiftgig architecture: + Microservices! + Microservice = Codebase = CloudFormation stack = Serverless application + Lambda functions as the main compute resource of choice + Avoid HTTP(S)-based communication between microservices and prefer asynchronous messaging instead + Microservice stacks are self-contained with little to no overlapping resources + Domain models
  • 11. HOW DO WE USE SERVERLESS AT SHIFTGIG?
  • 12. WAIT… ISN’T THIS SUPPOSED TO BE A WORKSHOP?
  • 13. GETTING STARTED: PREREQUISITES • Development requirements: + Serverless: • Node JS • NPM • npm install -g serverless + Development: • Python 3.6 (not strictly necessary, but the examples will conform to this) • Also: Pipenv or pip + virtualenv • Project directory/workspace
  • 14. GETTING STARTED: PREREQUISITES • AWS authentication + Serverless will authenticate with AWS automatically using your environment-sourced AWS credentials. + Check for ~/.aws/config and ~/.aws/credentials files + If you use an AWS config file, make sure you set this environment variable to instruct the Node JS AWS SDK (used internally by Serverless) to load the config file: $ export AWS_SDK_LOAD_CONFIG=1
  • 15. GETTING STARTED: PREREQUISITES • Deployment requirements: + AWS account (full permissions are ideal) + AWS services we will use • Lambda • API Gateway • DynamoDB • CloudWatch • CloudFormation • S3
  • 16. STEP 0: GOALS • We will create a simple cloud-native service in AWS as a CloudFormation stack • Our service will… + Execute custom logic defined as code run within Lambda functions + Store data in a DynamoDB table + Provide a web API with API Gateway + Log execution data to CloudWatch • But what will my application do?
  • 17. • Navigate to your project directory and set up your development workspace + $ cd ~/your/projects $ git clone [email protected]:shiftgig/aws-serverless-workshop.git + Using Python with Pipenv? $ pipenv shell --python 3.6 to set up your virtual environment + Initialize Node JS in the current directory: $ npm init -f to create a package.json file $ npm install to install plugin dependencies + Open in your editor: serverless.yml STEP 1: CONFIGURE SERVERLESS
  • 18. STEP 1: CONFIGURE SERVERLESS service: candystore plugins: - serverless-python-requirements # Python only custom: foo: bar Name your service. This is used to name your AWS resources. Define array of Serverless plugins
  • 19. STEP 1: CONFIGURE SERVERLESS custom: foo: bar pythonRequirements: # Python only usePipenv: true dockerizePip: true dockerImage: lambci/lambda:build-python3.6 dockerSsh: true The custom section lets you define arbitrary variables that you can reference in other parts of your Serverless config file. This section is also often used to configure your installed Serverless plugins. These docker* values tell Serverless to use a Docker image that matches the Lambda Python 3.6 runtime to install dependencies.
  • 20. STEP 1: CONFIGURE SERVERLESS provider: name: aws stage: ${opt:stage} region: ${opt:region} logRetentionInDays: 7 stackTags: SERVICE: ${self:service} iamRoleStatements: environment: FOO_VALUE: ${self:custom.foo} The provider section configures values specific to your vendor.
  • 21. STEP 1: CONFIGURE SERVERLESS Our vendor is AWS. provider: name: aws stage: ${opt:stage} region: ${opt:region} logRetentionInDays: 7 stackTags: SERVICE: ${self:service} iamRoleStatements: environment: FOO_VALUE: ${self:custom.foo}
  • 22. STEP 1: CONFIGURE SERVERLESS The stage value is used (along with the service name) to name resources. provider: name: aws stage: ${opt:stage} region: ${opt:region} logRetentionInDays: 7 stackTags: SERVICE: ${self:service} iamRoleStatements: environment: FOO_VALUE: ${self:custom.foo}
  • 23. STEP 1: CONFIGURE SERVERLESS These are variables: ${source:variable} There are several variable sources. The opt: source retrieves variables from command line flags (e.g. --region us-east-1 ). The self: source references variables from within this YAML file. provider: name: aws stage: ${opt:stage} region: ${opt:region} logRetentionInDays: 7 stackTags: SERVICE: ${self:service} iamRoleStatements: environment: FOO_VALUE: ${self:custom.foo}
  • 24. STEP 1: CONFIGURE SERVERLESS Tagging resources comes in handy when trying to control and manage costs in AWS. provider: name: aws stage: ${opt:stage} region: ${opt:region} logRetentionInDays: 7 stackTags: SERVICE: ${self:service} iamRoleStatements: environment: FOO_VALUE: ${self:custom.foo}
  • 25. STEP 1: CONFIGURE SERVERLESS iamRoleStatements is an array of IAM permissions used to create your Lambda functions’ execution role. For now, we’ll leave it blank. provider: name: aws stage: ${opt:stage} region: ${opt:region} logRetentionInDays: 7 stackTags: SERVICE: ${self:service} iamRoleStatements: environment: FOO_VALUE: ${self:custom.foo}
  • 26. STEP 1: CONFIGURE SERVERLESS The environment section is for defining environment variables available to your Lambda functions at runtime. We’ll add more useful items to this section later. provider: name: aws stage: ${opt:stage} region: ${opt:region} logRetentionInDays: 7 stackTags: SERVICE: ${self:service} iamRoleStatements: environment: FOO_VALUE: ${self:custom.foo}
  • 27. STEP 2: ADD FUNCTIONS functions: PutProduct: description: Creates and updates products memorySize: 128 runtime: python3.6 handler: handlers.put_product__http events: - http: method: put path: "/product/{name}" request: parameters: paths: name: true The functions section of your Serverless configuration defines the various Lambda functions for your service.
  • 28. STEP 2: ADD FUNCTIONS Your Lambda function’s memory allocation, in megabytes. functions: PutProduct: description: Creates and updates products memorySize: 128 runtime: python3.6 handler: handlers.put_product__http events: - http: method: put path: "/product/{name}" request: parameters: paths: name: true
  • 29. STEP 2: ADD FUNCTIONS functions: PutProduct: description: Creates and updates products memorySize: 128 runtime: python3.6 handler: handlers.put_product__http events: - http: method: put path: "/product/{name}" request: parameters: paths: name: true Any supported Lambda runtime
  • 30. STEP 2: ADD FUNCTIONS functions: PutProduct: description: Creates and updates products memorySize: 128 runtime: python3.6 handler: handlers.put_product__http events: - http: method: put path: "/product/{name}" request: parameters: paths: name: true The handler string defines the function in your source code that should be called by your Lambda function when it is invoked.
  • 31. STEP 2: ADD FUNCTIONS The events array defines various triggers for your Lambda function. Here, we are defining API Gateway triggers to expose this functionality within a web API. This marks the name segment of the URL as required. functions: PutProduct: description: Creates and updates products memorySize: 128 runtime: python3.6 handler: handlers.put_product__http events: - http: method: put path: "/product/{name}" request: parameters: paths: name: true
  • 32. STEP 3: WRITE HANDLER CODE # handlers.py import json from urllib.parse import unquote def put_product__http(event, context): payload = json.loads(event['body']) product = { 'name': unquote(event['pathParameters']['name']), 'price': payload['price'], 'description': payload['description'] } print('Saving product {}'.format(product['name'])) return { 'statusCode': '200', 'body': json.dumps(product), 'headers': { 'Content-Type': 'application/json' } } Standard (event, context) signature for our handler function. The event argument is a dict containing information about the request.
  • 33. STEP 3: WRITE HANDLER CODE # handlers.py import json from urllib.parse import unquote def put_product__http(event, context): payload = json.loads(event['body']) product = { 'name': unquote(event['pathParameters']['name']), 'price': payload['price'], 'description': payload['description'] } print('Saving product {}'.format(product['name'])) return { 'statusCode': '200', 'body': json.dumps(product), 'headers': { 'Content-Type': 'application/json' } } We’ll add database interactions here, but just log something for now. API Gateway expects response data in this format.
  • 34. STEP 4: DEPLOY! $ export SLS_DEBUG=* $ serverless deploy --region us-east-1 --aws-profile myprofile --stage dev --verbose Makes our output nice and verbose! Specify the AWS region your deployment should target If you use IAM role-assumption to authenticate with multiple AWS accounts, specify your profile name here Sensible and consistent stage values help keep things organized. It is used to name your CloudFormation stack and its resources. Even more verbose!
  • 35. STEP 4: DEPLOY! CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - candystore-dev CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - PutProductLogGroup CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - PutProductLogGroup CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::RestApi - ApiGatewayRestApi CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - PutProductLogGroup CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceProduct CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceProduct CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Resource - ApiGatewayResourceProduct CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceProductNameVar CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Resource - ApiGatewayResourceProductNameVar CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Resource - ApiGatewayResourceProductNameVar CloudFormation - CREATE_COMPLETE - AWS::IAM::Role - IamRoleLambdaExecution CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - PutProductLambdaFunction CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - PutProductLambdaFunction CloudFormation - CREATE_COMPLETE - AWS::Lambda::Function - PutProductLambdaFunction CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Method - ApiGatewayMethodProductNameVarPut CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - PutProductLambdaVersionI17kp6Q9rcYZSzgFOR8MgEqWaxZpBDZjz94X6WavEcD Look at all that CloudFormation you didn’t have to write!
  • 36. STEP 4: DEPLOY! Serverless: Stack update finished... Service Information service: candystore stage: dev region: us-east-1 stack: candystore-dev api keys: None endpoints: PUT - https://fv907pkjxg.execute-api.us-east-1.amazonaws.com/dev/product/{name} functions: PutProduct: candystore-dev-PutProduct Stack Outputs PutProductLambdaFunctionQualifiedArn: arn:aws:lambda:us-east-1:123456789876:function:candystore-dev-PutProduct:1 ServiceEndpoint: https://fv907pkjxg.execute-api.us-east-1.amazonaws.com/dev ServerlessDeploymentBucketName: candystore-dev-serverlessdeploymentbucket-1s7wgv4xc93h6 Useful information printed at the end! Includes our API Gateway endpoints
  • 37. STEP 5: TEST $ curl -X PUT https://fv907pkjxg.execute-api.us-east-1.amazonaws.com/dev/product/skittles -H 'Content-Type: application/json' -d '{ "description": "Taste the rainbow", "price": "2.55" }' -w 'n' {"name": "skittles", "price": "2.55", "description": "Taste the rainbow"}
  • 38. STEP 5: TEST $ serverless logs --function PutProduct --region us-east-1 --aws-profile poc --stage dev --verbose --tail START RequestId: ff3ff102-692f-11e8-801f-cde97c6f36e8 Version: $LATEST Saving product skittles END RequestId: ff3ff102-692f-11e8-801f-cde97c6f36e8 REPORT RequestId: ff3ff102-692f-11e8-801f-cde97c6f36e8 Duration: 1.72 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 22 MB
  • 39. STEP 6: ADD A DYNAMODB TABLE custom: foo: bar pythonRequirements: # Python only usePipenv: true dockerizePip: true dockerImage: lambci/lambda:build-python3.6 dockerSsh: true product_table_name: ${self:service}-${self:provider.stage}-product We centrally define the name of our DynamoDB table in custom so we can reference it elsewhere.
  • 40. resources: Resources: ProductDynamoDBTable: Type: "AWS::DynamoDB::Table" Properties: AttributeDefinitions: - AttributeName: name AttributeType: S KeySchema: - AttributeName: name KeyType: HASH TableName: ${self:custom.product_table_name} ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1 The resources section is reserved for CloudFormation syntax. In the Resources subsection, you define AWS resources for your stack that aren’t implicitly created for you in the functions section. Use the variable defined in custom to name the table STEP 6: ADD A DYNAMODB TABLE
  • 41. iamRoleStatements: - Effect: Allow Action: - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: - Fn::GetAtt: [ "ProductDynamoDBTable", "Arn" ] We add the IAM permissions our Lambda functions will require in order to interact with our DynamoDB table. This statement will be added to the existing execution role. We can use CloudFormation intrinsic functions in our serverless.yml file too! STEP 6: ADD A DYNAMODB TABLE
  • 42. environment: FOO_VALUE: ${self:custom.foo} PRODUCT_TABLE_NAME: ${self:custom.product_table_name} We’ll also add an environment variable to make our table’s name available to our Lambda functions STEP 6: ADD A DYNAMODB TABLE
  • 43. STEP 6: ADD A DYNAMODB TABLE # handlers.py import json import os from urllib.parse import unquote import boto3 def put_product__http(event, context): payload = json.loads(event['body']) product = { 'name': unquote(event['pathParameters']['name']), 'price': payload['price'], 'description': payload['description'] } db = boto3.resource('dynamodb') table = db.Table(name=os.getenv('PRODUCT_TABLE_NAME')) table.put_item(Item=product) print('Saved product {}'.format(product['name'])) return { 'statusCode': '200', 'body': json.dumps(product), 'headers': { 'Content-Type': 'application/json' Lambda provides the boto3 library automatically. Save the product to the DynamoDB table!
  • 44. STEP 7: DEPLOY CHANGES AND TEST (AGAIN) $ serverless deploy --region us-east-1 --aws-profile myprofile --stage dev --verbose
  • 45. STEP 7: DEPLOY CHANGES AND TEST (AGAIN) $ curl -X PUT https://fv907pkjxg.execute-api.us-east-1.amazonaws.com/dev/product/snickers -H 'Content-Type: application/json' -d '{ "description": "Hungry? Grab a Snickers!", "price": "2.55" }' -w 'n' {"name": "snickers", "price": "1.25", "description": "Hungry? Grab a Snickers!"}
  • 46. STEP 7: DEPLOY CHANGES AND TEST (AGAIN) $ serverless logs --function PutProduct --region us-east-1 --aws-profile poc --stage dev --verbose --tail --startTime 5m START RequestId: b7ebe0b5-76b0-4b31-bfe9-334892d57674 Version: $LATEST Saved product snickers END RequestId: b7ebe0b5-76b0-4b31-bfe9-334892d57674 REPORT RequestId: b7ebe0b5-76b0-4b31-bfe9-334892d57674 Duration: 464.11 ms Billed Duration: 500 ms Memory Size: 128 MB Max Memory Used: 32 MB
  • 47. NEXT STEPS: MORE FEATURES • Respond to GET requests • Respond to DELETE requests • Bonus: Restrict access to your API with a usage plan in under 5 minutes!
  • 48. RECAP
  • 49. FINAL NOTES: LINKS • Shiftgig is hiring! + https://www.shiftgig.com/careers • Example code used today: + https://github.com/shiftgig/aws-serverless-workshop
  • 50. Q & A