aws lunch and learn - agile development
DESCRIPTION
AWS Lunch and Learn - Lean and Agile DevelopmentTRANSCRIPT
Lean & Agile Development Approaches
Markku Lepistö
Principal Technology Evangelist @markkulepisto
IDEA%!%
Fail%Fast%
Fail%Cheap%
Fail%Forward%
Scale%Success%
Validate%Idea%
Minimum%Viable%Product%(MVP)%
• Release%quickly%• Limited%core%features%
• Iterate%in%producFon%• Business%decisions%based%on%data%%
“Produc(on*is*truly*the*only*place**you*can*validate*your*code”*
H%Michael%Nygard,%author%of%‘Release%it!’%
%
ApplicaFon%Architecture%
for%MVP’s%Core%Features%
Tightly%Coupled,%Monolithic%(monster)%
Decomposed%to%Services%
Decomposed%to%Services%
Decomposed%to%Services%
Define%Your%MVP’s%Building%Blocks%
Define%Your%MVP’s%Building%Blocks%
Microservices*Architecture*
Compute%
Object%Store%
Load%Balancer%
SQL%Database%
IdenFty%&%Access%
Data%Warehouse%
ApplicaFon%Lifecycle%
CDN% RecommendaFon%Engine%
Social%Login%SSO%
BI%AnalyFcs%
Web%Server%
Reverse%Proxy%
My%Second%Cool%Feature%My%Cool%Feature%
Focus%
Focus%on%Your%Core%DifferenFator%
Outsource%UndifferenFaFng%Ones%to%Services%
Amazon%EC2%
Amazon%S3%
ElasFc%Load%Balancing%
Amazon%RDS%
AWS%IAM%
Amazon%RedShi]%
AWS%OpsWorks%
Amazon%CloudFront% EasyRec%
HybridAuth%
JasperSo]%
Puma%
Nginx%
My%Second%Cool%Feature%My%Cool%Feature%
Amazon%Web%Services%
Regions,%Zones%and%Edge%LocaFons%
API$
Regions Availability Zones Edge Locations
Storage%
S3 EBS Glacier Storage Gateway
Foun
datio
n Se
rvice
s$
Networking%
VPC Direct Connect
ELB Route53
Databases
RDS ElastiCache Dynamo RedShift
Content Delivery
CloudFront
Analytics%
DataPipeline EMR Kinesis
EC2
Compute%
WorkSpaces
AWS$Global$Infrastructure$
Depl
oym
ent &
Ma
nage
men
t$IAM Federation
Identity & Access Monitoring
CloudWatch
Deployment & Management
BeanStalk Cloud Formation
OpsWork CloudTrail
AWS$
Global$
Infrastru
cture$Libraries, SDK’s%
Web Console
Interaction%
Human Interaction%
Support
Command Line
AWS$Global$Infrastructure$
Appl
icatio
n Se
rvice
s$
Application Services%
SES SNS SQS Elastic Transcoder
CloudSearch SWF AppStream
Discover%SW%Components%–%AWS%marketplace%
Discover%SW%Components%–%GitHub%
Discover%SW%Components%–%NeclixOSS%
Services%are%Black%Boxes%Exposed%via%APIs%
My%Cool%Feature%
Iterate,%even%reH
write%internal%
implementaFon%
API%is%stable,%with%few%
changes,%potenFally%
versioning%
API%
Loose%Coupling%Enables%ScaleHout%and%Resiliency%
Use%Message%Queues%
Loose%Coupling%Enables%ScaleHout%and%Resiliency%
Use%Message%Queues%
Simple%Queue%Service%
(SQS)%
Loose%Coupling%Enables%ScaleHout%and%Resiliency%
Use%Idempotent%Interfaces%
Loose%Coupling%Enables%ScaleHout%and%Resiliency%
Use%Circuit%Breakers%
Loose%Coupling%Enables%ScaleHout%and%Resiliency%
Use%Circuit%Breakers%
Temporarily%bypass%
unresponsive%service.%
Switch%to%degraded%
mode%transacFons%
Auto%Scale,%Load%Balance,%Monitor,%HA%Assure%
Each%Service%Separately%
Statelessness%Enables%ScaleHout%
Separate%State%and%Data%from%Compute%Instances%
Load%Balanced,%Auto%Scaling%
pool%of%EC2%Workers%
Scalable%Services%for%
State%and%Data%
ElastiCache DynamoDB S3
Amazon%DynamoDB%
Zero%Admin%NoSQL%Service%
Unlimited%Storage%
Provisioned%Throughput%
<10ms%response%Fme%
Durable%on%SSD%
CloudHSOA%
S
O
A
• CloudHnaFve%New%ApplicaFons%• SOA%principles%leveraging%Cloud%services%• Architect%for%
– AutomaFon%
– Scale%– Cost%– Availability%– Data%
• ApplicaFons%are%%– AlwaysHon%– SelfHhealing%– AnFHfragile%
Implemented%by%TwoHPizza%Teams%
• Small,%autonomous%teams%
• Full%responsibility%for%Service%X%• Decoupled%launch%schedules%• No%handovers%• Trust%%
Puing%It%All%Together%into%a%SoluFon%
Puing%It%All%Together%into%a%SoluFon%
Puing%It%All%Together%into%a%SoluFon%
Puing%It%All%Together%into%a%SoluFon%
=$
Programmable%Placorm%
If%you%can%program%it%
You%can%automate%it%
AWS%SDKs%
Java%SDK%
…!res = ec2.runInstances new RunInstancesRequest([!
!imageId: "ami-00754474", !!keyName: ”MyKeyPair", !!instanceType: ”m3.medium", !!securityGroups: [”MySecurityGroup"],!!minCount: 1,!!maxCount: 1,!!userData:!!"AWSWeb.war".bytes.encodeBase64().toString()!!])!
…!!
Unified%Command%Line%Interface%
~ $ aws ec2 run-instances --image-id ami-554ac83c --min-count 1
--max-count 1 --key-name MyKeyPair --security-groups MySecurityGroup
AMI$AMI$AMI$
YOUR$CODE$
CORE$SERVICES$
3rd$PARTY$
LIBRARIES$
OPERATING$SYSTEM$
YOUR$CODE$
CORE$SERVICES$
3rd$PARTY$
LIBRARIES$
OPERATING$SYSTEM$
YOUR$CODE$
CORE$SERVICES$
3rd$PARTY$
LIBRARIES$
OPERATING$SYSTEM$
PreHbaked%Image% Base%OS%Image%+%OrchestraFon%%
3rd%Party%ConfiguraFon%Mgmt%&%OrchestraFon%Tools%
AWS$OpsWorks$ AWS$CloudFormaHon$
AWS$ElasHc$Beanstalk$
DevOps$framework$for$
applicaHon$lifecycle$
management$and$
automaHon$
Templates$to$deploy$&$
update$infrastructure$
as$code$
Automated%resource$
management$–$web$
apps$made$easy$
DIY$/$$On$Demand$
DIY,$on$demand$
resources:$EC2,$S3,$
custom$AMI’s,$etc.$
Control Convenience
AWS%Services%for%ApplicaFon%Lifecycle%Management%
CloudFormaFon%
Template%
SOURCE CODE REPOSITORY
DNS
CONTINUOUS INTEGRATION SERVER
PROJECT MANAGEMENT SERVER
BUILDS
DATABASE
STORAGE
CLOUDFORMATION TEMPLATE
BUILD + DB SNAPSHOT
Application Versions + Infrastructure Versions
ApplicaFon%Your%Code%
Infrastructure%
To%Run%and%Support%Your%Code%
Deliver%ConFnuously%
• Infrastructure%as%Code%– Everything%now%programmable%
– App%=%code%+%infrastructure%descripFon%– In%version%control%
• Full%test%automaFon%
• Frequent%small%risk%&%size%builds%
• Successful%builds%to%producFon%
test%
ConFnuous%IntegraFon%
code% build%plan%
Agile%Development%
Source%hop://www.collab.net%
deploy% operate%
collaboraFon%
value%
DevOps%
release%
ConFnuous%Delivery%
Go%Global%–%in%Minutes%
• Launch%in%a%test%market%
• A/B%TesFng%• Collect%all%logs%• AnalyFcs%!%Insights%!%Iterate%
%
Once%you%hit%the%sweet%spot%–%
• Replicate%the%applicaFon%to%all%regions%
Measure%&%Log%Everything%
Amazon%CloudWatch%
COLLECT%|%%STORE%%|%ANALYZE%|%SHARE%
Import%Export%
Glacier%
S3% EC2%
Redshi]%DynamoDB%%
EMR%
Data%Pipeline%
S3%Direct%Connect%
Leverage%AWS%Big%Data%Services%
CloudFront%
Kinesis%
Keep%IteraFng%
Keep%InnovaFng%
«%Want%to%increase%innovaFon?%
Lower$the$cost$of$failure$»%
$
Joi%Ito%
MIT%MediaLabs%
Fail%Fast%&%Cheap%H%Scale%Success%
Experiment$
OXen$
$
Fail$quickly$at$a$
low$cost$
$
More$
InnovaHon$
Experiment$
Infrequently$
$
Failure$is$
expensive$
$
Less$InnovaHon$
ONZPREMISE$
SHOW$ME$ALREADY$!$
DEMOS%
1. AWS%ElasFc%Beanstalk% %% %Deploy%to%ProducFon%using%Git%
2. AWS%CloudFormaFon% %% %Upgrade%a%Deployed%Template%%
3. AWS%SDK%for%Ruby% % %Control%EC2,%S3%&%RDS%
Thank%you%
Markku%Lepistö%–%Principal%Technology%Evangelist%
@markkulepisto%