© 2014 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or i...
Innovation, Quality, Governance
Stacks /
Environment(s)
An example CI / CD workflow
CI/CD tool
Issue
Tracker
SCM
Infrastructure
automation /
deployment
Te...
CloudFormation Stack(s)
An example CI / CD workflow
PHPUnit
jQuery
…
Tasks for AWS
A CI / CD pipeline
Teardown
Release
Deploy
Test
Code
Get your source under control
Prod Phoenix (feature)UAT
Code
Test
Deploy
Release
Teardown
Code
Test
Deploy
Release
Teardow...
Automated Merging
UAT Feature 2Feature 1
What does CI give us?
•  Test driven promotion (of development change)
•  Increasing velocity of feedback cycle through
it...
Demo 1: CI pipeline
What does CD give us?
•  Changes are pushed quickly to production
•  Immediate feedback from users
•  Supports A/B testing...
Deployment approaches
•  Deploy in place
–  Manage interruption
•  Bake
–  Discrete environment
•  Multiple environments f...
Deploy in-place
Un-baked
•  Common baseline AMI
•  Customise at instantiation
•  Change in-place
Your app
AMI
Deploy in-place
Un-baked
•  Common baseline AMI
•  Customise at instantiation
•  Change in-place
Your app
AMI
Deploy in-place
Un-baked
•  Common baseline AMI
•  Customise at instantiation
•  Change in-place
Your app
AMI
Deploy in-place
Un-baked
•  Common baseline AMI
•  Customise at instantiation
•  Change in-place
Your app
AMI
Deploy in-place
Un-baked
•  Common baseline AMI
•  Customise at instantiation
•  Change in-place
Your app
AMI
Deploy in-place
Un-baked
•  Common baseline AMI
•  Customise at instantiation
•  Change in-place
Your app
AMI
Bake process
1.  Start a builder instance
2.  Bootstrap / cfn-init, cfn-signal
3.  Bake your AMI
4.  Tag it
5.  Destroy/cl...
cfn-init
"AWS::CloudFormation::Init" : {
“cfn” : {
"packages" :{
"yum" : { "httpd" : [] }
},
"files":{
“/home/ec2-user/myf...
cfn-init
"services": {
"sysvinit" : {
"httpd" : {
"enabled" : "true",
"ensureRunning" : "true"
}
}
}
}
Demo 2: CD pipeline
Release
sydsummit-1.com sydsummit-2.com
sydsummit.com
Release
Release
Test the new stack
Match the traffic between the two stacks
Update the “floating” DNS record
Send Notifica...
A/B stack
sydsummit-1.com sydsummit-2.com
sydsummit.com
A/B stack
sydsummit-1.com sydsummit-2.com
sydsummit.com
A/B stack
sydsummit-1.com sydsummit-2.com
sydsummit.com
A/B stack
sydsummit-1.com sydsummit-2.com
sydsummit.com
Teardown
Teardown
Ensure that no traffic is moving though ELB
Teardown the CloudFormation Stack
Deregister the AMI
Advanced Techniques
•  Managing CD sprawl / Segregation of duties
•  Extending CloudFormation with custom resources
•  Ext...
Stack chaining
Stack chaining
Stack chaining
CloudFormation Merging
Git Git
CloudFormation
Operations Repo Application Repo
VPC
Subnets
Security Groups
CloudFormation ...
CloudFormation Custom Resources
•  Change DB schema during deployment
•  Extend CloudFormation to support other
services -...
Custom resources – DatabaseSchema
"MyDBSchema" : {
"Type" : "Custom::DatabaseSchema”, "Version" : "1.0",
"Properties" : {
...
Custom resources – DatabaseSchema
"createTable" : {
"tableName" : "example",
"columns" : [ {
"column" : {
"name" : "id",
"...
Extending your CD tools
Tasks for AWS
DynamoDB
Demo 2: Release
2
1
Code
Test
Deploy
Release
Teardown
Production
Code
Test
Deploy
Release
Teardown
Situational Awareness
Burden of Responsibility
APIs
Tasks for AWS
Containerisation
•  Build environments for artifacts, don’t update
environments with artifacts
•  All environments are tra...
Docker and LXC
•  A framework for managing containers
•  LXC containers are more lightweight than VMs
•  Amazon Linux (201...
Innovation, Quality, Governance
Discrete environments for each branch
Automated testing on every commit on every branch
Le...
Follow this
Event LIVE
#AWSSummit
Check out
the Event App
for more details
Complete your
feedback forms
to win a
$50AWS vo...
Upcoming SlideShare
Loading in...5
×

AWS Summit Sydney 2014 | Continuous Integration and Deployment Best Practices on AWS

1,799

Published on

With AWS companies now have the ability to develop and run their applications with speed and flexibility like never before. Working with an infrastructure that can be 100% API driven enables businesses to use lean methodologies and realize these benefits. This in turn leads to greater success for those who make use of these practices. In this session we'll talk about some key concepts and design patterns for Continuous Deployment and Continuous Integration, two elements of lean development of applications and infrastructures.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,799
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "AWS Summit Sydney 2014 | Continuous Integration and Deployment Best Practices on AWS"

  1. 1. © 2014 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc. Continuous Integration and Deployment Best Practices on AWS Adrian White Solutions Architect, AWS John Painter Solutions Architect, Sourced Group
  2. 2. Innovation, Quality, Governance
  3. 3. Stacks / Environment(s) An example CI / CD workflow CI/CD tool Issue Tracker SCM Infrastructure automation / deployment Test tools / harnesses
  4. 4. CloudFormation Stack(s) An example CI / CD workflow PHPUnit jQuery … Tasks for AWS
  5. 5. A CI / CD pipeline Teardown Release Deploy Test Code
  6. 6. Get your source under control Prod Phoenix (feature)UAT Code Test Deploy Release Teardown Code Test Deploy Release Teardown Code Test Deploy Release Teardown Code Test Deploy Release Teardown
  7. 7. Automated Merging UAT Feature 2Feature 1
  8. 8. What does CI give us? •  Test driven promotion (of development change) •  Increasing velocity of feedback cycle through iterative change •  Contain change to reduce risk •  Bugs are detected quickly •  Automated testing reduces size of testing effort
  9. 9. Demo 1: CI pipeline
  10. 10. What does CD give us? •  Changes are pushed quickly to production •  Immediate feedback from users •  Supports A/B testing or “We test customer reactions to features in production” •  Hardens, de-risks the deployment process •  Gives us a breadth of data points across our applications
  11. 11. Deployment approaches •  Deploy in place –  Manage interruption •  Bake –  Discrete environment •  Multiple environments from branches •  Support A/B testing •  “Rolling DNS” Deploy Deploy in-place Bake
  12. 12. Deploy in-place Un-baked •  Common baseline AMI •  Customise at instantiation •  Change in-place Your app AMI
  13. 13. Deploy in-place Un-baked •  Common baseline AMI •  Customise at instantiation •  Change in-place Your app AMI
  14. 14. Deploy in-place Un-baked •  Common baseline AMI •  Customise at instantiation •  Change in-place Your app AMI
  15. 15. Deploy in-place Un-baked •  Common baseline AMI •  Customise at instantiation •  Change in-place Your app AMI
  16. 16. Deploy in-place Un-baked •  Common baseline AMI •  Customise at instantiation •  Change in-place Your app AMI
  17. 17. Deploy in-place Un-baked •  Common baseline AMI •  Customise at instantiation •  Change in-place Your app AMI
  18. 18. Bake process 1.  Start a builder instance 2.  Bootstrap / cfn-init, cfn-signal 3.  Bake your AMI 4.  Tag it 5.  Destroy/clean up the builder instance
  19. 19. cfn-init "AWS::CloudFormation::Init" : { “cfn” : { "packages" :{ "yum" : { "httpd" : [] } }, "files":{ “/home/ec2-user/myfile.html:{ "source" : { "Fn::Join" : [ "", ["https://s3-ap- southeast-2.amazonaws.com/",{ "Ref" : "S3Bucket" },”/myfile.html”]] }, "mode":"000644", "owner":"root", "group":"root", "authentication":"S3AccessCreds” },
  20. 20. cfn-init "services": { "sysvinit" : { "httpd" : { "enabled" : "true", "ensureRunning" : "true" } } } }
  21. 21. Demo 2: CD pipeline
  22. 22. Release sydsummit-1.com sydsummit-2.com sydsummit.com
  23. 23. Release Release Test the new stack Match the traffic between the two stacks Update the “floating” DNS record Send Notification(s) ROLLBACK
  24. 24. A/B stack sydsummit-1.com sydsummit-2.com sydsummit.com
  25. 25. A/B stack sydsummit-1.com sydsummit-2.com sydsummit.com
  26. 26. A/B stack sydsummit-1.com sydsummit-2.com sydsummit.com
  27. 27. A/B stack sydsummit-1.com sydsummit-2.com sydsummit.com
  28. 28. Teardown Teardown Ensure that no traffic is moving though ELB Teardown the CloudFormation Stack Deregister the AMI
  29. 29. Advanced Techniques •  Managing CD sprawl / Segregation of duties •  Extending CloudFormation with custom resources •  Extending your CD tools
  30. 30. Stack chaining
  31. 31. Stack chaining
  32. 32. Stack chaining
  33. 33. CloudFormation Merging Git Git CloudFormation Operations Repo Application Repo VPC Subnets Security Groups CloudFormation Frameworks Best Practice Application Code Application CloudFormation Load Balancing Setup
  34. 34. CloudFormation Custom Resources •  Change DB schema during deployment •  Extend CloudFormation to support other services - “So You Think You Are An AWS Ninja” talk https://github.com/aws/aws-cfn-resource-bridge https://github.com/awslabs/aws-cfn-custom-resource-examples Parameters Custom resource implementation Git
  35. 35. Custom resources – DatabaseSchema "MyDBSchema" : { "Type" : "Custom::DatabaseSchema”, "Version" : "1.0", "Properties" : { "ServiceToken": "arn:aws:sns:us-east-1:12345EXAMPLE:DBSchema", "databaseChangeLog" : [ { "changeSet" : { "id" : "1", "author" : "adamthom", "changes" : [ { "createTable" : { … } } ] } } } }
  36. 36. Custom resources – DatabaseSchema "createTable" : { "tableName" : "example", "columns" : [ { "column" : { "name" : "id", "type" : "int", "autoIncrement" : true, "constraints" : { "primaryKey" : true, "nullable" : false } } } ] }
  37. 37. Extending your CD tools Tasks for AWS DynamoDB
  38. 38. Demo 2: Release 2 1 Code Test Deploy Release Teardown Production Code Test Deploy Release Teardown
  39. 39. Situational Awareness Burden of Responsibility APIs Tasks for AWS
  40. 40. Containerisation •  Build environments for artifacts, don’t update environments with artifacts •  All environments are transient •  Standardisation, abstraction and portability
  41. 41. Docker and LXC •  A framework for managing containers •  LXC containers are more lightweight than VMs •  Amazon Linux (2014.03) bundles Docker 0.9 and LXC 0.9
  42. 42. Innovation, Quality, Governance Discrete environments for each branch Automated testing on every commit on every branch Leverage CD tools to provide separation of duties Audit Logs Git approvals process Use custom resources to extend CloudFormation Leverage DNS Interface with the API Environments for artifacts
  43. 43. Follow this Event LIVE #AWSSummit Check out the Event App for more details Complete your feedback forms to win a $50AWS voucher

×