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

Dynamisez votre infrastructure avec AWS Cloud Development Kit

Dynamisez votre infrastructure avec AWS Cloud Development Kit

Le AWS Cloud Development Kit (AWS CDK) est un nouveau framework open-source d'AWS qui permet aux développeurs d'exploiter toute la puissance des langages de programmation modernes pour définir des composants et applications cloud réutilisables et les fournir via AWS CloudFormation. Dans cette session, nous discuterons des raisons pour lesquelles nous avons décidé de construire le CDK AWS ; nous décriverons certains des concepts de haut niveau ; et nous écrirons du code pour démontrer pourquoi nous pensons que le CDK AWS va être votre meilleur ami.

More Decks by Sébastien Stormacq - AWS Developer Advocate

Other Decks in Technology

Transcript

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

    rights reserved. Dynamisez votre infrastructure avec AWS Cloud Development Kit Guillaume Marchand Solutions Architect AWS France C l o u d E x p o 2 0 1 9
  2. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Qu’est ce que l’infrastructure as code (IAC) ? En quoi le Cloud Development Kit (CDK) peut vous aider?
  3. S U M M I T © 2019, Amazon Web

    Services, Inc. or its affiliates. All rights reserved.
  4. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 0 : Création de l’infrastructure à la main Your organization’s infrastructure
  5. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 0 : Création de l’infrastructure à la main Pros Cons • Convenable pour des projets exploratoires ou des pilotes. • L’intéraction avec la console aide à identifier les erreurs rapidement. • Cliquer sur des objets et saisir des valeurs dans la console à la main est lent. Goulet d'étranglement à long terme dans le développement. • Il est difficile de reproduire fidèlement vos résultats lorsque vous faites les choses à la main. • Les gens font des erreurs dans la saisie des données et les options de clic. • La personne A configure les choses d'une façon, mais la personne B les configure d'une autre façon.
  6. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 1 : Imperative infrastructure as code Your organization’s infrastructure deploy.script AWS SDK
  7. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 1 : Imperative infrastructure as code • Beaucoup de “boilerplate” • Et si quelque chose échoue et qu'on doit réessayer ? • Et si deux personnes essayaient d'exécuter le script en même temps ? • Race conditions? resource = getResource(xyz) if (resource == desiredResource) { return } else if (!resource) { createResource(desiredResource) } else { updateResource(desiredResource) } deploy.script
  8. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 1: Imperative infrastructure as code Pros Cons • Si le code est bien écrit, il est répétable et réutilisable. • Plusieurs personnes peuvent travailler sur le script en collaboration, corriger des bugs, voir tous les paramètres en un seul endroit. • Beaucoup de code standard à écrire, et il peut être difficile d'écrire un code fiable. • Le code impératif doit traiter tous les cas à la marge. • Il faut faire attention à ce que plusieurs personnes n'utilisent le script en même temps.
  9. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 2: Declarative infrastructure as code Your organization’s infrastructure infrastructure.txt AWS CloudFormation HashiCorp Terraform AWS SDK
  10. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 2 – Declarative infrastructure as code infrastructure.txt • une liste de ressources à créer avec ses propriétés en JSON/YAML • Certaines fonctions d'aide mineures peuvent être intégrées pour faciliter l'extraction dynamique des valeurs. Resources: # VPC in which containers will be networked. # It has two public subnets # We distribute the subnets across the first two available subnets # for the region, for high availability. VPC: Type: AWS::EC2::VPC Properties: EnableDnsSupport: true EnableDnsHostnames: true CidrBlock: !FindInMap ['SubnetConfig', 'VPC', 'CIDR'] # Two public subnets, where containers can have public IP addresses PublicSubnetOne: Type: AWS::EC2::Subnet Properties: AvailabilityZone: Fn::Select: - 0 - Fn::GetAZs: {Ref: 'AWS::Region'} VpcId: !Ref 'VPC' CidrBlock: !FindInMap ['SubnetConfig', 'PublicOne', 'CIDR'] MapPublicIpOnLaunch: true PublicSubnetTwo: Type: AWS::EC2::Subnet Properties: AvailabilityZone: Fn::Select: - 1 - Fn::GetAZs: {Ref: 'AWS::Region'} VpcId: !Ref 'VPC' CidrBlock: !FindInMap ['SubnetConfig', 'PublicTwo', 'CIDR'] MapPublicIpOnLaunch: true
  11. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 2 – Declarative infrastructure as code Amazon Simple Storage Service (S3) BucketOne AWS CloudFormation AWS SDK Resources: BucketOne: Type: AWS::S3::Bucket Properties: AccessControl: PublicRead
  12. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 2 – Declarative infrastructure as code Amazon Simple Storage Service (S3) BucketOne AWS CloudFormation AWS SDK BucketTwo Resources: BucketOne: Type: AWS::S3::Bucket Properties: AccessControl: PublicRead BucketTwo: Type: AWS::S3::Bucket Properties: AccessControl: Private
  13. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 2 : Declarative infrastructure as code Amazon Simple Storage Service (S3) BucketOne AWS CloudFormation AWS SDK BucketTwo Resources: BucketOne: Type: AWS::S3::Bucket Properties: AccessControl: PublicRead BucketTwo: Type: AWS::S3::Bucket Properties: AccessControl: Private
  14. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Level 2 : Declarative infrastructure as code Pros Cons • Aucun boilerplate à écrire, créer et de mettre à jour les ressources est géré automatiquement. • Plusieurs personnes peuvent travailler sur le modèle en collaboration. • La résolution des conflits et le verrouillage des ressources peuvent être gérés de manière centralisée. • La relation 1 pour 1 entre les ressources d'un fichier et les ressources d'un compte signifie qu'il y a beaucoup de texte à écrire. Les modèles peuvent être très verbeux • Capacité limitée d'exécuter la logique car les formats de fichiers sont généralement des choses comme JSON, YAML, ou HCL qui ont seulement quelques fonctions intégrées. • Difficile de garder les choses DRY sans boucles, fonctions, etc.
  15. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 3 : AWS Cloud Development Kit Your organization’s infrastructure app.js AWS CloudFormation AWS SDK AWS Cloud Developmen t Kit
  16. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 3 : AWS Cloud Development Kit • Écrire dans un langage de programmation familier • Créez plusieurs ressources AWS sous-jacentes en même temps avec une seule structure. • Chaque stack est composée de "constructions" qui sont des classes simples. • Toujours déclaratif, pas besoin de manipuler create vs update app.js app.py class MyService extends cdk.Stack { constructor(scope: cdk.App, id: string) { super(scope, id); // Network for all the resources const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 2 }); // Cluster to hold all the containers const cluster = new ecs.Cluster(this, 'Cluster', { vpc: vpc }); // Load balancer for the service const LB = new elbv2.ApplicationLoadBalancer(this, 'LB', { vpc: vpc, internetFacing: true }); } }
  17. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. VPC Public Subnet in Availability Zone Public Subnet in Availability Zone 2 Private Subnet in Availability Zone Private Subnet in Availability Zone 2 Internet gateway NAT gateway NAT gateway cdk deploy // Network for all the resources const vpc = new ec2.Vpc(stack, 'MyVpc', { maxAz s: 2 }); Un construct CDK déploie de nombreuses ressources sous jacentes
  18. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 270 lines of CloudFormation YAML I don’t have to write! cdk synth // Network for all the resources const vpc = new ec2.Vpc(stack, 'MyVpc', { maxAz s: 2 }); Un construct CDK déploie de nombreuses ressources sous jacentes
  19. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. CDK aide avec vos workflows locaux const websiteBucket = new s3.Bucket(stack, 'WebsiteBucket', { websiteIndexDocument: 'index.html', publicReadAccess: true }); new s3deploy.BucketDeployment(stack, 'DeployWebsite', { source: s3deploy.Source.asset('./website-dist'), destinationBucket: websiteBucket, destinationKeyPrefix: 'web/static' }); WebsiteBucke t Lambda function extracts archive into the created S3 bucket Folder full of assets on your local machine AWS CDK zips up the folder and uploads it
  20. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Les CDK constructs sont partageables et réutilisables Company A Company B CDK Construct for a VPC Usability Improvement Bug Fix AWS Engineers New Service Feature
  21. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Lots of open source constructs on alexa-ask app-delivery assets aws-amazonmq aws-amplify aws-apigateway aws-applicationautoscaling aws-appmesh aws-appstream aws-appsync aws-athena aws-autoscaling aws-autoscaling-common aws-autoscaling- hooktargets aws-autoscalingplans aws-backup aws-batch aws-budgets aws-certificatemanager aws-cloud9 aws-cloudformation aws-cloudfront aws-cloudtrail aws-cloudwatch aws-cloudwatch-actions aws-codebuild aws-codecommit aws-codedeploy aws-codepipeline aws-codepipeline-actions aws-codestar aws-cognito aws-config aws-datapipeline aws-dax aws-directoryservice aws-dlm aws-dms aws-docdb aws-dynamodb aws-dynamodb-global aws-ec2 aws-ecr aws-ecr-assets aws-ecs aws-ecs-patterns aws-efs aws-eks aws-elasticache aws-elasticbeanstalk aws-elasticloadbalancing aws-elasticloadbalancingv2 aws-elasticloadbalancingv2- targets aws-elasticsearch aws-emr aws-events aws-events-targets aws-fsx aws-gamelift aws-glue aws-greengrass aws-guardduty aws-iam aws-inspector aws-iot aws-iotclick aws-iotanalytics aws-iotevents …. and many more!
  22. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Niveau 3 : AWS Cloud Development Kit Pros • Déclarative : la création et la mise à jour des ressources sont gérées automatiquement • Structures de niveau supérieur qui créent automatiquement de nombreuses ressources sous- jacentes • Travail en collaboration • La résolution des conflits et le verrouillage des ressources peuvent être gérés de manière centralisée. • Utiliser des langages de programmation familiers : Python, JavaScript, TypeScript, .Net, Java • CDK ne se contente pas de créer des ressources AWS, il vous aide également dans votre workflow de développement local. • Partagez et réutilisez facilement les constructions sur NPM. Bénéficier des meilleures pratiques conçues par des experts
  23. S U M M I T © 2019, Amazon Web

    Services, Inc. or its affiliates. All rights reserved.
  24. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Voulez-vous rester Serverless ou exécuter vous mêmes vos instances virtuelles AWS EC2 ? import ec2 = require('@aws-cdk/aws-ec2'); import ecs = require('@aws-cdk/aws-ecs'); const vpc = new ec2.Vpc(stack, 'MyVpc', { maxAzs: 2 }); const cluster = new ecs.Cluster(stack, 'Cluster', { vpc }); cluster.addCapacity('cluster-capacity', { instanceType: new ec2.InstanceType("t2.xlarge"), desiredCapacity: 2 }); @aws-cdk/aws-ecs: Créer un cluster d’orchestration
  25. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. nous déployons un container Docker depuis un registry, dans un cluster en tant que service HTTP distribué sur 2 zones de disponibilité AWS. @aws-cdk/aws-ecs-patterns: Déployer un load balacer
  26. S U M M I T © 2019, Amazon Web

    Services, Inc. or its affiliates. All rights reserved.
  27. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Pilliers de la mise à jour d’une application moderne Infrastructure as code Continuous delivery Continuous integration
  28. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Les objectifs de l’infrastructure as code 1. Rendre les changements d’infra. reproductibles et prévisibles 2. Utiliser les mêmes outils de déploiements que les développeurs. 3. Répliquer les env. de production dans d’autres env. pour permettre le continuous testing
  29. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Infrastructure as code Infrastructure is code avec CDK
  30. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Prochaines étapes Workshop : https://cdkworkshop.com/ Exemples : https://github.com/aws-samples/aws-cdk-examples/ Vidéo Youtube : « aws cdk online talks »
  31. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Prochaines étapes https://github.com/aws-samples/aws-modern-application-workshop
  32. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Merci beaucoup ! S U M M I T © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved. @gmarchand