SlideShare a Scribd company logo
1 of 47
Adam Larter
Principal Solutions Architect, Developer Specialist
Real-world development
Decomposing a serverless skills-based routing application on AWS
CUSTOMER SPECIFICATION
• A system that can direct my customers’ queries to the best-suited team
member with the right skills to help the customer
• A mobile app that my staff use to see tasks assigned to them
• Push notifications to alert team members when there’s work to do
• Staff ‘accept’ and ‘complete’ tasks as they work on them
• Automatic staff registration – no admin intervention
• An admin portal to securely manage
and monitor activity
D E V L O U N G E
• The ability to see trends – busy times of the day so I can schedule staff
• The ability to create new departments and specialisations
• The ability to send ad-hoc messages to team members, and re-assign tasks
if need be
• A simple interface for my team members and of course, my customers
• Ability to embrace the API economy and create a SaaS offering that provides
throttling and quota management
CUSTOMER SPECIFICATION
D E V L O U N G E
• Use AWS IoT Buttons as the customer interface – simple button press
• Multi-modal use of the buttons – single, long and double press actions
• No relational databases – all NoSQL
• Microservice architecture
• Serverless! And Service-full!
• Low-cost, low-operational maintenance
TECHNICAL SPECIFICATION
D E V L O U N G E
• Infrastructure as code – complete DR story for my system
• Integrated security from user app/admin portal to back-end
• Decoupled, asynchronous processing where possible
• Fast development iteration
D E V L O U N G E
TECHNICAL SPECIFICATION
D E V L O U N G E
AWS IoT BUTTON
DEMONSTRATION
Amazon API Gateway AWS Lambda Amazon CognitoAmazon DynamoDB
Host and route our
API calls, manage
quotas, security and
SDK generation
Execute our app’s
business logic without
having to worry about
servers
Integrated
AuthZ and AuthN
Highly durable and
performant data store
D E V L O U N G E
MAIN AWS COMPONENTS
ARCHITECTURE
Amazon
CloudFront
Amazon API
Gateway
AWS IoT AWS IoT
rule
AWS Lambda
Function
Amazon
DynamoDB
Amazon
SNS
AWS Lambda
Function
Amazon Elasticsearch
Service
AWS
Lambda
Functions
Decoupled statistics
processing
IoT Ingress processing
Web API handling
Statistics engine
Data ingress & API processing
Amazon
Cognito
Mobile apps
Websites
API
ConsumersAuth
DEPLOYMENT
D E V L O U N G E
Options for serverless
DevOps deployment on AWS Toolchain
deployment
(CI/CD)
Frameworks
(Claudia.js, Chalice,
Serverless.com
Kappa, etc.)
Manual
deployment
(Console/CLI)
Code in-place
Whole stack update
(SAM / CloudFormation)
Serverless Application Model (SAM) / CloudFormation
Declaratively define your serverless environment including API Gateway
endpoints and Lambda functions – Swagger import supported
Manual & CI/CD pipelines
AWS Console
AWS CLI scripting
Serverless frameworks
Claudia.js / Serverless.com (Python & NodeJS),
Chalice, Zappa, Kappa and others
DEPLOYMENT OPTIONS
D E V L O U N G E
AWS SAM is a specification that defines serverless applications
Defines simplified CloudFormation syntax for expressing
serverless resources
Covers APIs (API Gateway), Lambda functions, event source
mappings and Amazon DynamoDB tables
Lambda environment variables and event sources
AWS SERVERLESS APPLICATION MODEL (SAM)
D E V L O U N G E
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
MySimpleFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs4.3
CodeUri: s3://<source-bucket>/MyCode.zip
Policies: AmazonDynamoDBFullAccess
Environment:
Variables:
TABLE_NAME: !Ref Table
Events:
MyUploadEvent:
Type: S3
Properties:
Id: !Ref MyBucket
Events: Create
MyBucket:
Type: AWS::S3::Bucket
Environment variable declarations
Function definition
Event source mapping
Function execution policy / role
AWS SERVERLESS APPLICATION MODEL (SAM)
DESIGN TIPS
D E V L O U N G E
• Automate the base infrastructure with CloudFormation/SAM
• Use a developer automation tool to do the heavy lifting and support fast,
iterative development – grunt, gulp, npm… your favourite tool du jour
• Layout your project from the start to allow for local runs, local testing and
easy deployment into your AWS Dev environment
• Every developer in your team has their own full-stack environment and can
deploy to it and test prior to checking in code – fast, contention-free
iteration when writing and debugging features
DESIGN TIPS
D E V L O U N G E
AN ENVIRONMENT FOR EACH DEV + SHARED TEST
API
Gateway
Amazon
Cognito
AWS
Lambda
functions
Amazon
DynamoDB
Developer1
API
Gateway
Amazon
Cognito
AWS
Lambda
functions
Amazon
DynamoDB
Developer2
API
Gateway
Amazon
Cognito
AWS
Lambda
functions
Amazon
DynamoDB
SharedTest/UAT
CI/CD Source Control
Developer deploys fast
iterations to dedicated
environment
CI/CD toolchain deploys
committed code to shared
test/staging environment using
SAM/CloudFormation
toProduction
• Use CloudFormation/SAM to build your dev environment – From. The. Start!
Repeatable… Reliable... Reusable... Easily stamp out multiple dev
environments
• Plan to break your application functionality into decoupled modules and
embrace asynchronicity and background processes with CW Events
• Never keep application state in your Lambda function code – keep state in
a shared cache and cache everything all the time – design for multi-tenancy
• Use the right data store – do you REALLY need an RDBMS?
D E V L O U N G E
DESIGN TIPS
Agents
Capabilities Categories
TasksButtons
0..*
1..*
*..*
1..*
DATA ENTITY RELATIONSHIPS
D E V L O U N G E
SELECT * FROM TASKS
INNER JOIN AGENTS
INNER JOIN BUTTONS
INNER JOIN CAPABILITIES…
Capabilities
1..*
Agents
Categories
Tasks
Buttons
DATA ENTITY RELATIONSHIPS
D E V L O U N G E
Capabilities Amazon Elasticache
memcached
or Redis
AWS Lambda
manages ‘joins’ in the middle-tier
and refreshes cache as needed
Tasks pulled from DynamoDB
SSoT for ancillary
data held in DynamoDB
• Use DynamoDB Local and memcached for testing your data model
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html
DESIGN TIPS
D E V L O U N G E
• Local config.json for fast, iterative development
and environment variables to override config settings at runtime
DESIGN TIPS
D E V L O U N G E
Let’s look at some code
D E V L O U N G E
• Local config.json for fast, iterative development
and environment variables to override config settings at runtime
• Switch behaviour based on the LAMBDA_TASK_ROOT variable
to facilitate fast, local testing and iteration
• “Finaliser” to give back resources – and design tests to confirm you are
calling the finaliser before calling Lambda
(language dependent)
• Use locks, not just moats when it comes to security
DESIGN TIPS
D E V L O U N G E
AWS COGNITO
User Pools & Identity Federation
D E V L O U N G E
ADMIN AUTH: COGNITO USER POOLS
Mobile
apps
Admin Portal
Partner
Services
AWS Lambda
functions
API
Gateway
Amazon
Cognito
ADMIN AUTH: COGNITO USER POOLS
Mobile
apps
Admin Portal
Partner
Services
AWS Lambda
functions
API
Gateway
Amazon
Cognito
ADMIN AUTH: COGNITO USER POOLS
Mobile
apps
Admin Portal
Partner
Services
AWS Lambda
functions
API
Gateway
Amazon
Cognito
403 – Unauthorised from API GW
403 – Unauthorised from app
Cognito Identity
Token
Mobile
apps
Admin Portal
Partner
Services
AWS Lambda
functions
API
Gateway
Amazon
Cognito
3rd Party Identity
Facebook, Google,
Twitter, OpenID etc
Public Identity
Provider
USER AUTH: SIGV4 / IAM
Mobile
apps
Admin Portal
Partner
Services
AWS Lambda
functions
API
Gateway
Amazon
Cognito
IAM
USER AUTH: SIGV4 / IAM
Mobile
apps
Admin Portal
Partner
Services
AWS Lambda
functions receive
Cognito Identity Id
of caller and
Identity Pool Id
API
Gateway
Amazon
Cognito
403 – Unauthorised from API GW
403 – Unauthorised from app
SigV4-signed Url
USER AUTH: SIGV4 / IAM
AMAZON API GATEWAY
Integrated security & SDK generation
D E V L O U N G E
Let’s test some code
D E V L O U N G E
• What are we looking for when we test Lambda functions?
• Asynchronous calls not returning
• Missing ‘completion’ by calling context.done() or context.callback()
• Timeouts
• Giving back resources like socket connections
• How can I test my Lambda functions?
• The same way you test standalone NodeJS/Java/Python/CSharp!
• Isolate your components/functions so they can be tested
• Consider TDD – start with testing before writing code
• Test your code’s business logic using local DynamoDB and
memcache to reduce reliance on network
TESTING LAMBDA FUNCTIONS
D E V L O U N G E
[Test]
function testSomething()
{
ASSERT(true);
// todo – I am too busy right now
return true;
}
TESTING ANTI-PATTERN!
• Amazon Device Farm
• Test on real iOS, Android and Fire OS devices in the cloud
• Test native apps or web apps
• Execute automated tests in popular automation frameworks:
• Appium (Java Junit, Java TestNG, Python – for web application testing)
• Calabash
• Espresso
• Junit
• XCTest
• KIF
• Robotium and more
TESTING MOBILE APPS
D E V L O U N G E
• Built-in Fuzz Test (Android & iOS)
• Randomly sends user interface events to devices and then reports results
• Built-in Explorer Test (Android)
• Crawls your app by analysing each screen and interacting as if it were an end user
• Takes screenshots as it explores
• Provide Device Farm with credentials so the test can log in
• View actionable test results
• Screenshots, videos, logs and performance data
• Integrate testing into your workflow
• Use the Device Farm API directly or make use of the
Jenkins plug-in or Gradle plug-in
TESTING MOBILE APPS
D E V L O U N G E
Visualisation with ElasticSearch
and graphing frameworks
D E V L O U N G E
• Amazon ElasticSearch – managed service
• No need to worry about infrastructure - *aaS!
• Script everything – the cluster… the schema... test data...
• Define your index mappings explicitly
(for example, timestamps and enums)
• Always secure access to your domain using a restrictive access policy!
• http-aws-es credential helper module on npm
VISUALISATION
D E V L O U N G E
CONNECTING TO ES WITH IAM CREDENTIALS
D E V L O U N G E
STATISTICS INDEX FORMAT – NEW BUTTON PRESS
D E V L O U N G E
STATISTICS INDEX FORMAT – TASK COMPLETED
D E V L O U N G E
ES AGGREGATIONS
D E V L O U N G E
• ElasticSearch Getting Started Guide
• www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html
• ElasticSearch on NodeJS
• elasticsearch module on npm
• http-aws-es credential helper module on npm
• AngularJS web UI framework
• angularjs.org
• Angular Chart Framework
• jtblin.github.io/angular-chart.js/
REFERENCES
D E V L O U N G E
• Grunt – the Javascript task runner
• gruntjs.com
• Helpful Grunt plug-ins for AWS
• grunt-aws-lambda module on npm
• grunt-aws module on npm
• Mocha test framework
• mochajs.org
REFERENCES
D E V L O U N G E
• Cognito JWT
• jsonwebtoken module on npm
• jwk-to-pem module on npm
• Render/decode JWT
• jwt.io
• AWS Code Samples on GitHub
• github.com/awslabs
• FireOS / Android viewer
• Vysor Chrome Extension
REFERENCES
D E V L O U N G E
Adam Larter
Principal Solutions Architect, Developer Specialist
Thank you!

More Related Content

What's hot

AWS Startup Webinar | Developing on AWS
AWS Startup Webinar | Developing on AWSAWS Startup Webinar | Developing on AWS
AWS Startup Webinar | Developing on AWS
Amazon Web Services
 

What's hot (20)

Accelerating Software Delivery with AWS Developer Tools & AWS Mobile services...
Accelerating Software Delivery with AWS Developer Tools & AWS Mobile services...Accelerating Software Delivery with AWS Developer Tools & AWS Mobile services...
Accelerating Software Delivery with AWS Developer Tools & AWS Mobile services...
 
Introduction to Cloud Computing with Amazon Web Services-ASEAN Workshop Serie...
Introduction to Cloud Computing with Amazon Web Services-ASEAN Workshop Serie...Introduction to Cloud Computing with Amazon Web Services-ASEAN Workshop Serie...
Introduction to Cloud Computing with Amazon Web Services-ASEAN Workshop Serie...
 
AWS re:Invent 2016: State of the Union: Containers (CON316)
AWS re:Invent 2016: State of the Union:  Containers (CON316)AWS re:Invent 2016: State of the Union:  Containers (CON316)
AWS re:Invent 2016: State of the Union: Containers (CON316)
 
Introduction to Cloud Computing with Amazon Web Services
Introduction to Cloud Computing with Amazon Web ServicesIntroduction to Cloud Computing with Amazon Web Services
Introduction to Cloud Computing with Amazon Web Services
 
Raleigh DevDay 2017: Build a serverless web application in one day workshop
Raleigh DevDay 2017: Build a serverless web application in one day workshopRaleigh DevDay 2017: Build a serverless web application in one day workshop
Raleigh DevDay 2017: Build a serverless web application in one day workshop
 
Vn introduction to cloud computing with amazon web services
Vn   introduction to cloud computing with amazon web servicesVn   introduction to cloud computing with amazon web services
Vn introduction to cloud computing with amazon web services
 
Build an app on aws for your first 10 million users (2)
Build an app on aws for your first 10 million users (2)Build an app on aws for your first 10 million users (2)
Build an app on aws for your first 10 million users (2)
 
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)
 
AWS Startup Webinar | Developing on AWS
AWS Startup Webinar | Developing on AWSAWS Startup Webinar | Developing on AWS
AWS Startup Webinar | Developing on AWS
 
AWS Summit - Brisbane 2014 - Keynote
AWS Summit - Brisbane 2014 - KeynoteAWS Summit - Brisbane 2014 - Keynote
AWS Summit - Brisbane 2014 - Keynote
 
Amazon AI: soluzioni di intelligenza artificiale pronte per l'uso
Amazon AI: soluzioni di intelligenza artificiale pronte per l'usoAmazon AI: soluzioni di intelligenza artificiale pronte per l'uso
Amazon AI: soluzioni di intelligenza artificiale pronte per l'uso
 
SRV414 NEW LAUNCH! Introducing AWS CodeStar: The central experience to quickl...
SRV414 NEW LAUNCH! Introducing AWS CodeStar: The central experience to quickl...SRV414 NEW LAUNCH! Introducing AWS CodeStar: The central experience to quickl...
SRV414 NEW LAUNCH! Introducing AWS CodeStar: The central experience to quickl...
 
雲端媒體串流
雲端媒體串流雲端媒體串流
雲端媒體串流
 
ENT310 Microservices? Dynamic Infrastructure? - Adventures in Keeping Your Ap...
ENT310 Microservices? Dynamic Infrastructure? - Adventures in Keeping Your Ap...ENT310 Microservices? Dynamic Infrastructure? - Adventures in Keeping Your Ap...
ENT310 Microservices? Dynamic Infrastructure? - Adventures in Keeping Your Ap...
 
Modern Data Architectures for Business Insights at Scale
Modern Data Architectures for Business Insights at Scale Modern Data Architectures for Business Insights at Scale
Modern Data Architectures for Business Insights at Scale
 
SRV409 Deep Dive on Microservices and Docker
SRV409 Deep Dive on Microservices and DockerSRV409 Deep Dive on Microservices and Docker
SRV409 Deep Dive on Microservices and Docker
 
A Brief Look at Serverless Architecture
A Brief Look at Serverless ArchitectureA Brief Look at Serverless Architecture
A Brief Look at Serverless Architecture
 
Journey Towards Scaling Your Application to 10 million users
Journey Towards Scaling Your Application to 10 million usersJourney Towards Scaling Your Application to 10 million users
Journey Towards Scaling Your Application to 10 million users
 
使用 AWS 無伺服器運算服務打造您的第一個語音助理
使用 AWS 無伺服器運算服務打造您的第一個語音助理使用 AWS 無伺服器運算服務打造您的第一個語音助理
使用 AWS 無伺服器運算服務打造您的第一個語音助理
 
DevOps on AWS
DevOps on AWSDevOps on AWS
DevOps on AWS
 

Viewers also liked

開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
Takuro Sasaki
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話
Daijiro Abe
 

Viewers also liked (20)

Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
Introduction to AWS and Cloud Computing - Module 1 Part 1 - AWSome Day 2017
 
Managing Financial Technology Is It An Art Or Science
Managing Financial Technology   Is It An Art Or ScienceManaging Financial Technology   Is It An Art Or Science
Managing Financial Technology Is It An Art Or Science
 
ANZ- CV
ANZ- CVANZ- CV
ANZ- CV
 
AWS Sydney Summit 2013 - Keynote
AWS Sydney Summit 2013 - KeynoteAWS Sydney Summit 2013 - Keynote
AWS Sydney Summit 2013 - Keynote
 
Convenience and Security for banking customers with CA Advanced Authentication
Convenience and Security for banking customers with CA Advanced AuthenticationConvenience and Security for banking customers with CA Advanced Authentication
Convenience and Security for banking customers with CA Advanced Authentication
 
Comparison of Westpac, Commonwealth Bank, ANZ, Bankwest and Other Top Banks F...
Comparison of Westpac, Commonwealth Bank, ANZ, Bankwest and Other Top Banks F...Comparison of Westpac, Commonwealth Bank, ANZ, Bankwest and Other Top Banks F...
Comparison of Westpac, Commonwealth Bank, ANZ, Bankwest and Other Top Banks F...
 
Security system in banks
Security system in banksSecurity system in banks
Security system in banks
 
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
 
EC2とLinuxディストロ事情
EC2とLinuxディストロ事情EC2とLinuxディストロ事情
EC2とLinuxディストロ事情
 
Incident Coordination Workshop
Incident Coordination WorkshopIncident Coordination Workshop
Incident Coordination Workshop
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
E banking security
E banking securityE banking security
E banking security
 
初心者向けWebinar AWSで開発環境を構築しよう
初心者向けWebinar AWSで開発環境を構築しよう初心者向けWebinar AWSで開発環境を構築しよう
初心者向けWebinar AWSで開発環境を構築しよう
 
Building and Growing SaaS on AWS for Partners
Building and Growing SaaS on AWS for PartnersBuilding and Growing SaaS on AWS for Partners
Building and Growing SaaS on AWS for Partners
 
AWS Black Belt Techシリーズ Amazon VPC
AWS Black Belt Techシリーズ Amazon VPCAWS Black Belt Techシリーズ Amazon VPC
AWS Black Belt Techシリーズ Amazon VPC
 
AWS Lunch and Learn - Agile Development
AWS Lunch and Learn - Agile DevelopmentAWS Lunch and Learn - Agile Development
AWS Lunch and Learn - Agile Development
 
Accenture Technology Vision for Banking
Accenture Technology Vision for BankingAccenture Technology Vision for Banking
Accenture Technology Vision for Banking
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話
 
Cost Optimisation on AWS
Cost Optimisation on AWSCost Optimisation on AWS
Cost Optimisation on AWS
 
Telenor Connexion
Telenor Connexion Telenor Connexion
Telenor Connexion
 

Similar to ANZ Dev Lounge Session - Feb 2017

Similar to ANZ Dev Lounge Session - Feb 2017 (20)

Deep Dive on Serverless Application Development NY Loft
Deep Dive on Serverless Application Development NY LoftDeep Dive on Serverless Application Development NY Loft
Deep Dive on Serverless Application Development NY Loft
 
Managing the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaManaging the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS Lambda
 
Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless World
 
Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless World
 
Managing the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS LambdaManaging the Continuous Delivery of Code to AWS Lambda
Managing the Continuous Delivery of Code to AWS Lambda
 
DevOps on AWS - Accelerating Software Delivery
DevOps on AWS - Accelerating Software DeliveryDevOps on AWS - Accelerating Software Delivery
DevOps on AWS - Accelerating Software Delivery
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Dev Ops on AWS - Accelerating Software Delivery - AWS-Summit SG 2017
Dev Ops on AWS - Accelerating Software Delivery - AWS-Summit SG 2017Dev Ops on AWS - Accelerating Software Delivery - AWS-Summit SG 2017
Dev Ops on AWS - Accelerating Software Delivery - AWS-Summit SG 2017
 
Build an App on AWS for Your First 10 Million Users
Build an App on AWS for Your First 10 Million UsersBuild an App on AWS for Your First 10 Million Users
Build an App on AWS for Your First 10 Million Users
 
SRV302 Deep Dive on Serverless Application Development
SRV302 Deep Dive on Serverless Application DevelopmentSRV302 Deep Dive on Serverless Application Development
SRV302 Deep Dive on Serverless Application Development
 
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar SeriesContinuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
Continuous Delivery with AWS Lambda - AWS April 2016 Webinar Series
 
Ovations AWS pop-up loft 2019 Technical presentation
Ovations AWS pop-up loft 2019 Technical presentationOvations AWS pop-up loft 2019 Technical presentation
Ovations AWS pop-up loft 2019 Technical presentation
 
Serverless in production (O'Reilly Software Architecture)
Serverless in production (O'Reilly Software Architecture)Serverless in production (O'Reilly Software Architecture)
Serverless in production (O'Reilly Software Architecture)
 
Serverless in production, an experience report (Going Serverless)
Serverless in production, an experience report (Going Serverless)Serverless in production, an experience report (Going Serverless)
Serverless in production, an experience report (Going Serverless)
 
Deep Dive on Serverless Stack
Deep Dive on Serverless StackDeep Dive on Serverless Stack
Deep Dive on Serverless Stack
 
Serverless in production, an experience report (JeffConf)
Serverless in production, an experience report (JeffConf)Serverless in production, an experience report (JeffConf)
Serverless in production, an experience report (JeffConf)
 
AWS September Webinar Series - Build Cross-Platform Mobile Apps with AWS and...
AWS September Webinar Series -  Build Cross-Platform Mobile Apps with AWS and...AWS September Webinar Series -  Build Cross-Platform Mobile Apps with AWS and...
AWS September Webinar Series - Build Cross-Platform Mobile Apps with AWS and...
 
AWS Summit Auckland - Getting Started with AWS Lambda and the Serverless Cloud
AWS Summit Auckland - Getting Started with AWS Lambda and the Serverless CloudAWS Summit Auckland - Getting Started with AWS Lambda and the Serverless Cloud
AWS Summit Auckland - Getting Started with AWS Lambda and the Serverless Cloud
 
20180111 we bde-bs - serverless url shortener
20180111   we bde-bs - serverless url shortener20180111   we bde-bs - serverless url shortener
20180111 we bde-bs - serverless url shortener
 
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
 

More from Amazon Web Services

Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
Amazon Web Services
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
Amazon Web Services
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
Amazon Web Services
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
Amazon Web Services
 

More from Amazon Web Services (20)

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS Fargate
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWS
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot
 
Open banking as a service
Open banking as a serviceOpen banking as a service
Open banking as a service
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
 
Computer Vision con AWS
Computer Vision con AWSComputer Vision con AWS
Computer Vision con AWS
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatare
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e web
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
 
Fundraising Essentials
Fundraising EssentialsFundraising Essentials
Fundraising Essentials
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container Service
 

Recently uploaded

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc
 

Recently uploaded (20)

TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Quantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation ComputingQuantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation Computing
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Choreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software EngineeringChoreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software Engineering
 
Navigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseNavigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern Enterprise
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governance
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
 
Simplifying Mobile A11y Presentation.pptx
Simplifying Mobile A11y Presentation.pptxSimplifying Mobile A11y Presentation.pptx
Simplifying Mobile A11y Presentation.pptx
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
JavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuideJavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate Guide
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 

ANZ Dev Lounge Session - Feb 2017

  • 1. Adam Larter Principal Solutions Architect, Developer Specialist Real-world development Decomposing a serverless skills-based routing application on AWS
  • 2. CUSTOMER SPECIFICATION • A system that can direct my customers’ queries to the best-suited team member with the right skills to help the customer • A mobile app that my staff use to see tasks assigned to them • Push notifications to alert team members when there’s work to do • Staff ‘accept’ and ‘complete’ tasks as they work on them • Automatic staff registration – no admin intervention • An admin portal to securely manage and monitor activity D E V L O U N G E
  • 3. • The ability to see trends – busy times of the day so I can schedule staff • The ability to create new departments and specialisations • The ability to send ad-hoc messages to team members, and re-assign tasks if need be • A simple interface for my team members and of course, my customers • Ability to embrace the API economy and create a SaaS offering that provides throttling and quota management CUSTOMER SPECIFICATION D E V L O U N G E
  • 4. • Use AWS IoT Buttons as the customer interface – simple button press • Multi-modal use of the buttons – single, long and double press actions • No relational databases – all NoSQL • Microservice architecture • Serverless! And Service-full! • Low-cost, low-operational maintenance TECHNICAL SPECIFICATION D E V L O U N G E
  • 5. • Infrastructure as code – complete DR story for my system • Integrated security from user app/admin portal to back-end • Decoupled, asynchronous processing where possible • Fast development iteration D E V L O U N G E TECHNICAL SPECIFICATION
  • 6. D E V L O U N G E AWS IoT BUTTON
  • 8. Amazon API Gateway AWS Lambda Amazon CognitoAmazon DynamoDB Host and route our API calls, manage quotas, security and SDK generation Execute our app’s business logic without having to worry about servers Integrated AuthZ and AuthN Highly durable and performant data store D E V L O U N G E MAIN AWS COMPONENTS
  • 9. ARCHITECTURE Amazon CloudFront Amazon API Gateway AWS IoT AWS IoT rule AWS Lambda Function Amazon DynamoDB Amazon SNS AWS Lambda Function Amazon Elasticsearch Service AWS Lambda Functions Decoupled statistics processing IoT Ingress processing Web API handling Statistics engine Data ingress & API processing Amazon Cognito Mobile apps Websites API ConsumersAuth
  • 10. DEPLOYMENT D E V L O U N G E
  • 11. Options for serverless DevOps deployment on AWS Toolchain deployment (CI/CD) Frameworks (Claudia.js, Chalice, Serverless.com Kappa, etc.) Manual deployment (Console/CLI) Code in-place Whole stack update (SAM / CloudFormation)
  • 12. Serverless Application Model (SAM) / CloudFormation Declaratively define your serverless environment including API Gateway endpoints and Lambda functions – Swagger import supported Manual & CI/CD pipelines AWS Console AWS CLI scripting Serverless frameworks Claudia.js / Serverless.com (Python & NodeJS), Chalice, Zappa, Kappa and others DEPLOYMENT OPTIONS D E V L O U N G E
  • 13. AWS SAM is a specification that defines serverless applications Defines simplified CloudFormation syntax for expressing serverless resources Covers APIs (API Gateway), Lambda functions, event source mappings and Amazon DynamoDB tables Lambda environment variables and event sources AWS SERVERLESS APPLICATION MODEL (SAM) D E V L O U N G E
  • 14. AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: MySimpleFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs4.3 CodeUri: s3://<source-bucket>/MyCode.zip Policies: AmazonDynamoDBFullAccess Environment: Variables: TABLE_NAME: !Ref Table Events: MyUploadEvent: Type: S3 Properties: Id: !Ref MyBucket Events: Create MyBucket: Type: AWS::S3::Bucket Environment variable declarations Function definition Event source mapping Function execution policy / role AWS SERVERLESS APPLICATION MODEL (SAM)
  • 15. DESIGN TIPS D E V L O U N G E
  • 16. • Automate the base infrastructure with CloudFormation/SAM • Use a developer automation tool to do the heavy lifting and support fast, iterative development – grunt, gulp, npm… your favourite tool du jour • Layout your project from the start to allow for local runs, local testing and easy deployment into your AWS Dev environment • Every developer in your team has their own full-stack environment and can deploy to it and test prior to checking in code – fast, contention-free iteration when writing and debugging features DESIGN TIPS D E V L O U N G E
  • 17. AN ENVIRONMENT FOR EACH DEV + SHARED TEST API Gateway Amazon Cognito AWS Lambda functions Amazon DynamoDB Developer1 API Gateway Amazon Cognito AWS Lambda functions Amazon DynamoDB Developer2 API Gateway Amazon Cognito AWS Lambda functions Amazon DynamoDB SharedTest/UAT CI/CD Source Control Developer deploys fast iterations to dedicated environment CI/CD toolchain deploys committed code to shared test/staging environment using SAM/CloudFormation toProduction
  • 18. • Use CloudFormation/SAM to build your dev environment – From. The. Start! Repeatable… Reliable... Reusable... Easily stamp out multiple dev environments • Plan to break your application functionality into decoupled modules and embrace asynchronicity and background processes with CW Events • Never keep application state in your Lambda function code – keep state in a shared cache and cache everything all the time – design for multi-tenancy • Use the right data store – do you REALLY need an RDBMS? D E V L O U N G E DESIGN TIPS
  • 19. Agents Capabilities Categories TasksButtons 0..* 1..* *..* 1..* DATA ENTITY RELATIONSHIPS D E V L O U N G E SELECT * FROM TASKS INNER JOIN AGENTS INNER JOIN BUTTONS INNER JOIN CAPABILITIES… Capabilities 1..*
  • 20. Agents Categories Tasks Buttons DATA ENTITY RELATIONSHIPS D E V L O U N G E Capabilities Amazon Elasticache memcached or Redis AWS Lambda manages ‘joins’ in the middle-tier and refreshes cache as needed Tasks pulled from DynamoDB SSoT for ancillary data held in DynamoDB
  • 21. • Use DynamoDB Local and memcached for testing your data model http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html DESIGN TIPS D E V L O U N G E
  • 22. • Local config.json for fast, iterative development and environment variables to override config settings at runtime DESIGN TIPS D E V L O U N G E
  • 23. Let’s look at some code D E V L O U N G E
  • 24. • Local config.json for fast, iterative development and environment variables to override config settings at runtime • Switch behaviour based on the LAMBDA_TASK_ROOT variable to facilitate fast, local testing and iteration • “Finaliser” to give back resources – and design tests to confirm you are calling the finaliser before calling Lambda (language dependent) • Use locks, not just moats when it comes to security DESIGN TIPS D E V L O U N G E
  • 25. AWS COGNITO User Pools & Identity Federation D E V L O U N G E
  • 26. ADMIN AUTH: COGNITO USER POOLS Mobile apps Admin Portal Partner Services AWS Lambda functions API Gateway Amazon Cognito
  • 27. ADMIN AUTH: COGNITO USER POOLS Mobile apps Admin Portal Partner Services AWS Lambda functions API Gateway Amazon Cognito
  • 28. ADMIN AUTH: COGNITO USER POOLS Mobile apps Admin Portal Partner Services AWS Lambda functions API Gateway Amazon Cognito 403 – Unauthorised from API GW 403 – Unauthorised from app Cognito Identity Token
  • 29. Mobile apps Admin Portal Partner Services AWS Lambda functions API Gateway Amazon Cognito 3rd Party Identity Facebook, Google, Twitter, OpenID etc Public Identity Provider USER AUTH: SIGV4 / IAM
  • 31. Mobile apps Admin Portal Partner Services AWS Lambda functions receive Cognito Identity Id of caller and Identity Pool Id API Gateway Amazon Cognito 403 – Unauthorised from API GW 403 – Unauthorised from app SigV4-signed Url USER AUTH: SIGV4 / IAM
  • 32. AMAZON API GATEWAY Integrated security & SDK generation D E V L O U N G E
  • 33. Let’s test some code D E V L O U N G E
  • 34. • What are we looking for when we test Lambda functions? • Asynchronous calls not returning • Missing ‘completion’ by calling context.done() or context.callback() • Timeouts • Giving back resources like socket connections • How can I test my Lambda functions? • The same way you test standalone NodeJS/Java/Python/CSharp! • Isolate your components/functions so they can be tested • Consider TDD – start with testing before writing code • Test your code’s business logic using local DynamoDB and memcache to reduce reliance on network TESTING LAMBDA FUNCTIONS D E V L O U N G E
  • 35. [Test] function testSomething() { ASSERT(true); // todo – I am too busy right now return true; } TESTING ANTI-PATTERN!
  • 36. • Amazon Device Farm • Test on real iOS, Android and Fire OS devices in the cloud • Test native apps or web apps • Execute automated tests in popular automation frameworks: • Appium (Java Junit, Java TestNG, Python – for web application testing) • Calabash • Espresso • Junit • XCTest • KIF • Robotium and more TESTING MOBILE APPS D E V L O U N G E
  • 37. • Built-in Fuzz Test (Android & iOS) • Randomly sends user interface events to devices and then reports results • Built-in Explorer Test (Android) • Crawls your app by analysing each screen and interacting as if it were an end user • Takes screenshots as it explores • Provide Device Farm with credentials so the test can log in • View actionable test results • Screenshots, videos, logs and performance data • Integrate testing into your workflow • Use the Device Farm API directly or make use of the Jenkins plug-in or Gradle plug-in TESTING MOBILE APPS D E V L O U N G E
  • 38. Visualisation with ElasticSearch and graphing frameworks D E V L O U N G E
  • 39. • Amazon ElasticSearch – managed service • No need to worry about infrastructure - *aaS! • Script everything – the cluster… the schema... test data... • Define your index mappings explicitly (for example, timestamps and enums) • Always secure access to your domain using a restrictive access policy! • http-aws-es credential helper module on npm VISUALISATION D E V L O U N G E
  • 40. CONNECTING TO ES WITH IAM CREDENTIALS D E V L O U N G E
  • 41. STATISTICS INDEX FORMAT – NEW BUTTON PRESS D E V L O U N G E
  • 42. STATISTICS INDEX FORMAT – TASK COMPLETED D E V L O U N G E
  • 43. ES AGGREGATIONS D E V L O U N G E
  • 44. • ElasticSearch Getting Started Guide • www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html • ElasticSearch on NodeJS • elasticsearch module on npm • http-aws-es credential helper module on npm • AngularJS web UI framework • angularjs.org • Angular Chart Framework • jtblin.github.io/angular-chart.js/ REFERENCES D E V L O U N G E
  • 45. • Grunt – the Javascript task runner • gruntjs.com • Helpful Grunt plug-ins for AWS • grunt-aws-lambda module on npm • grunt-aws module on npm • Mocha test framework • mochajs.org REFERENCES D E V L O U N G E
  • 46. • Cognito JWT • jsonwebtoken module on npm • jwk-to-pem module on npm • Render/decode JWT • jwt.io • AWS Code Samples on GitHub • github.com/awslabs • FireOS / Android viewer • Vysor Chrome Extension REFERENCES D E V L O U N G E
  • 47. Adam Larter Principal Solutions Architect, Developer Specialist Thank you!