devops at amazon: a look at our tools and processes
TRANSCRIPT
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
DevOps at Amazon:A Look at Our Tools and Processes
Rob Brigham
Product Management, AWS Developer Tools
Agenda
• The Amazon DevOps story
• New developer tools for everyone– AWS CodeDeploy
– AWS CodePipeline
– AWS CodeCommit
What is DevOps?
DevOps = efficiencies that speed up this lifecycle
developers customers
releasetestbuild
plan monitor
delivery pipeline
feedback loop
Software development lifecycle
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
The Amazon DevOps story
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
• Service-Oriented
Architecture (SOA)
• Single-purpose
• Connect only
through APIs
• “Microservices”
• Deployment service
• No downtime
deployments
• Health checking
• Versioned artifacts
and rollbacks
• Continuous delivery
• From check-in to production
• Automated actions and transitions
• >90% of teams
Pipelines
Microservice development lifecycle
developers delivery pipelinesservices
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
= 50 million deployments a year
Thousands of teams
× Microservice architecture
× Continuous delivery
× Multiple environments
Setting up a delivery pipeline
1) Automate your software deployments
2) Automate your release process
deploy deploy deploy deploy
development test staging production
release: source > build > test > staging > production
Setting up a delivery pipeline
1) Automate your software deployments
AWS CodeDeploy
2) Automate your release process
AWS CodePipeline
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
AWS CodeDeploy
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
AWS CodeDeploy
• Scale from one instance to thousands
• Deploy to any server: AWS or on-premises
• Centrally control and monitor
Test
CodeDeployv1, v2, v3
Production
Dev
Coordinate automated deployments, just like Amazon
application
revisions
deployment groups
1) Package app 2) Specify targets 3) Deploy!
version: 0.0
os: linux
files:
- source: chef/
destination: /etc/chef/codedeploy
- source: target/hello.war
destination: /var/lib/tomcat6/webapps
hooks:
ApplicationStop:
- location: deploy_hooks/stop-tomcat.sh
BeforeInstall:
- location: deploy_hooks/install-chef.sh
- location: deploy_hooks/chef-solo.sh
ApplicationStart:
- location: deploy_hooks/start-tomcat.sh
ValidateService:
- location: deploy_hooks/verify_service.sh
1) Package app 2) Specify targets 3) Deploy!
version: 0.0
os: linux
files:
- source: chef/
destination: /etc/chef/codedeploy
- source: target/hello.war
destination: /var/lib/tomcat6/webapps
hooks:
ApplicationStop:
- location: deploy_hooks/stop-tomcat.sh
BeforeInstall:
- location: deploy_hooks/install-chef.sh
- location: deploy_hooks/chef-solo.sh
ApplicationStart:
- location: deploy_hooks/start-tomcat.sh
ValidateService:
- location: deploy_hooks/verify_service.sh
1) Package app 2) Specify targets 3) Deploy!
version: 0.0
os: linux
files:
- source: chef/
destination: /etc/chef/codedeploy
- source: target/hello.war
destination: /var/lib/tomcat6/webapps
hooks:
ApplicationStop:
- location: deploy_hooks/stop-tomcat.sh
BeforeInstall:
- location: deploy_hooks/install-chef.sh
- location: deploy_hooks/chef-solo.sh
ApplicationStart:
- location: deploy_hooks/start-tomcat.sh
ValidateService:
- location: deploy_hooks/verify_service.sh
1) Package app 2) Specify targets 3) Deploy!
Agent Agent Agent
Test
Agent Agent
Agent Agent
Agent
Agent
Production
Deployment groupDeployment group
Group instances by:
• Auto Scaling group
• Amazon EC2 tag
• On-premises tag
1) Package app 2) Specify targets 3) Deploy!
aws deploy create-deployment \
--application-name MyApp \
--deployment-group-name TargetGroup \
--s3-location bucket=MyBucket,key=MyApp.zip
AWS CLI & SDKs
AWS Console
CI / CD Partners
GitHub
Deployment config – Choose speed
v2 v1 v1 v1 v1 v1 v1 v1
v2 v2 v2 v2 v1 v1 v1 v1
v2 v2 v2 v2 v2 v2 v2 v2
one at a time
half at a time
all at once
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
AWS CodePipeline
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
AWS CodePipeline
• Model your release process
• Integrate with your systems
• Visually monitor your pipeline status
Continuous delivery and release automation, just like Amazon
Build
1) Build
2) Unit test
1) Deploy
2) UI test
Source Beta Production
1) Deploy
2) Perf test
Gamma
1) Deploy canary
2) Deploy region 1
3) Deploy region 2
1) Pull
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
AWS CodeCommit
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
AWS CodeCommit
• Data redundancy across Availability Zones
• Data-at-rest encryption
• Integrated with AWS Identity and Access Management
• No repo size limit
git pull/push CodeCommit
Git objects in
Amazon S3
Git index in
Amazon
DynamoDB
Encryption key
in AWS KMS
SSH or HTTPS
Secure, scalable, and managed Git source control
Same Git experience
$ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli
Cloning into 'aws-cli'...
Receiving objects: 100% (16032/16032), 5.55 MiB | 1.25 MiB/s, done.
Resolving deltas: 100% (9900/9900), done.
Checking connectivity... done.
$ nano README.rst
$ git commit -am 'updated README'
[master 4fa0318] updated README
1 file changed, 1 insertion(+)
$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote:
To https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli
4dacd6d..4fa0318 master -> master
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
Summary
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved