Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Integration et déployement continu pour les applications modernes

Integration et déployement continu pour les applications modernes

Comment accélérer la mise à disposition de vos services et applications ? Comment tester de nouvelles idées et collecter les retours de vos clients ? Pour bénéficier de l'agilité promise par l'utilisation de containeurs et d'architectures serverless, il est essentiel de mettre en place des flux d'intégration et de déploiement continus qui permettent à vos éuipes d'itérer rapidement et de proposer de nouvelles fonctions. Lors de cette session, nous montrerons comment vous pouvez créer des flux de CI/CD pour vos applications de containeurs ou serverless sur AWS.

Transcript

  1. © 2019, Amazon Web Services, inc. or its affiliates. All

    rights reserved. Introduction to CI/CD in the cloud Scale your dev team from 1 to1000’s deployments per day Sébastien Stormacq C l o u d E x p o E u r o p e 2 0 1 9 Senior Developer Advocate Amazon Web Services, EMEA @sebsto
  2. Continuous Integration Workflow Version Control Continuous integration Server Commit to

    dev branch Pull code Send build report to development team; stop everything if build fails Distributed builds; run tests in parallel Hook Developer Test Types Integration Unit Code coverage
  3. Continuous Integration Workflow Commit to dev branch Pull code Send

    build report to development team; stop everything if build fails Distributed builds; run tests in parallel Hook Test Types Integration Unit Code coverage Developer AWS CodeCommit AWS CodeBuild
  4. Anatomy of a buildspec File version: 0.2 phases: pre_build: commands:

    - echo Logging in to Amazon ECR... - aws --version - $(aws ecr get-login --region eu-west-1 --no-include-email) - REPOSiTORY_URi=486652066693.dkr.ecr.eu-west-1.amazonaws.com/nginx - iMAGE_TAG=$(echo $CODEBUiLD_RESOLVED_SOURCE_VERSiON | cut -c 1-7) build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $REPOSiTORY_URi:latest nginx/. - docker tag $REPOSiTORY_URi:latest $REPOSiTORY_URi:$iMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker images... - docker push $REPOSiTORY_URi:latest - docker push $REPOSiTORY_URi:$iMAGE_TAG - echo Writing image definitions file... - printf '[{"name":"nginx","imageUri":"%s"}]’ $REPOSiTORY_URi:$iMAGE_TAG > imagedefinitions.json artifacts: files: imagedefinitions.json
  5. One Dev Environment Does Not Scale

  6. One Dev / Testing Environment per Developer

  7. Infrastructure as Code – Avoid Snow Flakes

  8. Cloud Development Kit (CDK) AWS CloudFormation template AWS CDK application

    Stack(s) Construct Construct Resources
  9. CDK : Package Your Application CDK : Create a VPC

    // // create VPC w/ public and private subnets in 2 AZ // this also creates a NAT Gateway // const vpc = new ec2.Vpc(this, 'NewsBlogVPC', { maxAzs : 2 }); // // create static web site as S3 assets // var path = require('path'); const asset = new assets.Asset(this, ’YourSampleApp', { path: path.join(__dirname, '../html') }); // define a user data script to install & launch our app const userData = UserData.forLinux(); userData.addCommands('yum install -y nginx’, 'chkconfig nginx on', 'service nginx start’); userData.addCommands(`aws s3 cp s3://${asset.s3BucketName}/${asset.s3ObjectKey} .`, `unzip *.zip`, `/bin/cp -r -n ${env}/* /usr/share/nginx/html/`); CDK : Bootstrap Your Servers // create an auto scaling group for each environment const asg = new autoscaling.AutoScalingGroup(this, 'YourAppgAutoScalingGroup ' , { vpc, instanceType: ec2.instanceType.of(ec2.instanceClass.BURSTABLE3, ec2.instanceSize.MiCRO), machineimage: new ec2.AmazonLinuximage(), desiredCapacity: 2, role: role, userData: userData }); CDK : Create an Autoscaling Group
  10. CDK : Deploy your Own Dev Environment CloudFormation Template “compiler”

    CDK CLI “processor” “assembly language” “source” synthesize deploy executes
  11. Continuous Deployment Merge PR into Trunk Hook Pull code Developer

  12. Complex Pipeline Example – Trek10

  13. Blue Green Deployment 100% Prod traffic

  14. Blue Green Deployment Target group 2 100% Prod traffic

  15. Blue Green Deployment Green tasks: v2 code Provision green tasks

    100% Prod traffic
  16. Blue Green Deployment Run hook against test endpoint before green

    tasks receive prod traffic 0% Prod traffic 100% Prod traffic
  17. Blue Green Deployment Flip traffic to green tasks, rollback in

    case of alarm 80% Prod traffic 20% Prod traffic
  18. Blue Green Deployment Drain blue tasks 0% Prod traffic 100%

    Prod traffic
  19. © 2019, Amazon Web Services, inc. or its affiliates. All

    rights reserved.
  20. None
  21. © 2019, Amazon Web Services, inc. or its affiliates. All

    rights reserved.
  22. How Amazon does DevOps? (microservices, 2 pizza teams) (governance, templates)

  23. © 2019, Amazon Web Services, inc. or its affiliates. All

    rights reserved.
  24. Think Big, Start Small, Iterate Trunk Based Source Code Control

    AWS CDK Developers Services Delivery pipelines Monitor Build Test Release Monitor Build Test Release Monitor Build Test Release Monitor Build Test Release Monitor Build Test Release
  25. impact on dev hiring and retention

  26. Go Build! @sebsto

  27. Thank you! © 2019, Amazon Web Services, inc. or its

    affiliates. All rights reserved. Sébastien Stormacq Developer Advocate Amazon Web Services, EMEA @sebsto Jonathan Weiss Senior Manager, Development Tools Amazon Web Services @jweiss