SlideShare a Scribd company logo
Dynamic AWS
Lambda with
LED BY
Luis F. Majano
LUIS F. MAJANO
• CEO Ortus Solutions
• Computer Engineer
• Born in El Salvador => Raised in the USA
• 2023 Leading EU Expansion team (Malaga, Spain 🇪🇸)
• Creator & Maintainer:
ColdBox MVC, TestBox BDD/TDD, CommandBox CLI, ContentBox CMS, etc.
• Creator / Chief Language Engineer BoxLang Programming Language
@lmajano @ortussolutions
WHAT DO YOU CALL AN ANXIOUS DINOSAUR?
• Serverless
• What? Why? When?
• Providers
• Use Cases
• Real Life Case
• Best Practices
Agenda
• BoxLang
• What is it
• Why
• Key Features
• Lambda Runtime
• Lambda Template
Part 1 Part 2
AWS Lambda - Serverless Computing
FaaS
AWS Lambda is a serverless computing service that runs
code in response to events without managing servers,
automatically scaling and charging only for execution time.
What is serverless?
Serverless Computing Evolution
Physical Machines
Virtual Machines
Containers
Lambdas
Focus on Business Logic
Abstraction
Execution Patterns
• API Driven Patterns
• Event Driven Patterns
• Data Streaming Patterns
• Scheduling Patterns
Key Points about Serverless
• Me
• Focus on code abstractions
• Provider
• Auto Scaling
• Fault tolerance
• High Availability
• Metrics and Logging
• No OS updates
• Pay per use ONLY
Fine-Grained Pricing: Never pay for idle
• FREE Tier
• Buy in 100ms increments
• No minimums
• No per-device fees
• No idle fees
How Functions Work
Upload Function
(CI, Manually)
De
fi
ne Function Triggers
(API Calls, Events, Schedules)
Function Execution
(Stateless, Cold Start, Timeouts)
Di
ff
erent Providers
Di
ff
erent Language Implementations
PHP
Node.js
Python
Go
Ruby
.Net
Core Concept of Serverless is ….
Function = Unit of Work
Common Use Cases
REST Data Processing
Chat Bots
Amazon Alexa IoT
Scheduled Tasks Code Execution AI
Real-Time File Processing
REST (Direct Function URL or API Gateway)
Event Handling
Scheduling with AWS EventBridge
Ortus Use Case : BoxLang Code Playground : try.boxlang.io
Wanna play?
64MB RAM
600 KB
8 MB
<Your
Code>
Wanna play?
• try.boxlang.io
• Internet playground for BoxLang
• First production BoxLang applications
• Powered by our MiniServer and AWS
Lambda Runtimes
Cool Stats
• Average executions per day: 28,000+
• Average execution time: 38ms
• Monthly Bill ????
$0.0000000000
AWS Lambda Best Practices
• Code is stateless
• Leverage external services: S3, ElastiCache, RDS, etc.
• Ephemeral Disk Capacity
• 512MB by default -> 10GB if needed (But you pay)
• Max Timeout = 15 Minutes, lower it to your convenience, or pay
for it :)
• Concurrent Executions: 1000
• Beware the ColdStart
• Use static constructs to avoid re-creations per request
• Payload Size (Careful Here)
• Request: 6MB Synchronous, 256KB asynchronous
• Response: 6MB
Logging & Metrics
• USE IT! It’s already included
• Enable X-Ray + Lambda Service Traces
• Enable Enhanced Monitoring
• A wealth of debugging data is available!
Deployment Limits
• 50 MB zip or jar
fi
le
• 250MB unzipped
• Up to 5 Layers (Dependency Jars)
• Recommendations:
• Create a Fat/Shaded Jar
• Use Container Images -> 10GB
• Use our BoxLang Template!
• But, remember, focused work units is what you want.
Power Levels
• Had no idea at
fi
rst!
• You don’t choose CPU, you choose the memory
• More Memory => More CPU you get
• From 128bm => 10GB in 1GB increments
• Want to save money?
Choose ARM and not x86, way cheaper!
• Geek way to save money?
AWS Lambda Power Tuning: https://github.com/alexcasalboni/aws-lambda-power-tuning
SAM - Your new Best Friend
• Template-Driven resource management model
• Fancy words for Infrastructure as Code
• Supports anything AWS
• Included CLI
• Great for testing locally
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
DYNAMIC : MODULAR : PRODUCTIVE
Part 2
BoxLang is a modular dynamic language for the JVM, aiming
to make your development more productive, expressive,
functional, and available everywhere.
DYNAMIC : MODULAR : PRODUCTIVE
Part 2
• Dynamically Typed with an optional/inferred/coercion type
system
• Language supports Classes, Scripting, and Templating
• Modern Java interop (invokeDynamic)
• Highly functional: context-aware closures, pure lambdas, and more
• Built-in Framework with many concerns
• Small, lightweight, and modular (8mb)
• Open Beta Summer 2024 (27 releases)
• RC.1 February -> Final 1.x May 2025 at www.intothebox.org
What is it?
https://www.ortussolutions.com/blog/why-boxlang-when-you-have-kotlin-groovy-scala-and-more
RUNTIME
Application
Service
Async
Service
Cache
Service
Component
Service
Datasource
Service
Function
Service
Interceptor
Service
Module
Service
Scheduler
Service
Key Features
Multi-Runtime Architecture
Multi-Runtime Architecture
Any OS
Docker MiniServer CommandBox Servlet Lambda Azure Android WebAssembly
In Dev Soon Soon
8 MB
9 MB 8 MB
15 MB
15 MB
160 MB
Multi-Parser Architecture
Multi-Parsers
• A way to split with the old and bring in the new
• JIT Transpiler or CLI Transpiler
• Supported Languages
• ColdFusion/CFML (Completed)
• COBOL (In Progress)
• Groovy (In Planning)
• Incorporate legacy applications + modernize them.
.cfc, .cfm
.bx, bxs, bxm
BoxLang Semantics
File Types
Scopes
// scripting + templates
name = “boxlang”
// Functions have a local + arguments + surrounding scopes
function save( name ){
var transactional = true
// pass scopes around
saveData( arguments )
}
// Treat scopes like maps
function getMemento(){
return variables
.filter( key, value -> !isCustomFunction( value ) )
}
// Classes have three encapsulation scopes
Class{
this.publicVar = “public”
variables.privateVar = “private”
static.field = 123
}
• All variables are inside of scopes
• Scopes backed by concurrent maps
• Each execution context can have di
ff
erent scopes
• Scripts
• Variables
• Functions
• Arguments, local, + surrounding scopes
• Classes
• This (public), variables (private), static
• Global Scopes + Life-Span
• Application, request, server, session, etc
• Custom Scopes
Enhanced Types with Member functions
fruits = [ "apple", "bananas", "pears" ]
println( fruits.len() )
data = fruits
.append( "orange" )
.filter( item -> item.findNoCase( "an" ) )
.each( item -> println( item ) )
.toJSON()
"apple,bananas,pears"
.listToArray()
.filter( item -> item.findNoCase( "an" ) )
.each( item -> println( item ) )
person = { fname: "box", lname: "lang", age: 1 }
person.fullName = () => person.fname & person.lname
println( person.fullName() )
• All Java types plus:
• Arrays
• Structs (ordered, unordered, weak, soft, etc)
• Queries (Typed Columns)
• DateTime (java.time)
• Numeric (
fl
oat, short, int, double, bigdecimal)
• XML (Enhanced Maps)
• All auto-castable, dynamic and functional
• Fluent and Functional via member functions
Functions
// Java
public int sum( int a, int b){
return a + b;
}
// BoxLang no types
function sum( a, b ){
return a + b
}
// Optional Generic types
Numeric function sum( numeric a, numeric b ){
return a + b
}
// Optional Specific types
int function sum( int a, int b ){
return a + b
}
• All functions `public` by default
• All return types `any` by default
• All argument types `any` by default
• What is any????
• 2 types of type inference
• Compile-Time
• Runtime
• Auto-casting
• Type Promotions
• Type Coercion
Functions Arguments
// Java
Public void repeat( String str, int count, String separator ){}
repeat( “hello”, 2, “;” )
// BoxLang
repeat( required str, count:5, separator:“;” ){}
// Call with defaults
repeat( “hello” )
// Call with argument binding
myMap = { str : “test”, separator : “,” }
repeat( argumentCollection:myMap )
• Required arguments
• Default values
• Argument binding
• Structs (Maps)
• Arrays
Null Coalescence Operator + Safe Navigation
// Java
Int getLength( String myString ){
if( myString != null ){
return myString.length()
}
return 0;
}
function getLength( myString ){
return myString.length() ?: 0
}
Name = event.headers?.name // null
Email = user.?getEmail() ?: “nada”
• Elvis Operator
• Any falsey expression can be used
• Entire left hand expression detection
• Safe Navigation
• Any dererferencable object
• Arrays, structs, objects, etc.
String Interpolation
function toString(){
return “Song{id=“#id#”, title=“#title#”, author=“#author#”}
}
function buildTemplate(){
return “{
Id : “#id#”,
Title : “#title#”,
Author : “#getAuthor(id)#”
}“
}
myMap = { id: createUUID(), title: “title”, author: “Luis” }
buildTemplate( argumentCollection : myMap )
• Tired of string concatenation
• Not anymore!
• Anything between #expression#
• “ For big strings with / without line breaks
• Combine with scopes to do bindings!
Closures & Lambdas & UDFs
function toString(){
return “Song{id=“#id#”, title=“#title#”, author=“#author#”}
}
variables.toString = variables.getString
function delayFunction(){
return () => dowork()
}
runAsync( () -> startWork() )
.then( result => computeMoreWork( result ) )
.then( result => sendOrder( result ) )
• Context-aware closures
• Pure functions: lambdas
• UDFs
• Automatic coercion to Java Lambdas
• Any signature
Classes
class {
Property firstName;
Property lastName;
Property numeric age setter=false;
}
Person = new Person( “Luis”, “Majano”, “45” )
println( person.getFirstName() )
person.toJSON()
• Automatic constructor
• Automatic toString(), equals() and hashCode()
• Automatic getters and setters
• JSON / YAML / Custom First-Class
• toJson()
$bx - MetaProgramming
Person = new Person()
writedump( person.$bx.meta )
callJavaClass( person.$bx.$class )
Class{
Property importantData;
Variables
.$bx
.registerChangeListener(
“importantData”,
(Key, newValue, oldValue) => clearCache()
)
}
myMap = { name : “Luis”, born : now() }
myMap
.$bx
.registerChangeListener( (key, newValue, oldValue) => doSomething() )
• Available on ANY object
• Includes
• Metadata
• Class Representation
• Meta Methods
• Change listeners
• Inject properties
• Remove properties
• Inject methods
• Remove Method
Templating Language
• Best of JSP, Blade, GSP, and CFML
• Create your own `<bx:MyTag>` easily
• Import collections of tags
• Use BIFs
• Nesting
• Data Encapsulation
• Much More
<
b
x
:
o
u
t
p
u
t
>
<
d
i
v
c
l
a
s
s
=
"
b
x
-
d
u
m
p
"
>
<
t
a
b
l
e
c
l
a
s
s
=
"
b
x
-
t
a
b
l
e
S
t
"
t
i
t
l
e
=
"
#
p
o
s
I
n
C
o
d
e
#
"
>
<
c
a
p
t
i
o
n
c
l
a
s
s
=
"
b
x
-
d
h
S
t
"
r
o
l
e
=
"
b
u
t
t
o
n
"
t
a
b
i
n
d
e
x
=
"
0
"
o
p
e
n
>
<
s
t
r
o
n
g
>
Q
u
e
r
y
:
#
v
a
r
.
r
e
c
o
r
d
c
o
u
n
t
#
r
o
w
s
<
/
s
t
r
o
n
g
>
<
/
c
a
p
t
i
o
n
>
<
t
h
e
a
d
>
<
t
r
>
<
b
x
:
l
o
o
p
a
r
r
a
y
=
"
#
v
a
r
.
c
o
l
u
m
n
L
i
s
t
.
l
i
s
t
T
o
A
r
r
a
y
(
)
#
"
i
t
e
m
=
"
c
o
l
u
m
n
"
>
<
t
h
>
#
e
n
c
o
d
e
F
o
r
H
T
M
L
(
c
o
l
u
m
n
)
#
<
/
t
h
>
<
/
b
x
:
l
o
o
p
>
<
/
t
r
>
<
/
t
h
e
a
d
>
<
t
b
o
d
y
>
<
b
x
:
l
o
o
p
q
u
e
r
y
=
"
#
v
a
r
#
"
i
t
e
m
=
"
r
o
w
"
>
<
t
r
>
<
b
x
:
l
o
o
p
a
r
r
a
y
=
"
#
v
a
r
.
c
o
l
u
m
n
L
i
s
t
.
l
i
s
t
T
o
A
r
r
a
y
(
)
#
"
i
n
d
e
x
=
"
c
o
l
u
m
n
"
>
<
t
d
>
#
e
n
c
o
d
e
F
o
r
H
T
M
L
(
v
a
r
[
c
o
l
u
m
n
]
)
#
<
/
t
d
>
<
/
b
x
:
l
o
o
p
>
<
/
t
r
>
<
/
b
x
:
l
o
o
p
>
<
/
t
b
o
d
y
>
<
/
t
a
b
l
e
>
<
/
d
i
v
>
<
/
b
x
:
o
u
t
p
u
t
>
BoxLang Framework
BoxLang Framework
RUNTIME
Application
Service
Async
Service
Cache
Service
Component
Service
Datasource
Service
Function
Service
Interceptor
Service
Module
Service
Scheduler
Service
Modular Since Birth
BoxLang Modules
• Inspired by our HMVC Framework: ColdBox
• Not OSGI
• Core Runtime with lightest possible footprint
• Hierarchical Class Loaders
• Taps into the language life-cycle via events
• Write them in Java or BoxLang or Both!
• Executable as CLI packages
• Integrates with Maven/Gradle
BoxLang Modules
FTP/SFTP
Email
Sending
ESAPI UI Forms
Password
Encryption
JDBC
Image
Manipulation
PDF Tooling CSV /
Spreadsheet
INI OSHI YAML
Application Framework
Web Application Framework
• Inspired by Java contexts
• Create in
fi
nite segregated applications in a single deployment by using one
fi
le
• Application.bx
• Life Cycle methods:
• applicationStart(), applicationEnd(), sessionStart(), sessionEnd(),
requestStart(), request(), requestEnd(), onError(), etc.
• Data Sources, class loading, application scopes, security, settings, etc.
• Sub applications
• Highly con
fi
gurable and Highly portable
Event-Driven Language
Event-Driven Language
• Interceptors for the language, application, and request
• The best way to scale the language
• Listen to the entire or speci
fi
c language life-cycles
• Modules can listen/collaborate events
• boxAnnounce(), boxAnnounceAsync() : CompletableFuture
Event Channels
Event Producers
Event
Event
Event
Event Consumers
Event
Event
Event
BoxLang Lambda Runtime
BoxLang Lambda Runtime
• Leverages the Java SDK
• BoxLang implements the AWS Runtime Handler
• ortus.boxlang.runtime.aws.LambdaRunner::handleRequest
• Bootstraps the runtime (Con
fi
gurations + Modules + Dependencies)
• Tuned for fast startups
• Acts as a Front Controller
• Inspects incoming Request
• Automatic logging/tracing
• Automatic error handling
• Delegates to the appropriate Class + Function
• Automatic response handling
Lambda Flow
• Implement Handlers as BoxLang Classes
• Class by Convention: Lambda.bx
• 1 method by convention: run( event, context, response )
• 1 Optional Application.bx for life-cycles or activating framework features
• Expose more BoxLang functions via AWS Headers
• x-bx-function : {functionName}
• Expose more BoxLang classes as AWS URL Endpoints
• /{route} : {route}.bx
BoxLang Lambda Runtime
• Run() function by convention
• Event = Map of the request
• Context = AWS Context Object
• Response = Map of response data (optional)
• Return:
• Nothing
• Simple Value
• Complex Values
BoxLang Lambda
BoxLang Lambda Template
• Turnkey Template for Lambda Development
• Unit + Integration Testing
• JUnit/TestBox + SAM
• Gradle
• Java Dependencies + Packaging + Testing
• CommandBox
• BoxLang Dependencies
• Github Actions CI
• Testing -> Packaging -> Deployment
https://github.com/ortus-boxlang/bx-aws-lambda-template
Package
Questions?
THANK YOU
Ad

More Related Content

Similar to Building Dynamic AWS Lambda Applications with BoxLang (20)

Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
Avi Kedar
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
Avi Kedar
 
JavaScript: Creative Coding for Browsers
JavaScript: Creative Coding for BrowsersJavaScript: Creative Coding for Browsers
JavaScript: Creative Coding for Browsers
noweverywhere
 
JavaScript: Creative Coding for Browsers
JavaScript: Creative Coding for BrowsersJavaScript: Creative Coding for Browsers
JavaScript: Creative Coding for Browsers
noweverywhere
 
Wider than rails
Wider than railsWider than rails
Wider than rails
Alexey Nayden
 
Wider than rails
Wider than railsWider than rails
Wider than rails
Alexey Nayden
 
Building DSLs with Scala
Building DSLs with ScalaBuilding DSLs with Scala
Building DSLs with Scala
Mohit Jaggi
 
Building DSLs with Scala
Building DSLs with ScalaBuilding DSLs with Scala
Building DSLs with Scala
Mohit Jaggi
 
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMVoxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Manuel Bernhardt
 
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMVoxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Manuel Bernhardt
 
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdfITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
Ortus Solutions, Corp
 
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdfITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
Ortus Solutions, Corp
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
Amazon Web Services Japan
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
Amazon Web Services Japan
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDC
Mike Dirolf
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDC
Mike Dirolf
 
[AWS Builders] Effective AWS Glue
[AWS Builders] Effective AWS Glue[AWS Builders] Effective AWS Glue
[AWS Builders] Effective AWS Glue
Amazon Web Services Korea
 
[AWS Builders] Effective AWS Glue
[AWS Builders] Effective AWS Glue[AWS Builders] Effective AWS Glue
[AWS Builders] Effective AWS Glue
Amazon Web Services Korea
 
Developer’s viewpoint on swift programming language
Developer’s viewpoint on swift programming languageDeveloper’s viewpoint on swift programming language
Developer’s viewpoint on swift programming language
Azilen Technologies Pvt. Ltd.
 
Developer’s viewpoint on swift programming language
Developer’s viewpoint on swift programming languageDeveloper’s viewpoint on swift programming language
Developer’s viewpoint on swift programming language
Azilen Technologies Pvt. Ltd.
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
Avi Kedar
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
Avi Kedar
 
JavaScript: Creative Coding for Browsers
JavaScript: Creative Coding for BrowsersJavaScript: Creative Coding for Browsers
JavaScript: Creative Coding for Browsers
noweverywhere
 
JavaScript: Creative Coding for Browsers
JavaScript: Creative Coding for BrowsersJavaScript: Creative Coding for Browsers
JavaScript: Creative Coding for Browsers
noweverywhere
 
Building DSLs with Scala
Building DSLs with ScalaBuilding DSLs with Scala
Building DSLs with Scala
Mohit Jaggi
 
Building DSLs with Scala
Building DSLs with ScalaBuilding DSLs with Scala
Building DSLs with Scala
Mohit Jaggi
 
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMVoxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Manuel Bernhardt
 
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMVoxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVM
Manuel Bernhardt
 
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdfITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
Ortus Solutions, Corp
 
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdfITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
Ortus Solutions, Corp
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
Amazon Web Services Japan
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
Amazon Web Services Japan
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDC
Mike Dirolf
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDC
Mike Dirolf
 
Developer’s viewpoint on swift programming language
Developer’s viewpoint on swift programming languageDeveloper’s viewpoint on swift programming language
Developer’s viewpoint on swift programming language
Azilen Technologies Pvt. Ltd.
 
Developer’s viewpoint on swift programming language
Developer’s viewpoint on swift programming languageDeveloper’s viewpoint on swift programming language
Developer’s viewpoint on swift programming language
Azilen Technologies Pvt. Ltd.
 

More from Ortus Solutions, Corp (20)

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
 
I am afraid of no test! The power of BDD
I am afraid of no test! The power of BDDI am afraid of no test! The power of BDD
I am afraid of no test! The power of BDD
Ortus Solutions, Corp
 
A Summary of “Out of the Tar Pit” by Jacob Beers
A Summary of “Out of the Tar Pit” by Jacob BeersA Summary of “Out of the Tar Pit” by Jacob Beers
A Summary of “Out of the Tar Pit” by Jacob Beers
Ortus Solutions, Corp
 
Modern Functional Fluent CFML REST by Luis Majano
Modern Functional Fluent CFML REST by Luis MajanoModern Functional Fluent CFML REST by Luis Majano
Modern Functional Fluent CFML REST by Luis Majano
Ortus Solutions, Corp
 
BoxLang DNA - Feature: World-Class Support
BoxLang DNA - Feature: World-Class SupportBoxLang DNA - Feature: World-Class Support
BoxLang DNA - Feature: World-Class Support
Ortus Solutions, Corp
 
ITB 2023 cbq - Jobs And Tasks In the Background - Eric Peterson.pdf
ITB 2023 cbq - Jobs And Tasks In the Background - Eric Peterson.pdfITB 2023 cbq - Jobs And Tasks In the Background - Eric Peterson.pdf
ITB 2023 cbq - Jobs And Tasks In the Background - Eric Peterson.pdf
Ortus Solutions, Corp
 
ITB 2023 - cbElasticSearch Modern Searching for Modern CFML - Jon Clausen.pdf
ITB 2023 - cbElasticSearch Modern Searching for Modern CFML - Jon Clausen.pdfITB 2023 - cbElasticSearch Modern Searching for Modern CFML - Jon Clausen.pdf
ITB 2023 - cbElasticSearch Modern Searching for Modern CFML - Jon Clausen.pdf
Ortus Solutions, Corp
 
ITB 2023 Modernizing the App A tale from the trenches- David Paul Belanger.pdf
ITB 2023 Modernizing the App A tale from the trenches- David Paul Belanger.pdfITB 2023 Modernizing the App A tale from the trenches- David Paul Belanger.pdf
ITB 2023 Modernizing the App A tale from the trenches- David Paul Belanger.pdf
Ortus Solutions, Corp
 
ITB 2023 Creating and managing a QA focused production-replicating environmen...
ITB 2023 Creating and managing a QA focused production-replicating environmen...ITB 2023 Creating and managing a QA focused production-replicating environmen...
ITB 2023 Creating and managing a QA focused production-replicating environmen...
Ortus Solutions, Corp
 
ITB 2023 10 Techniques for writing easy yet stupidly thorough unit tests_Dan ...
ITB 2023 10 Techniques for writing easy yet stupidly thorough unit tests_Dan ...ITB 2023 10 Techniques for writing easy yet stupidly thorough unit tests_Dan ...
ITB 2023 10 Techniques for writing easy yet stupidly thorough unit tests_Dan ...
Ortus Solutions, Corp
 
ITB 2023 Headless eCommerce with CFML - Jon Clausen.pdf
ITB 2023 Headless eCommerce with CFML - Jon Clausen.pdfITB 2023 Headless eCommerce with CFML - Jon Clausen.pdf
ITB 2023 Headless eCommerce with CFML - Jon Clausen.pdf
Ortus Solutions, Corp
 
Crash Course in CSS Grid plus FlexBox - Nolan Erck
Crash Course in CSS Grid plus FlexBox - Nolan ErckCrash Course in CSS Grid plus FlexBox - Nolan Erck
Crash Course in CSS Grid plus FlexBox - Nolan Erck
Ortus Solutions, Corp
 
ITB 2023 - 800 Pounds Gorilla - a Design session for no designers - Jona Lain...
ITB 2023 - 800 Pounds Gorilla - a Design session for no designers - Jona Lain...ITB 2023 - 800 Pounds Gorilla - a Design session for no designers - Jona Lain...
ITB 2023 - 800 Pounds Gorilla - a Design session for no designers - Jona Lain...
Ortus Solutions, Corp
 
ITB 2023 cbPlaywright End-to-end Tests with Playwright and TestBox - Eric Pet...
ITB 2023 cbPlaywright End-to-end Tests with Playwright and TestBox - Eric Pet...ITB 2023 cbPlaywright End-to-end Tests with Playwright and TestBox - Eric Pet...
ITB 2023 cbPlaywright End-to-end Tests with Playwright and TestBox - Eric Pet...
Ortus Solutions, Corp
 
ITB 2023 - The Many Layers of OAuth - Keith Casey .pdf
ITB 2023 - The Many Layers of OAuth - Keith Casey .pdfITB 2023 - The Many Layers of OAuth - Keith Casey .pdf
ITB 2023 - The Many Layers of OAuth - Keith Casey .pdf
Ortus Solutions, Corp
 
ITB 2023 - Chatgpt Box! AI All The Things - Scott Steinbeck.pdf
ITB 2023 - Chatgpt Box! AI All The Things - Scott Steinbeck.pdfITB 2023 - Chatgpt Box! AI All The Things - Scott Steinbeck.pdf
ITB 2023 - Chatgpt Box! AI All The Things - Scott Steinbeck.pdf
Ortus Solutions, Corp
 
ITB 2023 Build Vue Apps Using tdd (Test-Driven Development).pptx
ITB 2023 Build Vue Apps Using tdd (Test-Driven Development).pptxITB 2023 Build Vue Apps Using tdd (Test-Driven Development).pptx
ITB 2023 Build Vue Apps Using tdd (Test-Driven Development).pptx
Ortus Solutions, Corp
 
ITB 2023 - Create as many web sites or web apps as you want - George Murphy.pdf
ITB 2023 - Create as many web sites or web apps as you want - George Murphy.pdfITB 2023 - Create as many web sites or web apps as you want - George Murphy.pdf
ITB 2023 - Create as many web sites or web apps as you want - George Murphy.pdf
Ortus Solutions, Corp
 
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdfITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
Ortus Solutions, Corp
 
ITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdf
ITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdfITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdf
ITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdf
Ortus Solutions, Corp
 
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
 
I am afraid of no test! The power of BDD
I am afraid of no test! The power of BDDI am afraid of no test! The power of BDD
I am afraid of no test! The power of BDD
Ortus Solutions, Corp
 
A Summary of “Out of the Tar Pit” by Jacob Beers
A Summary of “Out of the Tar Pit” by Jacob BeersA Summary of “Out of the Tar Pit” by Jacob Beers
A Summary of “Out of the Tar Pit” by Jacob Beers
Ortus Solutions, Corp
 
Modern Functional Fluent CFML REST by Luis Majano
Modern Functional Fluent CFML REST by Luis MajanoModern Functional Fluent CFML REST by Luis Majano
Modern Functional Fluent CFML REST by Luis Majano
Ortus Solutions, Corp
 
BoxLang DNA - Feature: World-Class Support
BoxLang DNA - Feature: World-Class SupportBoxLang DNA - Feature: World-Class Support
BoxLang DNA - Feature: World-Class Support
Ortus Solutions, Corp
 
ITB 2023 cbq - Jobs And Tasks In the Background - Eric Peterson.pdf
ITB 2023 cbq - Jobs And Tasks In the Background - Eric Peterson.pdfITB 2023 cbq - Jobs And Tasks In the Background - Eric Peterson.pdf
ITB 2023 cbq - Jobs And Tasks In the Background - Eric Peterson.pdf
Ortus Solutions, Corp
 
ITB 2023 - cbElasticSearch Modern Searching for Modern CFML - Jon Clausen.pdf
ITB 2023 - cbElasticSearch Modern Searching for Modern CFML - Jon Clausen.pdfITB 2023 - cbElasticSearch Modern Searching for Modern CFML - Jon Clausen.pdf
ITB 2023 - cbElasticSearch Modern Searching for Modern CFML - Jon Clausen.pdf
Ortus Solutions, Corp
 
ITB 2023 Modernizing the App A tale from the trenches- David Paul Belanger.pdf
ITB 2023 Modernizing the App A tale from the trenches- David Paul Belanger.pdfITB 2023 Modernizing the App A tale from the trenches- David Paul Belanger.pdf
ITB 2023 Modernizing the App A tale from the trenches- David Paul Belanger.pdf
Ortus Solutions, Corp
 
ITB 2023 Creating and managing a QA focused production-replicating environmen...
ITB 2023 Creating and managing a QA focused production-replicating environmen...ITB 2023 Creating and managing a QA focused production-replicating environmen...
ITB 2023 Creating and managing a QA focused production-replicating environmen...
Ortus Solutions, Corp
 
ITB 2023 10 Techniques for writing easy yet stupidly thorough unit tests_Dan ...
ITB 2023 10 Techniques for writing easy yet stupidly thorough unit tests_Dan ...ITB 2023 10 Techniques for writing easy yet stupidly thorough unit tests_Dan ...
ITB 2023 10 Techniques for writing easy yet stupidly thorough unit tests_Dan ...
Ortus Solutions, Corp
 
ITB 2023 Headless eCommerce with CFML - Jon Clausen.pdf
ITB 2023 Headless eCommerce with CFML - Jon Clausen.pdfITB 2023 Headless eCommerce with CFML - Jon Clausen.pdf
ITB 2023 Headless eCommerce with CFML - Jon Clausen.pdf
Ortus Solutions, Corp
 
Crash Course in CSS Grid plus FlexBox - Nolan Erck
Crash Course in CSS Grid plus FlexBox - Nolan ErckCrash Course in CSS Grid plus FlexBox - Nolan Erck
Crash Course in CSS Grid plus FlexBox - Nolan Erck
Ortus Solutions, Corp
 
ITB 2023 - 800 Pounds Gorilla - a Design session for no designers - Jona Lain...
ITB 2023 - 800 Pounds Gorilla - a Design session for no designers - Jona Lain...ITB 2023 - 800 Pounds Gorilla - a Design session for no designers - Jona Lain...
ITB 2023 - 800 Pounds Gorilla - a Design session for no designers - Jona Lain...
Ortus Solutions, Corp
 
ITB 2023 cbPlaywright End-to-end Tests with Playwright and TestBox - Eric Pet...
ITB 2023 cbPlaywright End-to-end Tests with Playwright and TestBox - Eric Pet...ITB 2023 cbPlaywright End-to-end Tests with Playwright and TestBox - Eric Pet...
ITB 2023 cbPlaywright End-to-end Tests with Playwright and TestBox - Eric Pet...
Ortus Solutions, Corp
 
ITB 2023 - The Many Layers of OAuth - Keith Casey .pdf
ITB 2023 - The Many Layers of OAuth - Keith Casey .pdfITB 2023 - The Many Layers of OAuth - Keith Casey .pdf
ITB 2023 - The Many Layers of OAuth - Keith Casey .pdf
Ortus Solutions, Corp
 
ITB 2023 - Chatgpt Box! AI All The Things - Scott Steinbeck.pdf
ITB 2023 - Chatgpt Box! AI All The Things - Scott Steinbeck.pdfITB 2023 - Chatgpt Box! AI All The Things - Scott Steinbeck.pdf
ITB 2023 - Chatgpt Box! AI All The Things - Scott Steinbeck.pdf
Ortus Solutions, Corp
 
ITB 2023 Build Vue Apps Using tdd (Test-Driven Development).pptx
ITB 2023 Build Vue Apps Using tdd (Test-Driven Development).pptxITB 2023 Build Vue Apps Using tdd (Test-Driven Development).pptx
ITB 2023 Build Vue Apps Using tdd (Test-Driven Development).pptx
Ortus Solutions, Corp
 
ITB 2023 - Create as many web sites or web apps as you want - George Murphy.pdf
ITB 2023 - Create as many web sites or web apps as you want - George Murphy.pdfITB 2023 - Create as many web sites or web apps as you want - George Murphy.pdf
ITB 2023 - Create as many web sites or web apps as you want - George Murphy.pdf
Ortus Solutions, Corp
 
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdfITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
Ortus Solutions, Corp
 
ITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdf
ITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdfITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdf
ITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdf
Ortus Solutions, Corp
 
Ad

Recently uploaded (20)

Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Learn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step GuideLearn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step Guide
Marcel David
 
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
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Rock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning JourneyRock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning Journey
Lynda Kane
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
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
 
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
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
 
Leading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael JidaelLeading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael Jidael
Michael Jidael
 
Hands On: Create a Lightning Aura Component with force:RecordData
Hands On: Create a Lightning Aura Component with force:RecordDataHands On: Create a Lightning Aura Component with force:RecordData
Hands On: Create a Lightning Aura Component with force:RecordData
Lynda Kane
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Learn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step GuideLearn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step Guide
Marcel David
 
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
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Rock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning JourneyRock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning Journey
Lynda Kane
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
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
 
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
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
 
Leading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael JidaelLeading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael Jidael
Michael Jidael
 
Hands On: Create a Lightning Aura Component with force:RecordData
Hands On: Create a Lightning Aura Component with force:RecordDataHands On: Create a Lightning Aura Component with force:RecordData
Hands On: Create a Lightning Aura Component with force:RecordData
Lynda Kane
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Ad

Building Dynamic AWS Lambda Applications with BoxLang

  • 1. Dynamic AWS Lambda with LED BY Luis F. Majano
  • 2. LUIS F. MAJANO • CEO Ortus Solutions • Computer Engineer • Born in El Salvador => Raised in the USA • 2023 Leading EU Expansion team (Malaga, Spain 🇪🇸) • Creator & Maintainer: ColdBox MVC, TestBox BDD/TDD, CommandBox CLI, ContentBox CMS, etc. • Creator / Chief Language Engineer BoxLang Programming Language @lmajano @ortussolutions WHAT DO YOU CALL AN ANXIOUS DINOSAUR?
  • 3. • Serverless • What? Why? When? • Providers • Use Cases • Real Life Case • Best Practices Agenda • BoxLang • What is it • Why • Key Features • Lambda Runtime • Lambda Template Part 1 Part 2
  • 4. AWS Lambda - Serverless Computing FaaS
  • 5. AWS Lambda is a serverless computing service that runs code in response to events without managing servers, automatically scaling and charging only for execution time. What is serverless?
  • 6. Serverless Computing Evolution Physical Machines Virtual Machines Containers Lambdas Focus on Business Logic Abstraction
  • 7. Execution Patterns • API Driven Patterns • Event Driven Patterns • Data Streaming Patterns • Scheduling Patterns
  • 8. Key Points about Serverless • Me • Focus on code abstractions • Provider • Auto Scaling • Fault tolerance • High Availability • Metrics and Logging • No OS updates • Pay per use ONLY
  • 9. Fine-Grained Pricing: Never pay for idle • FREE Tier • Buy in 100ms increments • No minimums • No per-device fees • No idle fees
  • 10. How Functions Work Upload Function (CI, Manually) De fi ne Function Triggers (API Calls, Events, Schedules) Function Execution (Stateless, Cold Start, Timeouts)
  • 13. Core Concept of Serverless is …. Function = Unit of Work
  • 14. Common Use Cases REST Data Processing Chat Bots Amazon Alexa IoT Scheduled Tasks Code Execution AI
  • 16. REST (Direct Function URL or API Gateway)
  • 18. Scheduling with AWS EventBridge
  • 19. Ortus Use Case : BoxLang Code Playground : try.boxlang.io
  • 20. Wanna play? 64MB RAM 600 KB 8 MB <Your Code>
  • 21. Wanna play? • try.boxlang.io • Internet playground for BoxLang • First production BoxLang applications • Powered by our MiniServer and AWS Lambda Runtimes
  • 22. Cool Stats • Average executions per day: 28,000+ • Average execution time: 38ms • Monthly Bill ???? $0.0000000000
  • 23. AWS Lambda Best Practices • Code is stateless • Leverage external services: S3, ElastiCache, RDS, etc. • Ephemeral Disk Capacity • 512MB by default -> 10GB if needed (But you pay) • Max Timeout = 15 Minutes, lower it to your convenience, or pay for it :) • Concurrent Executions: 1000 • Beware the ColdStart • Use static constructs to avoid re-creations per request • Payload Size (Careful Here) • Request: 6MB Synchronous, 256KB asynchronous • Response: 6MB
  • 24. Logging & Metrics • USE IT! It’s already included • Enable X-Ray + Lambda Service Traces • Enable Enhanced Monitoring • A wealth of debugging data is available!
  • 25. Deployment Limits • 50 MB zip or jar fi le • 250MB unzipped • Up to 5 Layers (Dependency Jars) • Recommendations: • Create a Fat/Shaded Jar • Use Container Images -> 10GB • Use our BoxLang Template! • But, remember, focused work units is what you want.
  • 26. Power Levels • Had no idea at fi rst! • You don’t choose CPU, you choose the memory • More Memory => More CPU you get • From 128bm => 10GB in 1GB increments • Want to save money? Choose ARM and not x86, way cheaper! • Geek way to save money? AWS Lambda Power Tuning: https://github.com/alexcasalboni/aws-lambda-power-tuning
  • 27. SAM - Your new Best Friend • Template-Driven resource management model • Fancy words for Infrastructure as Code • Supports anything AWS • Included CLI • Great for testing locally https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
  • 28. DYNAMIC : MODULAR : PRODUCTIVE Part 2
  • 29. BoxLang is a modular dynamic language for the JVM, aiming to make your development more productive, expressive, functional, and available everywhere. DYNAMIC : MODULAR : PRODUCTIVE Part 2
  • 30. • Dynamically Typed with an optional/inferred/coercion type system • Language supports Classes, Scripting, and Templating • Modern Java interop (invokeDynamic) • Highly functional: context-aware closures, pure lambdas, and more • Built-in Framework with many concerns • Small, lightweight, and modular (8mb) • Open Beta Summer 2024 (27 releases) • RC.1 February -> Final 1.x May 2025 at www.intothebox.org What is it? https://www.ortussolutions.com/blog/why-boxlang-when-you-have-kotlin-groovy-scala-and-more RUNTIME Application Service Async Service Cache Service Component Service Datasource Service Function Service Interceptor Service Module Service Scheduler Service
  • 33. Multi-Runtime Architecture Any OS Docker MiniServer CommandBox Servlet Lambda Azure Android WebAssembly In Dev Soon Soon 8 MB 9 MB 8 MB 15 MB 15 MB 160 MB
  • 35. Multi-Parsers • A way to split with the old and bring in the new • JIT Transpiler or CLI Transpiler • Supported Languages • ColdFusion/CFML (Completed) • COBOL (In Progress) • Groovy (In Planning) • Incorporate legacy applications + modernize them. .cfc, .cfm .bx, bxs, bxm
  • 38. Scopes // scripting + templates name = “boxlang” // Functions have a local + arguments + surrounding scopes function save( name ){ var transactional = true // pass scopes around saveData( arguments ) } // Treat scopes like maps function getMemento(){ return variables .filter( key, value -> !isCustomFunction( value ) ) } // Classes have three encapsulation scopes Class{ this.publicVar = “public” variables.privateVar = “private” static.field = 123 } • All variables are inside of scopes • Scopes backed by concurrent maps • Each execution context can have di ff erent scopes • Scripts • Variables • Functions • Arguments, local, + surrounding scopes • Classes • This (public), variables (private), static • Global Scopes + Life-Span • Application, request, server, session, etc • Custom Scopes
  • 39. Enhanced Types with Member functions fruits = [ "apple", "bananas", "pears" ] println( fruits.len() ) data = fruits .append( "orange" ) .filter( item -> item.findNoCase( "an" ) ) .each( item -> println( item ) ) .toJSON() "apple,bananas,pears" .listToArray() .filter( item -> item.findNoCase( "an" ) ) .each( item -> println( item ) ) person = { fname: "box", lname: "lang", age: 1 } person.fullName = () => person.fname & person.lname println( person.fullName() ) • All Java types plus: • Arrays • Structs (ordered, unordered, weak, soft, etc) • Queries (Typed Columns) • DateTime (java.time) • Numeric ( fl oat, short, int, double, bigdecimal) • XML (Enhanced Maps) • All auto-castable, dynamic and functional • Fluent and Functional via member functions
  • 40. Functions // Java public int sum( int a, int b){ return a + b; } // BoxLang no types function sum( a, b ){ return a + b } // Optional Generic types Numeric function sum( numeric a, numeric b ){ return a + b } // Optional Specific types int function sum( int a, int b ){ return a + b } • All functions `public` by default • All return types `any` by default • All argument types `any` by default • What is any???? • 2 types of type inference • Compile-Time • Runtime • Auto-casting • Type Promotions • Type Coercion
  • 41. Functions Arguments // Java Public void repeat( String str, int count, String separator ){} repeat( “hello”, 2, “;” ) // BoxLang repeat( required str, count:5, separator:“;” ){} // Call with defaults repeat( “hello” ) // Call with argument binding myMap = { str : “test”, separator : “,” } repeat( argumentCollection:myMap ) • Required arguments • Default values • Argument binding • Structs (Maps) • Arrays
  • 42. Null Coalescence Operator + Safe Navigation // Java Int getLength( String myString ){ if( myString != null ){ return myString.length() } return 0; } function getLength( myString ){ return myString.length() ?: 0 } Name = event.headers?.name // null Email = user.?getEmail() ?: “nada” • Elvis Operator • Any falsey expression can be used • Entire left hand expression detection • Safe Navigation • Any dererferencable object • Arrays, structs, objects, etc.
  • 43. String Interpolation function toString(){ return “Song{id=“#id#”, title=“#title#”, author=“#author#”} } function buildTemplate(){ return “{ Id : “#id#”, Title : “#title#”, Author : “#getAuthor(id)#” }“ } myMap = { id: createUUID(), title: “title”, author: “Luis” } buildTemplate( argumentCollection : myMap ) • Tired of string concatenation • Not anymore! • Anything between #expression# • “ For big strings with / without line breaks • Combine with scopes to do bindings!
  • 44. Closures & Lambdas & UDFs function toString(){ return “Song{id=“#id#”, title=“#title#”, author=“#author#”} } variables.toString = variables.getString function delayFunction(){ return () => dowork() } runAsync( () -> startWork() ) .then( result => computeMoreWork( result ) ) .then( result => sendOrder( result ) ) • Context-aware closures • Pure functions: lambdas • UDFs • Automatic coercion to Java Lambdas • Any signature
  • 45. Classes class { Property firstName; Property lastName; Property numeric age setter=false; } Person = new Person( “Luis”, “Majano”, “45” ) println( person.getFirstName() ) person.toJSON() • Automatic constructor • Automatic toString(), equals() and hashCode() • Automatic getters and setters • JSON / YAML / Custom First-Class • toJson()
  • 46. $bx - MetaProgramming Person = new Person() writedump( person.$bx.meta ) callJavaClass( person.$bx.$class ) Class{ Property importantData; Variables .$bx .registerChangeListener( “importantData”, (Key, newValue, oldValue) => clearCache() ) } myMap = { name : “Luis”, born : now() } myMap .$bx .registerChangeListener( (key, newValue, oldValue) => doSomething() ) • Available on ANY object • Includes • Metadata • Class Representation • Meta Methods • Change listeners • Inject properties • Remove properties • Inject methods • Remove Method
  • 47. Templating Language • Best of JSP, Blade, GSP, and CFML • Create your own `<bx:MyTag>` easily • Import collections of tags • Use BIFs • Nesting • Data Encapsulation • Much More < b x : o u t p u t > < d i v c l a s s = " b x - d u m p " > < t a b l e c l a s s = " b x - t a b l e S t " t i t l e = " # p o s I n C o d e # " > < c a p t i o n c l a s s = " b x - d h S t " r o l e = " b u t t o n " t a b i n d e x = " 0 " o p e n > < s t r o n g > Q u e r y : # v a r . r e c o r d c o u n t # r o w s < / s t r o n g > < / c a p t i o n > < t h e a d > < t r > < b x : l o o p a r r a y = " # v a r . c o l u m n L i s t . l i s t T o A r r a y ( ) # " i t e m = " c o l u m n " > < t h > # e n c o d e F o r H T M L ( c o l u m n ) # < / t h > < / b x : l o o p > < / t r > < / t h e a d > < t b o d y > < b x : l o o p q u e r y = " # v a r # " i t e m = " r o w " > < t r > < b x : l o o p a r r a y = " # v a r . c o l u m n L i s t . l i s t T o A r r a y ( ) # " i n d e x = " c o l u m n " > < t d > # e n c o d e F o r H T M L ( v a r [ c o l u m n ] ) # < / t d > < / b x : l o o p > < / t r > < / b x : l o o p > < / t b o d y > < / t a b l e > < / d i v > < / b x : o u t p u t >
  • 51. BoxLang Modules • Inspired by our HMVC Framework: ColdBox • Not OSGI • Core Runtime with lightest possible footprint • Hierarchical Class Loaders • Taps into the language life-cycle via events • Write them in Java or BoxLang or Both! • Executable as CLI packages • Integrates with Maven/Gradle
  • 52. BoxLang Modules FTP/SFTP Email Sending ESAPI UI Forms Password Encryption JDBC Image Manipulation PDF Tooling CSV / Spreadsheet INI OSHI YAML
  • 54. Web Application Framework • Inspired by Java contexts • Create in fi nite segregated applications in a single deployment by using one fi le • Application.bx • Life Cycle methods: • applicationStart(), applicationEnd(), sessionStart(), sessionEnd(), requestStart(), request(), requestEnd(), onError(), etc. • Data Sources, class loading, application scopes, security, settings, etc. • Sub applications • Highly con fi gurable and Highly portable
  • 56. Event-Driven Language • Interceptors for the language, application, and request • The best way to scale the language • Listen to the entire or speci fi c language life-cycles • Modules can listen/collaborate events • boxAnnounce(), boxAnnounceAsync() : CompletableFuture Event Channels Event Producers Event Event Event Event Consumers Event Event Event
  • 58. BoxLang Lambda Runtime • Leverages the Java SDK • BoxLang implements the AWS Runtime Handler • ortus.boxlang.runtime.aws.LambdaRunner::handleRequest • Bootstraps the runtime (Con fi gurations + Modules + Dependencies) • Tuned for fast startups • Acts as a Front Controller • Inspects incoming Request • Automatic logging/tracing • Automatic error handling • Delegates to the appropriate Class + Function • Automatic response handling
  • 60. • Implement Handlers as BoxLang Classes • Class by Convention: Lambda.bx • 1 method by convention: run( event, context, response ) • 1 Optional Application.bx for life-cycles or activating framework features • Expose more BoxLang functions via AWS Headers • x-bx-function : {functionName} • Expose more BoxLang classes as AWS URL Endpoints • /{route} : {route}.bx BoxLang Lambda Runtime
  • 61. • Run() function by convention • Event = Map of the request • Context = AWS Context Object • Response = Map of response data (optional) • Return: • Nothing • Simple Value • Complex Values BoxLang Lambda
  • 62. BoxLang Lambda Template • Turnkey Template for Lambda Development • Unit + Integration Testing • JUnit/TestBox + SAM • Gradle • Java Dependencies + Packaging + Testing • CommandBox • BoxLang Dependencies • Github Actions CI • Testing -> Packaging -> Deployment https://github.com/ortus-boxlang/bx-aws-lambda-template