Slide 1

Slide 1 text

CL OU D EXP O P ARI S 2 0 1 9

Slide 2

Slide 2 text

© 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

Slide 3

Slide 3 text

© 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?

Slide 4

Slide 4 text

S U M M I T © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

© 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.

Slide 7

Slide 7 text

© 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

Slide 8

Slide 8 text

© 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

Slide 9

Slide 9 text

© 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.

Slide 10

Slide 10 text

© 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

Slide 11

Slide 11 text

© 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

Slide 12

Slide 12 text

© 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

Slide 13

Slide 13 text

© 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

Slide 14

Slide 14 text

© 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

Slide 15

Slide 15 text

© 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.

Slide 16

Slide 16 text

© 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

Slide 17

Slide 17 text

© 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 }); } }

Slide 18

Slide 18 text

© 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

Slide 19

Slide 19 text

© 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

Slide 20

Slide 20 text

© 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

Slide 21

Slide 21 text

© 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

Slide 22

Slide 22 text

© 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!

Slide 23

Slide 23 text

© 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

Slide 24

Slide 24 text

S U M M I T © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 25

Slide 25 text

© 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

Slide 26

Slide 26 text

© 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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

S U M M I T © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 32

Slide 32 text

© 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

Slide 33

Slide 33 text

© 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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

© 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 »

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

© 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