API402 Building Advanced Workflows With AWS Step Functions
API402 Building Advanced Workflows With AWS Step Functions
All rights
reserved.
A P I 4
0 2
Building advanced
workflows with AWS
Step Functions
Eric Johnson
Principal Developer Advocate,
Serverless Amazon Web Services
X: @edjgeek
LinkedIn: https:/
/www.linkedin.com/in/singledigit/
• Principal Developer
Advocate
• Serverless geek
• Previously
Solutions architect
Software developer
Designer
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
Agenda (as an AWS Step Functions
workflow)
Step Functions first
? Which workflow
type?
Standard Express
Reducing cost
Connected by
events Th
e
serverle
ss
event-driven pyramid
Manu
al
• Pay-per-use
• Scales
automatically
• Fully managed
• Integrates with
over
200 AWS services
Functions always.”
Standard Express
Reducing cost
Lambd Dynamo
a DB
Lambd Dynamo
a DB
Lambd Dynamo
a DB
The “REST”
easy
Combine with API Gateway and Step Functions
Synchronous
Express Workflows to create a low-latency, scalable API
backend
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
Order manager service as a Lambda
function
Version 1
Each operation invokes a Lambda
function
cancel
Application grows more complex
API
• Update Dynamo over time, performing multiple tasks
• Resum DB SFN
Gatewa
y e to handle increasingly complex
business logic
complete • Update Dynamo
API • Resum DB SFN
Gatewa
e
y
Results
mak • Update Dynamo
API e • Resum DB SFN • Tightly coupled code base
Gatewa
e
y
• Sanitize order • Slower release cadence
create • Update
API DynamoDB • Poor discoverability
Gatewa • Resume SFN
y
• Additional complexity
Choosing Standard
Reducing cost
Express
Workflows
• Cost-effective
d
• Long-lasting
•
. • At least once
Asynchrono • Synchronous
us • Asynchronous
• Exactly once • Short duration
An ecommerce workflow
1,000 as a
Standard 1,000
as an Express
I create an
Amazon
CloudWatch
dashboard
to display the
average
execution times
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
Cost per 1,000 executions
Expres
Standar s
vs.
d
$0.42 $0.01
*
# transitions * (# of executions *
$0.000025)
Total cost = 17 * 0.025 =
V Standard Workflow billing
is
$0.42* $0.025 per 1,000 state
transitions
# transitions * (# of executions *
$0.000025)
Total cost = 17 * 0.025 = $0.42*
V Standard Workflow billing
is
$0.025 per 1,000 state
Total cost = $0.42 per 1,000 transitions
executions
Price per
Price per 100
100 ms Price per 100 ms Price per 100
Memory
for for
ms firstfirst
1,000 for next 4,000 ms for
GB-hours
1,000 GB-hours GB-hours additional GB-
64 $0.00000010 hour
MB 42
64 MB $0.0000001042 $0.0000000521 $0.0000000285
Expres
Standar s
vs.
d
$0.42 $0.01
*
$12.77
$400.0
0
$350.0
0
Express
$300.0
0
$250.0
0
vs
$200.0
- 500,00 1,000,00 1,500,00
0
0 0 0
$150.0 Execution
0 s
$100.0
Standard .
0
$50.00
$-
Express Workflow
1 million executions = $15.0 cost
0
$420 $10.0
0
$5.0
0
$350.00
0
1 million executions = $12.77
$450.00 $400.0
Express
$400.00 0
$300.00
$150.00
$250.00 $350.0
$200.00 0
$100.00
$50.00
$-
$300.0
0
- 500,000 1,000,000 1,500,000
$250.0
0
Standard $200.0
1 million executions =
0
$150.0
$420 $10.00
$15.00
Express Workflow cost
0
- 200,00 400,00 600,00 800,00 1,000,00 1,200,00
0 0 0 0 0 0
$100.0 Series Series
$5.00
0 1 2
$-
$50.0 -
0
200,000
$-
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
400,000
So why choose Standard?
Star
t
Which
? workflow type?
• The workload takes more than 5
minutes $.workload.duration > 5
• The workload uses callback minutes
(.waitForTaskToken) or (.sync) patterns $.workload.contains(.sy
nc)
$.workload.contains(.WaitForTaskTok
• The workload requires exactly-once en)
defaul
$.Execution.semantics ==
execution Exactly-one
t
En
d
Which
?
• The workload takes more than 5 minutes workflow
How about
$.workload.contains(.WaitForTaskT
callba or (.sync) ok
patterns ctly-once execution
$.Execution.semantics ==
en)
both?
Exactly-one
• The workload requires exa
default
Run as Standard
Run as Express
End
Pattern: The
nester Expres
Standar s
&
d
Create nested
workflows that
combine
workflow types
to optimize for
cost
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
How about both?
workflo Workflow
.StartExecuti
on
Parent
Standard Workflow
Parent
Standard Workflow
Parent
Standard Workflow
Parent
Standard Workflow
Parent
Standard Workflow
This new
w
o
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved. r
Cost per 1,000 executions
E X P R E S S W O R K F L O W S C H A R G E B A S E D O N N U M B E R O F R E Q
U E S T S A N D D U R A T I O N
Parent
Standard Workflow
T
h
i
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
s
reserved.
Cost per 1,000 executions
E X P R E S S W O R K F L O W S C H A R G E B A S E D O N N U M B E R O F R E Q
U E S T S A N D D U R A T I O N
Parent
Standard Workflow
T
h
i
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
s
reserved.
Cost per 1,000 executions
E X P R E S S W O R K F L O W S C H A R G E B A S E D O N N U M B E R O F R E Q
U E S T S A N D D U R A T I O N
Parent
Standard Workflow
Standard Express
Expres
sReduce execution
Standar vs duration Reduce
d state
Reduce . memory GB usage
transitions
Reduce Manage
the state
number of payloads
states natively
Get Item
Invoke
Lambda
Put Event
Get Item
A GetItem operation using DynamoDB read
capacity units
+
Invoke
Lambda
Put Event
Get Item
A GetItem operation using DynamoDB read
capacity units
+
1 state
Invoke
Lambda transition
+
Put Event
Get Item
A GetItem operation using DynamoDB read
capacity units
+
1 state
Invoke
Lambda transition
+
A Lambda
invocation cost
incurred based
Put Event
on duration
and
memory
configuration
Get Item
A GetItem operation using DynamoDB read
capacity units
+
1 state
Invoke
Lambda transition
+
A Lambda
invocation
1 statecost
incurred based
transition
Put Event
on duration
+
and
memory
configuration
Get Item
A GetItem operation using DynamoDB read
capacity units
+
1 state
Invoke
Lambda transition
+
A Lambda
invocation
1 statecost
incurred based
transition
Put Event
on duration
+
and
An eventPut
memory
operation
configuration
contributing to
overall usage
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
and cost
reserved.
Step Functions intrinsic functions
Generating a unique
ID
Generating a unique
ID
Lambda example
Star
t
Generate ID
Generating a unique
ID
Lambda example
Star
t
Generating a unique
ID
Intrinsic
Lambda example example
Star Star
t t
Generating a unique
ID
Intrinsic
example
Star
t
No invocation Generate ID
delays No
States.UUID()
invocation cost
Less code to
manage
Emit and
wait:
milestone 1
Emit and
Catc wait:
h milestone 2
TimedOut
Catc
h
The “emit and wait”
Emit milestone events that invoke external
decoupled
Emit: timeout
microservices and emit error events if they don’t
respond
En
d
Dynamo
Emit and
DB
wait:
milestone 1
Emit and
Catc wait:
h milestone 2
Catc
TimedOut h
Emit: timeout
En
d
Emit and
Catc wait:
h milestone 2
Catc
TimedOut h
Emit: timeout
En
d
Emit and
Catc wait:
h milestone 2
Catc
TimedOut h
Emit: timeout
En
d
Emit and
Catc wait:
h milestone 2
Emit: timeout
En
d
Emit and
wait:
milestone 1
Milestone 2
TaskToken:
Emit and Rul
Catc wait: 12345678 e
Dynamo
DB
h milestone 2
Catc
TimedOut h
Emit: timeout
En
d
Catc
TimedOut h
Emit: timeout
En
d
Catc
TimedOut h
Set a time limit to wait for task
token "HeartbeatSeconds": 20
Emit: timeout
En
d
Catc
TimedOut h
Set a time limit to wait for task
token "HeartbeatSeconds": 20
Emit: timeout
En
d
Standard
Workflow
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
Remove polling
with callback
pattern
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken"
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken"
Standard
Workflow
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
Cost per 1,000 executions
E X P R E S S W O R K F L O W S C H A R G E B A S E D O N N U M B E
R O F R E Q U E S T S A N D D U R A T I O N
Parent
Standard
Workflow
Parent
Standard
Workflow
Parent
Standard
Workflow
Parent
Standard
Workflow
Parent
Standard
Workflow
T
h
i
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
s
reserved.
Cost per 1,000 executions
E X P R E S S W O R K F L O W S C H A R G E B A S E D O N N U M B E
R O F R E Q U E S T S A N D D U R A T I O N
Parent
Standard
Workflow
T
h
i
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
s
reserved.
Cost per 1,000 executions
E X P R E S S W O R K F L O W S C H A R G E B A S E D O N N U M B E
R O F R E Q U E S T S A N D D U R A T I O N
Parent
Standard
Workflow
$0.20
state
(8 * 1,000) * $0.000025 = transitions
Averag
Price per
100 ms for
V
e
first 1,000
+
Cost of nested duratio
GB-hours
Duration cost = (1,300 ms / 100) n* $ 0.0000001042 =
workflow
$0.000001 Execution cost = $0.000001
($0.000001 + $0.000001) x 1,000 = $0.0002
T
h
i
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
s
reserved.
Cost per 1,000 executions
E X P R E S S W O R K F L O W S C H A R G E B A S E D O N N U M B E
R O F R E Q U E S T S A N D D U R A T I O N
Parent
Standard
Workflow
$0.20
state
(8 * 1,000) * $0.000025 = transitions
Averag
Price per
100 ms for
V
e
first 1,000
+
Cost of nested duratio
GB-hours
Duration cost = (1,300 ms / 100) n* $ 0.0000001042 =
workflow
$0.000001 Execution cost = $0.000001
($0.000001 + $0.000001) x 1,000 = $0.0002
Data
warehous
e
Inventor
y
service
Data
warehous
e
Inventor
y
service
Data
warehous
e
Authorization
required
Inventor
y
service
Data
warehous
e
Authorization
required
Inventor
y
service
Resource
endpoints
Amazon
Data
EventBridge
warehous
connection
e
Standard Express
InputPat State
h input
Parameter
Task or s
sub- Argument
workflow Task or s
ResultSelect sub-
or workflow Outpu
t
ResultPat
h
OutputPat State
h output
{
“$states”: {
“input”: “ra to the state”,
“result”: w from the task if successful”,
inp
“errorOutput”: “Results from task if errored”,
ut
“context”: “the context object”
} “Re
sult
}
s
has
"States": {
"StateA":
{ "Type":
"Pass",
"Next": "StateB",
Step Functions doesn’t yet "Parameters"
"var":
: {"xyz"
"var":
"xyz"
haveconcept of a
the
} }
"StateB":
,
{ "Type":
variable "Pass",
"Next":
"var":
"xyz"
"StateC",
}
"Paramet
}, ers": {
"StateC":
"var.$": "var":
{ "Type":
"$.var" "xyz"
"Pass",
"End": true,
"Paramet
ers": {
"var.$":
} "$.var"
} }
}
Available here
State input
Previou
$states.inp
InputPat s
ut
h variable
Parameter s
s
Task or
Assig Variable
sub- n s
workflow
ResultSelect
or
ResultPath
OutputPath
State
© 2024, Amazon Web Services, Inc. or its affiliates. All rights output
reserved.
State workflow variable evaluation
order
F A I L U R E
State input
Previou
$states.inp
InputPat s
ut
h variable
Parameter s
s
Task or Failure
catch
Assig Variable
sub- n
block s
workflow
ResultPat
h
State
© 2024, Amazon Web Services, Inc. or its affiliates. All rights output
reserved.
Workflow evaluation order
S U C C E
S S
State
input
Argument
s
Task or
sub-
workflow Output Variables
State
output
Availabl
e
Availabl
e
Paralle Outer
l scope
Availabl
e
Inline Outer
Map scope
Available
Child Availabl
scope e
Availabl
e
Availabl
e
Distributed Outer
Map scope
Not
available
Child Not
availabl
scope
e
Not
availabl
e
Paralle
l
Child Assig
scope n Outer
scope
Parallel
Not
Child Assig
availabl
scope n Outer
e
scope
Availabl
Not
e
availabl
e
Parallel
Not
Child Assig
availabl
scope n Outer
e
scope
Availabl
Not
e
availabl
e
Not
available
Standard Express
Catch
Catc
The “saga”
h
continues
Use inherent error handling to roll back
sequential
system failures for long-running transactions
Book hotel
Catc
h
Book flight
Catc
h Success
Book case
car Catc
The “saga”
h
Cancel
car
Cancel
flight
continues
Use inherent error handling to roll back
Cancel
hotel sequential
system failures for long-running transactions
End
Book hotel
Catc
h
Book flight
Catc
h Failure
Book cases
car Catc
The “saga”
h
Cancel
car
Cancel
flight
continues
Use inherent error handling to roll back
Cancel
hotel sequential
system failures for long-running transactions
End
Book hotel
Catc
h
Book flight
Catc
h Failure
Book cases
car Catc
The “saga”
h
Cancel
car
Book hotel
Catc
h
Book flight
Catc
h Failure
Book cases
car Catc
The “saga”
h
Cancel
car
Cancel
flight
continues
Use inherent error handling to roll back
Cancel
hotel sequential
system failures for long-running transactions
End
Get
circuit
status
Is
? circuit
closed
?
$.CircuitStatus==“OPE
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
closed
?
Success
$.CircuitStatus==“OPE cases
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
{“CircuitStatus”:“CLOSE
D”}
closed
?
Success
$.CircuitStatus==“OPE cases
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
{“CircuitStatus”:“CLOSE
D”}
closed
?
Success
$.CircuitStatus==“OPE cases
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
closed
?
Success
$.CircuitStatus==“OPE cases
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
{“CircuitStatus”:“CLOSE
D”}
closed
?
Success
$.CircuitStatus==“OPE cases
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
{“CircuitStatus”:“CLOSE
D”}
closed
?
Success
$.CircuitStatus==“OPE cases
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
closed
?
$.CircuitStatus==“OPE
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
{“CircuitStatus”:“OPE
N”}
closed
?
$.CircuitStatus==“OPE
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Get
circuit
status
Is
? circuit
{“CircuitStatus”:“OPE
N”}
closed
?
$.CircuitStatus==“OPE
N” Run
Catc
h
Lambd
a The “circuit breaker”
Update
Prevent a caller service from retrying another callee
circuit service call that has previously caused repeated
status
timeouts or failures
Circui Circui
X t t
open close
d
End
Invoke Lambda
End
Invoke Lambda
End
Invoke Lambda
Catc
h
Invoke Lambda
Catc
h
YE N
S O
The compute
Organize object
maestro
Persist metadata
Orchestrate multiple compute
substrates in a single workflow
End
End
Is video duration
? more than 20
minutes?
YE N
S O
No need to wait for long-running tasks to Run ECS task Invoke Lambda
rerun
No cost incurred for previous
successfully completed tasks Organize object
Billed only for each state transition after the Persist metadata
failed state Redriv
e Emit:
Processing
completed
En
d
Is video duration
? more than 20
minutes?
YE N
S O
Organize object
Persist metadata
Emit:
Processing
completed
En
d
YES
Invoke Lambda
Persist metadata
Organize object
End
Test 1 state at a time
START
YES
NO
Invoke Lambda
with the Test API.
Organize object
Persist metadata
Step Functions first
Standard Express
scale
Managing failures Step Functions at scale
in parallel
numbe
r
Final state
End
Parallel Star
t
state
Executes multiple branches of steps Parallel
state
using the same input Look
Look up ZIP
up
Map state output is an array with numbe
r
1 element for each branch result 9021 1
0
End
Parallel Star
t
state
Wait until all branches terminate (reach a
terminal state) before processing the next Parallel
state
state Look
Look up ZIP
up
If any branch fails because of an unhandled numbe
r
error or by transitioning to a Fail state, the 9021 Erro
entire parallel state is considered to have 0 r
failed, and all its branches are stopped
End
Parallel Star
t
state
Catch errors to allow other branches to
Parallel
state
Look Look up
complete up phone
addres number
s Erro
All execution results are aggregated into 9021 r
the final state 0
Catch
Final state
[ 90210,
Error ]
End
GetNewBlogPosts
Map state
For each
post
Scrape
metadat
a
SaveToGitHub
End
GetNewBlogPosts
Map state
For each
post
Scrape
metadat
a
SaveToGitHub
End
SaveToGitHub
End
SaveToGitHub
End
Rebuild
(fan
Deliver a payload to multiple
destinations out
fronten
d
)
End
Rebuild
(fan
Deliver a payload to multiple
destinations out
fronten
d
)
End
GetNewBlogPosts
Map state
For each
post
Scrape
metadat
a
End
GetNewBlogPosts
Map state
For each
post
Scrape
metadat
a
End
GetNewBlogPosts
Map state
For each
post
Scrape [
{
metadat “title”:”Lifting and shifting a web application to AWS Serverless: Part 1”, “Author”:”Marcia
a Villalba”,
“desc”:” Customers migrating to the cloud often want to get the benefits of serverless architecture.”,
“link”:https://aws.amazon.com/blogs/compute/lifting-and-shifting-a-web-application-to-aws-serverless-part-1,
“thumbnail”:”/thumb1.png”,
“tags”:[”serverless”,”stepFunctions”]
"date": "Sep 14, 2022",
The scatter-
}
,
SaveToGitHu {
“title”:”Lifting and shifting a web application to AWS Serverless: Part 2”, “Author”:”Marcia
b Villalba”,
gather
“desc”:” Customers migrating to the cloud often want to get the benefits of serverless architecture part 2.”,
ons
“link”:https://aws.amazon.com/blogs/compute/lifting-and-shifting-a-web-application-to-aws-serverless-part-2,
“thumbnail”:”/thumb1.png”,
Rebuild “tags”:[”serverless”,”stepFunctions”]
"date": "Sep 16, 2022",
(scatter) or
fronten
Broadcasts a payload to multiplethe next
}
d ]
Calculate chunks
A serverless GIF
generator
Convert an .mp4 from
SaveListToS3 Amazon S3 into multiple
GIFs for timeline scrubbing
Distributed Map
state
Item source
Generate GIF
Export
location
End
Generat
e GIF
Export
location
End
Export
location
End
Export
location
End
Export
location
End
Generat
e GIF
{
“Bucket”:”DestinationBucket”
Export body:“base64 encoded gif”
location }
End
Generat
e GIF
Export
location
End
Generat
e GIF
Export
location
End
Map
state
Invoke
Lambd
a
Publish
A separate application polls GitHub each day to
persist view data for a number of repositories
[
F
{
"Count": 2900,
"Items": [
{
"Views": {
"S": "8"
}, "SK":
Scan all {
data "S":
"2023
-02-
11T0
Map 0:00:
state 00Z"
… }, "PK":
Invoke ] {
Lambd "S":
"Repo
a s-
aws-
sampl
Publish es/aw
s- A separate application polls GitHub each day to
step-
functi
ons-
persist view data for a number of repositories
twitch
-
series
" A Map state to concurrently process each data
En }
d } item
,
Scan
for
parent
For each Distributed Map
parent
Scan
for
children
The payload
For each Inline
child Map
Organize data
Write to
divider
reporting
SaaS
Overcome payload limits but break workloads
down into multiple child workflows
En
d
"aws-samples/serverless-patterns", "aws-
Scan samples/serverless-coffee",
for "aws-samples/php-examples-for-aws-lambda",
"aws-samples/contact-form-processing-with-synchronous-express-workflows", "aws-
parent samples/aws-serverless-workshop-innovator-island",
"awslabs/aws-lambda-powershell-runtime", "aws-
For each Distributed Map samples/sessions-with-aws-sam",
parent "aws-samples/eventbridge-scheduler-blog-prerequisites", "aws-
samples/amazon-s3-to-aws-lambda-examples",
Scan "aws-samples/decoupling-with-amazon-eventbridge", "aws-
samples/aws-lambda-efs-samples”
for ….
children ]
The payload
For each Inline
child Map
Organize data
Write to
divider
reporting
SaaS
Overcome payload limits but break workloads
down into multiple child workflows
En
d
Scan
for
parent
For each Distributed "aws-samples/serverless-patterns”
parent Map
Scan
for
children
The payload
For each Inline
child Map
Organize data
Write to
divider
reporting
SaaS
Overcome payload limits but break workloads
down into multiple child workflows
En
d
Scan
for
parent
For each Distributed Map
parent
Scan {
"Count": 90,
for "Items": [
children {
"Views": {
The ivid
For each Inline "S": "8"
child Map }, "SK":
{
"S":
Organize data "2023
payload d er
-02-
11T0
0:00:
00Z" reak workloads
Write to … }, "PK":
reporting …
}
{
"S":
down
SaaS "Repo
s- Overcome payload limits
aws-
sampl
es/aw
but b into multiple child
s-
step-
workflows
functi
En ons-
d twitch
-
series
"
}
© 2024, Amazon Web Services, Inc. or its affiliates. All rights }
reserved. ,
The serverless
workflows
collection
https://s12d.com/workflo
ws
https://s12d.com/api402-
24
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
Continue your AWS serverless
learning
Learn at Increase Earn AWS
your own your serverless
pace knowledg badges
e
https://s12d.com/serverless-
learning
© 2024, Amazon Web Services, Inc. or its affiliates. All rights
reserved.
Check out these other
sessions
API201: The AWS Step Functions workshop
Monday, December 2 | 3:00 PM | Caesars Forum, Level 1, Summit 228
you!
Eric Johnson
[email protected]
m
@edjgeek
https:/
/www.linkedin.co
m/in/singledigit/