SlideShare a Scribd company logo
DEV IN CLOUD: HOW WE ARE DOING IT
Dmytro Voloshyn, co-founder at
Programmer 8+ years
Marketing manager in AB-InBev 2+ years
Consulting projects, outsource, sales 2+ years
Сo—founder&CTO at Preply, 4+ years and now
Development in the could: How do we do it(Cloud computing. Microservices. Faas)
“Cloud is about how you do
computing, not where you do
computing”
— Paul Maritz, CEO oF VMware
Trends
Serverless(FaaS)
Cloud Native Applications
PaaS ecosystems, SaaS’s rise
1. Serverless(FaaS)
Deployment evolution
Rent/Buy Physical
server
Snowflake server
Deploy in days
Live for years
Rent a virtualised
cloud server
EC2
Deploy in minutes
Live for weeks
Containerised
deployment
Docker
Deploy in seconds
Live for hours
Serverless
FaaS(eg. Lambda)
Deploy in milliseconds
Live for seconds
Chatbot :)
AWS Lambda
Development in the could: How do we do it(Cloud computing. Microservices. Faas)
Function as a unit of application logic
Side effects, pure functions, real-life example
Machine
Assembly
Procedural
Object oriented
Functional
SaaS -> PaaS -> IaaS -> BaaS -> FaaS
Faster scaling, #NoOps, Less$,
Amazon AWS Lambda, Google Cloud Functions,
and Windows Azure Functions
2. Cloud Native
Applications
Cloud Native
Applications
Antifragile
Pay as you go
(pricing on demand)
Hyper scaling
(traffic, data, features)
Continuous
Delivery
(DevOps)
Antifragile
Everything fails all the time
Focus on MTTR not MTTF
8 fallacies
Pay as you go
Provisioned vs. OnDemand
Fixed servers vs. resource pooling
#NoDevOps
Hyperscaling
Elastic, on-demand
Microservises
Serverless
Continuous Delivery
Diagnosability: traces, metrics, logs
Automate tasks, scripts
Automated delivery
Loose coupling
Microservices
Containerisation
Virtualise ‘em all
Microservices
Containerisation
Composition
Bring everyone together
Microservices
Containerisation
Composition
Orchestration
Orchestration codifies knowledge
Microservices
Treat resources as cattle not pets
VS.
Orchestration example
{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
"DBUser": {
"NoEcho": "true",
"Type": "String",
"Description": "Test database admin account name",
"MinLength": "1",
"MaxLength": "16",
"AllowedPattern": "[a-zA-Z][a-zA-Z0-9]*",
"ConstraintDescription": "must begin with a letter and contain only alphanumeric characters."
},
"DBPassword": {
"NoEcho": "true",
"Type": "String",
"Description": "Test database admin account password",
"MinLength": "8",
"MaxLength": "41",
"AllowedPattern": "[a-zA-Z0-9]*",
"ConstraintDescription": "must contain only alphanumeric characters."
},
"OperatorEMail": {
"Description": "EMail address to notify if there are any operational issues",
"Type": "String",
"AllowedPattern": "([a-zA-Z0-9_-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([a-zA-Z0-9-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)",
"ConstraintDescription": "must be a valid email address."
}
},
"Mappings" : {
"Region2Principal" : {
"us-east-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"us-west-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"us-west-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"eu-west-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"ap-southeast-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"ap-northeast-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"ap-northeast-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"ap-southeast-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"ap-south-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"us-east-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"sa-east-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" },
"cn-north-1" : { "EC2Principal" : "ec2.amazonaws.com.cn", "OpsWorksPrincipal" : "opsworks.amazonaws.com.cn" },
"eu-central-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }
}
},
},
"SampleConfigurationTemplate" : {
"Type" : "AWS::ElasticBeanstalk::C
"Properties" : {
"ApplicationName" : { "Ref" : "Sam
"Description" : "Default Configura
"SolutionStackName" : "64bit Ama
"OptionSettings" : [{
"Namespace": "aws:elasticbeans
"OptionName": "JDBC_CONNECT
"Value": {
"Fn::Join": ["", ["jdbc:mysql://",
}, {
"Namespace": "aws:elasticbeans
"OptionName": "PARAM1",
"Value": { "Ref": "DBUser" }
}, {
"Namespace": "aws:elasticbeans
"OptionName": "PARAM2",
"Value": { "Ref": "DBPassword" }
}, {
"Namespace": "aws:autoscaling:
"OptionName": "SecurityGroups"
"Value": { "Ref": "InstanceSecurit
}, {
"Namespace": "aws:autoscaling:
"OptionName": "IamInstanceProfi
"Value": { "Ref": "WebServerInsta
}]
}
},
"SampleEnvironment": {
"Type": "AWS::ElasticBeanstalk::En
"Properties": {
"Description": "AWS Elastic Beans
"ApplicationName": { "Ref": "Samp
"TemplateName": { "Ref" : "Sampl
"VersionLabel": { "Ref" : "SampleA
}
},
"InstanceSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup
"Properties": {
"GroupDescription": "RDS allows
"SecurityGroupIngress": []
}
},
"DBEC2SecurityGroup": {
"Type": "AWS::EC2::SecurityGroup
"Condition" : "Is-EC2-VPC",
"Properties" : {
"GroupDescription": "Open databa
"SecurityGroupIngress" : [{
"IpProtocol" : "tcp",
"FromPort" : "3306",
"ToPort" : "3306",
"SourceSecurityGroupName" : { "
}]
}
},
"Conditions" : {
"Is-EC2-VPC" : { "Fn::Or" : [ {"Fn::Equals" : [{"Ref" : "AWS::Region"}, "eu-central-1" ]},
{"Fn::Equals" : [{"Ref" : "AWS::Region"}, "cn-north-1" ]}]},
"Is-EC2-Classic" : { "Fn::Not" : [{ "Condition" : "Is-EC2-VPC"}]}
},
"Resources": {
"WebServerRole": {
"Type": "AWS::IAM::Role",
"Properties" : {
"AssumeRolePolicyDocument" : {
"Statement" : [{
"Effect" : "Allow",
"Principal": { "Service": [{ "Fn::FindInMap" : ["Region2Principal", {"Ref" : "AWS::Region"}, "EC2Principal"]}] },
"Action" : [ "sts:AssumeRole" ]
} ]
},
"Path": "/"
}
},
"WebServerRolePolicy": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName" : "WebServerRole",
"PolicyDocument" : {
"Statement" : [ {
"Effect" : "Allow",
"NotAction" : "iam:*",
"Resource" : "*"
} ]
},
"Roles": [ { "Ref": "WebServerRole" } ]
}
},
"WebServerInstanceProfile": {
"Type": "AWS::IAM::InstanceProfile",
"Properties": {
"Path": "/",
"Roles": [ { "Ref": "WebServerRole" } ]
}
},
"SampleApplication": {
"Type": "AWS::ElasticBeanstalk::Application",
"Properties": {
"Description": "AWS Elastic Beanstalk Sample Application"
}
},
"SampleApplicationVersion" : {
"Type" : "AWS::ElasticBeanstalk::ApplicationVersion",
"Properties" : {
"Description" : "Version 1.0",
"ApplicationName" : { "Ref" : "SampleApplication" },
"SourceBundle" : {
"S3Bucket": { "Fn::Join" : ["-", ["cloudformation-examples", {"Ref" : "AWS::Region" }]]},
"S3Key": "CloudFormationBeanstalkRDSExample.war"
}
}
"DBSecurityGroup": {
"Type": "AWS::RDS::DBSecurityGroup",
"Condition" : "Is-EC2-Classic",
"Properties": {
"DBSecurityGroupIngress": {
"EC2SecurityGroupName": { "Ref": "InstanceSecurityGroup" }
},
"GroupDescription": "database access"
}
},
"SampleDB": {
"Type": "AWS::RDS::DBInstance",
"Properties": {
"Engine": "MySQL",
"DBName": "beanstalkdb",
"MasterUsername": { "Ref": "DBUser" },
"DBInstanceClass": "db.t2.small",
"AllocatedStorage": "5",
"MasterUserPassword": { "Ref": "DBPassword" },
"VPCSecurityGroups": { "Fn::If" : [ "Is-EC2-VPC", [ { "Fn::GetAtt": [ "DBEC2SecurityGroup", "GroupId" ] } ], { "Ref" : "AWS::NoValue" }]},
"DBSecurityGroups": { "Fn::If" : [ "Is-EC2-Classic", [ { "Ref": "DBSecurityGroup" } ], { "Ref" : "AWS::NoValue" }]}
}
},
"AlarmTopic": {
"Type": "AWS::SNS::Topic",
"Properties": {
"Subscription": [{ "Endpoint": { "Ref": "OperatorEMail" }, "Protocol": "email" }]
}
},
"CPUAlarmHigh": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"EvaluationPeriods": "10",
"Statistic": "Average",
"Threshold": "50",
"AlarmDescription": "Alarm if CPU too high or metric disappears indicating the RDS database instance is having issues",
"Period": "60",
"Namespace": "AWS/RDS",
"MetricName": "CPUUtilization",
"Dimensions": [{
"Name": "DBInstanceIdentifier",
"Value": { "Ref": "SampleDB" }
}],
"ComparisonOperator": "GreaterThanThreshold",
"AlarmActions": [{ "Ref": "AlarmTopic" }],
"InsufficientDataActions": [{ "Ref": "AlarmTopic" }]
}
}
},
"Outputs": {
"URL": {
"Description": "URL of the AWS Elastic Beanstalk Environment",
"Value": { "Fn::Join": ["", ["http://", { "Fn::GetAtt": ["SampleEnvironment", "EndpointURL"] }]]
}
}
}
}
3. PaaS ecosystems,
SaaS’s rise
Niche products inside PaaS
AWS IoT
AWS Lumberyard
AWS Kinesis
AWS EMR
AWS ML
ML example
https://habrahabr.ru/company/preply/blog/216729/
ceur-ws.org/Vol-1631/164-169.pdf
Localisation/I18
BI
Security
DevOps
There’s SaaS for that
Localisation/I18
BI
Security
DevOps testing
DevOps logging
If you suck now, you’ll be pleasantly
surprised by the lack of change when
you move to Cloud (Chris Hoff)
No matter how good you are at
something, there’s always a million
people better than you
It is all about “speed”
We are hiring
Dmytro Voloshyn, Preply
https://www.facebook.com/dmytriy.voloshyn

More Related Content

Viewers also liked (15)

PPTX
Uk trip
mohammed050
 
PPTX
Make plans to_reach_new_heights
Scott Rojko
 
PDF
Avaliação Dilma Rousseff
Carlos Eduardo
 
PDF
Розв"язуємо задачі
Semenuk
 
PPT
24 Aug 2012 - CSISA Bihar Planning Meeting - Communication
CSISA
 
PDF
Diving In- Talent Pool Analysis
LinkedIn For Search and Recruitment Firms
 
PDF
Top motorcycles in India 2016
Soniya chandlani
 
PPTX
Two unethical isuue related engineering
guutaale99
 
PPTX
702010 examples and ideas - June
Sprout Labs
 
PPT
Fibromyalgia
Chirostarpresentations
 
PDF
Розвивальні творчі вправи
Іра Цимбал
 
PPTX
Творчі вправи,ігри для учнів початкових класів на уроках читання
Alina Kapitula
 
PDF
João Leite é líder na 1ª pesquisa para Prefeitura de Belo Horizonte
Carlos Eduardo
 
ODP
Jugendgefährdene Inhalte im Internet
dafcommunity
 
Uk trip
mohammed050
 
Make plans to_reach_new_heights
Scott Rojko
 
Avaliação Dilma Rousseff
Carlos Eduardo
 
Розв"язуємо задачі
Semenuk
 
24 Aug 2012 - CSISA Bihar Planning Meeting - Communication
CSISA
 
Diving In- Talent Pool Analysis
LinkedIn For Search and Recruitment Firms
 
Top motorcycles in India 2016
Soniya chandlani
 
Two unethical isuue related engineering
guutaale99
 
702010 examples and ideas - June
Sprout Labs
 
Розвивальні творчі вправи
Іра Цимбал
 
Творчі вправи,ігри для учнів початкових класів на уроках читання
Alina Kapitula
 
João Leite é líder na 1ª pesquisa para Prefeitura de Belo Horizonte
Carlos Eduardo
 
Jugendgefährdene Inhalte im Internet
dafcommunity
 

Similar to Development in the could: How do we do it(Cloud computing. Microservices. Faas) (20)

PDF
Dev & Test on AWS - Journey Through the Cloud
Ian Massingham
 
PPTX
Dev & Test on AWS - Hebrew Webinar
Boaz Ziniman
 
PPTX
Introduction to DevOps on AWS
Shiva Narayanaswamy
 
PDF
AWS Training.pdf
SpiritsoftsTraining
 
PDF
AWS Training.pdf
SpiritsoftsTraining
 
PDF
AWS Cloud Formation
Mahesh Raj
 
PPTX
Modernizing your AWS Deployment
CloudHesive
 
PDF
Scalable and Fault-Tolerant Apps with AWS
Fernando Rodriguez
 
PPTX
AWS 101
Monica Rut Avellino
 
PDF
Introduction to Amazon Web Services
Robert Greiner
 
PPTX
Solved: Your Most Dreaded Test Environment Management Challenges
DevOps.com
 
PDF
20141021 AWS Cloud Taekwon - Startup Best Practices on AWS
Amazon Web Services Korea
 
PDF
Cloud patterns applied
Lars Fronius
 
PPTX
Modernizing your AWS Deployment - January 2017
CloudHesive
 
PPTX
Scaling horizontally on AWS
Bozhidar Bozhanov
 
PPTX
Architecting Cloud Apps
jineshvaria
 
PPTX
Programando sua infraestrutura com o AWS CloudFormation
Amazon Web Services LATAM
 
PDF
AWS System Administration Best Practices for Sysadmins in the Amazon Cloud 1s...
koidemoreaqb
 
PPTX
Introduction to AWS and Docker on ECS
CloudHesive
 
PPTX
Being Well Architected in the Cloud (Updated)
Adrian Hornsby
 
Dev & Test on AWS - Journey Through the Cloud
Ian Massingham
 
Dev & Test on AWS - Hebrew Webinar
Boaz Ziniman
 
Introduction to DevOps on AWS
Shiva Narayanaswamy
 
AWS Training.pdf
SpiritsoftsTraining
 
AWS Training.pdf
SpiritsoftsTraining
 
AWS Cloud Formation
Mahesh Raj
 
Modernizing your AWS Deployment
CloudHesive
 
Scalable and Fault-Tolerant Apps with AWS
Fernando Rodriguez
 
Introduction to Amazon Web Services
Robert Greiner
 
Solved: Your Most Dreaded Test Environment Management Challenges
DevOps.com
 
20141021 AWS Cloud Taekwon - Startup Best Practices on AWS
Amazon Web Services Korea
 
Cloud patterns applied
Lars Fronius
 
Modernizing your AWS Deployment - January 2017
CloudHesive
 
Scaling horizontally on AWS
Bozhidar Bozhanov
 
Architecting Cloud Apps
jineshvaria
 
Programando sua infraestrutura com o AWS CloudFormation
Amazon Web Services LATAM
 
AWS System Administration Best Practices for Sysadmins in the Amazon Cloud 1s...
koidemoreaqb
 
Introduction to AWS and Docker on ECS
CloudHesive
 
Being Well Architected in the Cloud (Updated)
Adrian Hornsby
 
Ad

Recently uploaded (20)

PDF
CEREBRAL PALSY: NURSING MANAGEMENT .pdf
PRADEEP ABOTHU
 
PPTX
How to Configure Lost Reasons in Odoo 18 CRM
Celine George
 
PPTX
HYDROCEPHALUS: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
PDF
community health nursing question paper 2.pdf
Prince kumar
 
PPTX
Explorando Recursos do Summer '25: Dicas Essenciais - 02
Mauricio Alexandre Silva
 
PPTX
How to Manage Access Rights & User Types in Odoo 18
Celine George
 
PPTX
Optimizing Cancer Screening With MCED Technologies: From Science to Practical...
i3 Health
 
PPTX
How to Define Translation to Custom Module And Add a new language in Odoo 18
Celine George
 
PDF
ARAL_Orientation_Day-2-Sessions_ARAL-Readung ARAL-Mathematics ARAL-Sciencev2.pdf
JoelVilloso1
 
PPTX
Presentation: Climate Citizenship Digital Education
Karl Donert
 
PPTX
Gall bladder, Small intestine and Large intestine.pptx
rekhapositivity
 
PPTX
How to Configure Access Rights of Manufacturing Orders in Odoo 18 Manufacturing
Celine George
 
PPTX
How to Configure Storno Accounting in Odoo 18 Accounting
Celine George
 
PPTX
Unit 2 COMMERCIAL BANKING, Corporate banking.pptx
AnubalaSuresh1
 
PPTX
Latest Features in Odoo 18 - Odoo slides
Celine George
 
PPT
digestive system for Pharm d I year HAP
rekhapositivity
 
PPTX
Accounting Skills Paper-I, Preparation of Vouchers
Dr. Sushil Bansode
 
PPTX
ASRB NET 2023 PREVIOUS YEAR QUESTION PAPER GENETICS AND PLANT BREEDING BY SAT...
Krashi Coaching
 
PPTX
HEAD INJURY IN CHILDREN: NURSING MANAGEMENGT.pptx
PRADEEP ABOTHU
 
PPTX
Optimizing Cancer Screening With MCED Technologies: From Science to Practical...
i3 Health
 
CEREBRAL PALSY: NURSING MANAGEMENT .pdf
PRADEEP ABOTHU
 
How to Configure Lost Reasons in Odoo 18 CRM
Celine George
 
HYDROCEPHALUS: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
community health nursing question paper 2.pdf
Prince kumar
 
Explorando Recursos do Summer '25: Dicas Essenciais - 02
Mauricio Alexandre Silva
 
How to Manage Access Rights & User Types in Odoo 18
Celine George
 
Optimizing Cancer Screening With MCED Technologies: From Science to Practical...
i3 Health
 
How to Define Translation to Custom Module And Add a new language in Odoo 18
Celine George
 
ARAL_Orientation_Day-2-Sessions_ARAL-Readung ARAL-Mathematics ARAL-Sciencev2.pdf
JoelVilloso1
 
Presentation: Climate Citizenship Digital Education
Karl Donert
 
Gall bladder, Small intestine and Large intestine.pptx
rekhapositivity
 
How to Configure Access Rights of Manufacturing Orders in Odoo 18 Manufacturing
Celine George
 
How to Configure Storno Accounting in Odoo 18 Accounting
Celine George
 
Unit 2 COMMERCIAL BANKING, Corporate banking.pptx
AnubalaSuresh1
 
Latest Features in Odoo 18 - Odoo slides
Celine George
 
digestive system for Pharm d I year HAP
rekhapositivity
 
Accounting Skills Paper-I, Preparation of Vouchers
Dr. Sushil Bansode
 
ASRB NET 2023 PREVIOUS YEAR QUESTION PAPER GENETICS AND PLANT BREEDING BY SAT...
Krashi Coaching
 
HEAD INJURY IN CHILDREN: NURSING MANAGEMENGT.pptx
PRADEEP ABOTHU
 
Optimizing Cancer Screening With MCED Technologies: From Science to Practical...
i3 Health
 
Ad

Development in the could: How do we do it(Cloud computing. Microservices. Faas)

  • 1. DEV IN CLOUD: HOW WE ARE DOING IT Dmytro Voloshyn, co-founder at Programmer 8+ years Marketing manager in AB-InBev 2+ years Consulting projects, outsource, sales 2+ years Сo—founder&CTO at Preply, 4+ years and now
  • 3. “Cloud is about how you do computing, not where you do computing” — Paul Maritz, CEO oF VMware
  • 6. Deployment evolution Rent/Buy Physical server Snowflake server Deploy in days Live for years Rent a virtualised cloud server EC2 Deploy in minutes Live for weeks Containerised deployment Docker Deploy in seconds Live for hours Serverless FaaS(eg. Lambda) Deploy in milliseconds Live for seconds
  • 10. Function as a unit of application logic Side effects, pure functions, real-life example Machine Assembly Procedural Object oriented Functional
  • 11. SaaS -> PaaS -> IaaS -> BaaS -> FaaS
  • 13. Amazon AWS Lambda, Google Cloud Functions, and Windows Azure Functions
  • 15. Cloud Native Applications Antifragile Pay as you go (pricing on demand) Hyper scaling (traffic, data, features) Continuous Delivery (DevOps)
  • 16. Antifragile Everything fails all the time Focus on MTTR not MTTF 8 fallacies
  • 17. Pay as you go Provisioned vs. OnDemand Fixed servers vs. resource pooling #NoDevOps
  • 19. Continuous Delivery Diagnosability: traces, metrics, logs Automate tasks, scripts Automated delivery
  • 24. Treat resources as cattle not pets VS.
  • 25. Orchestration example { "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "DBUser": { "NoEcho": "true", "Type": "String", "Description": "Test database admin account name", "MinLength": "1", "MaxLength": "16", "AllowedPattern": "[a-zA-Z][a-zA-Z0-9]*", "ConstraintDescription": "must begin with a letter and contain only alphanumeric characters." }, "DBPassword": { "NoEcho": "true", "Type": "String", "Description": "Test database admin account password", "MinLength": "8", "MaxLength": "41", "AllowedPattern": "[a-zA-Z0-9]*", "ConstraintDescription": "must contain only alphanumeric characters." }, "OperatorEMail": { "Description": "EMail address to notify if there are any operational issues", "Type": "String", "AllowedPattern": "([a-zA-Z0-9_-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([a-zA-Z0-9-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)", "ConstraintDescription": "must be a valid email address." } }, "Mappings" : { "Region2Principal" : { "us-east-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "us-west-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "us-west-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "eu-west-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "ap-southeast-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "ap-northeast-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "ap-northeast-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "ap-southeast-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "ap-south-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "us-east-2" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "sa-east-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" }, "cn-north-1" : { "EC2Principal" : "ec2.amazonaws.com.cn", "OpsWorksPrincipal" : "opsworks.amazonaws.com.cn" }, "eu-central-1" : { "EC2Principal" : "ec2.amazonaws.com", "OpsWorksPrincipal" : "opsworks.amazonaws.com" } } }, }, "SampleConfigurationTemplate" : { "Type" : "AWS::ElasticBeanstalk::C "Properties" : { "ApplicationName" : { "Ref" : "Sam "Description" : "Default Configura "SolutionStackName" : "64bit Ama "OptionSettings" : [{ "Namespace": "aws:elasticbeans "OptionName": "JDBC_CONNECT "Value": { "Fn::Join": ["", ["jdbc:mysql://", }, { "Namespace": "aws:elasticbeans "OptionName": "PARAM1", "Value": { "Ref": "DBUser" } }, { "Namespace": "aws:elasticbeans "OptionName": "PARAM2", "Value": { "Ref": "DBPassword" } }, { "Namespace": "aws:autoscaling: "OptionName": "SecurityGroups" "Value": { "Ref": "InstanceSecurit }, { "Namespace": "aws:autoscaling: "OptionName": "IamInstanceProfi "Value": { "Ref": "WebServerInsta }] } }, "SampleEnvironment": { "Type": "AWS::ElasticBeanstalk::En "Properties": { "Description": "AWS Elastic Beans "ApplicationName": { "Ref": "Samp "TemplateName": { "Ref" : "Sampl "VersionLabel": { "Ref" : "SampleA } }, "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup "Properties": { "GroupDescription": "RDS allows "SecurityGroupIngress": [] } }, "DBEC2SecurityGroup": { "Type": "AWS::EC2::SecurityGroup "Condition" : "Is-EC2-VPC", "Properties" : { "GroupDescription": "Open databa "SecurityGroupIngress" : [{ "IpProtocol" : "tcp", "FromPort" : "3306", "ToPort" : "3306", "SourceSecurityGroupName" : { " }] } }, "Conditions" : { "Is-EC2-VPC" : { "Fn::Or" : [ {"Fn::Equals" : [{"Ref" : "AWS::Region"}, "eu-central-1" ]}, {"Fn::Equals" : [{"Ref" : "AWS::Region"}, "cn-north-1" ]}]}, "Is-EC2-Classic" : { "Fn::Not" : [{ "Condition" : "Is-EC2-VPC"}]} }, "Resources": { "WebServerRole": { "Type": "AWS::IAM::Role", "Properties" : { "AssumeRolePolicyDocument" : { "Statement" : [{ "Effect" : "Allow", "Principal": { "Service": [{ "Fn::FindInMap" : ["Region2Principal", {"Ref" : "AWS::Region"}, "EC2Principal"]}] }, "Action" : [ "sts:AssumeRole" ] } ] }, "Path": "/" } }, "WebServerRolePolicy": { "Type": "AWS::IAM::Policy", "Properties": { "PolicyName" : "WebServerRole", "PolicyDocument" : { "Statement" : [ { "Effect" : "Allow", "NotAction" : "iam:*", "Resource" : "*" } ] }, "Roles": [ { "Ref": "WebServerRole" } ] } }, "WebServerInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "WebServerRole" } ] } }, "SampleApplication": { "Type": "AWS::ElasticBeanstalk::Application", "Properties": { "Description": "AWS Elastic Beanstalk Sample Application" } }, "SampleApplicationVersion" : { "Type" : "AWS::ElasticBeanstalk::ApplicationVersion", "Properties" : { "Description" : "Version 1.0", "ApplicationName" : { "Ref" : "SampleApplication" }, "SourceBundle" : { "S3Bucket": { "Fn::Join" : ["-", ["cloudformation-examples", {"Ref" : "AWS::Region" }]]}, "S3Key": "CloudFormationBeanstalkRDSExample.war" } } "DBSecurityGroup": { "Type": "AWS::RDS::DBSecurityGroup", "Condition" : "Is-EC2-Classic", "Properties": { "DBSecurityGroupIngress": { "EC2SecurityGroupName": { "Ref": "InstanceSecurityGroup" } }, "GroupDescription": "database access" } }, "SampleDB": { "Type": "AWS::RDS::DBInstance", "Properties": { "Engine": "MySQL", "DBName": "beanstalkdb", "MasterUsername": { "Ref": "DBUser" }, "DBInstanceClass": "db.t2.small", "AllocatedStorage": "5", "MasterUserPassword": { "Ref": "DBPassword" }, "VPCSecurityGroups": { "Fn::If" : [ "Is-EC2-VPC", [ { "Fn::GetAtt": [ "DBEC2SecurityGroup", "GroupId" ] } ], { "Ref" : "AWS::NoValue" }]}, "DBSecurityGroups": { "Fn::If" : [ "Is-EC2-Classic", [ { "Ref": "DBSecurityGroup" } ], { "Ref" : "AWS::NoValue" }]} } }, "AlarmTopic": { "Type": "AWS::SNS::Topic", "Properties": { "Subscription": [{ "Endpoint": { "Ref": "OperatorEMail" }, "Protocol": "email" }] } }, "CPUAlarmHigh": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "EvaluationPeriods": "10", "Statistic": "Average", "Threshold": "50", "AlarmDescription": "Alarm if CPU too high or metric disappears indicating the RDS database instance is having issues", "Period": "60", "Namespace": "AWS/RDS", "MetricName": "CPUUtilization", "Dimensions": [{ "Name": "DBInstanceIdentifier", "Value": { "Ref": "SampleDB" } }], "ComparisonOperator": "GreaterThanThreshold", "AlarmActions": [{ "Ref": "AlarmTopic" }], "InsufficientDataActions": [{ "Ref": "AlarmTopic" }] } } }, "Outputs": { "URL": { "Description": "URL of the AWS Elastic Beanstalk Environment", "Value": { "Fn::Join": ["", ["http://", { "Fn::GetAtt": ["SampleEnvironment", "EndpointURL"] }]] } } } }
  • 27. Niche products inside PaaS AWS IoT AWS Lumberyard AWS Kinesis AWS EMR AWS ML
  • 31. BI
  • 35. If you suck now, you’ll be pleasantly surprised by the lack of change when you move to Cloud (Chris Hoff)
  • 36. No matter how good you are at something, there’s always a million people better than you It is all about “speed”
  • 37. We are hiring Dmytro Voloshyn, Preply https://www.facebook.com/dmytriy.voloshyn