Slide 1

Slide 1 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Supercharge product development with cloud best practices Alex Casalboni Technical Evangelist, AWS @alex_casalboni 5 November 2019

Slide 2

Slide 2 text

© 2019, Amazon Web Services, Inc. or its Affiliates. About me Software Engineer & Web Developer Data science background Worked in a startup for 4.5 years ServerlessDays global committee (Happy) AWS customer since 2013

Slide 3

Slide 3 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Development transformation @ Amazon Modern applications approach Infrastructure as Code Continuous Integration Continuous Deployment Demo Agenda

Slide 4

Slide 4 text

Development transformation at Amazon: 2001–2002 monolithic application + teams 2001 Lesson learned: decompose for agility 2002 microservices + 2 pizza teams

Slide 5

Slide 5 text

Full ownership Full accountability “DevOps” Focused innovation Two-pizza teams

Slide 6

Slide 6 text

Monolith development lifecycle monitor release test build developers delivery pipelines services

Slide 7

Slide 7 text

Microservice development lifecycle ??? developers delivery pipelines services

Slide 8

Slide 8 text

Microservice development lifecycle developers services monitor release test build delivery pipelines monitor release test build monitor release test build monitor release test build monitor release test build monitor release test build

Slide 9

Slide 9 text

Listen Iterate Experiment Innovation Flywheel Experiments power the engine of rapid innovation

Slide 10

Slide 10 text

What changes do you need to make to adopt these best practices? Serverless No provisioning/management Automatic scaling Pay for value billing Availability and resiliency Microservices Componentization Business capabilities Products not projects Infrastructure automation DevOps Cultural philosophies Cross-disciplinary teams CI/CD Automation tools DEV OPS Architectural patterns Operational Model Software Delivery

Slide 11

Slide 11 text

What is serverless? No infrastructure provisioning, no management Automatic scaling Pay for value Highly available and secure

Slide 12

Slide 12 text

Operational responsibility AWS Lambda Serverless functions AWS Fargate Serverless containers ECS/EKS Container-management as a service EC2 Infrastructure-as-a-Service More opinionated Less opinionated AWS manages Customer manages • Data source integrations • Physical hardware, software, networking, and facilities • Provisioning • Application code • Container orchestration, provisioning • Cluster scaling • Physical hardware, host OS/kernel, networking, and facilities • Application code • Data source integrations • Security config and updates, network config, management tasks • Container orchestration control plane • Physical hardware software, networking, and facilities • Application code • Data source integrations • Work clusters • Security config and updates, network config, firewall, management tasks • Physical hardware software, networking, and facilities • Application code • Data source integrations • Scaling • Security config and updates, network config, management tasks • Provisioning, managing scaling and patching of servers

Slide 13

Slide 13 text

Approaches to modern application development • Simplify environment management • Reduce the impact of code changes • Automate operations • Accelerate the delivery of new, high-quality services • Gain insight across resources and applications • Protect customers and the business Simplify environment management with serverless technologies Reduce the impact of code changes with microservice architectures Automate operations by modeling applications & infrastructure as code Accelerate the delivery of new, high-quality services with CI/CD Gain insight across resources and applications by enabling observability Protect customers and the business with end-to-end security & compliance

Slide 14

Slide 14 text

Approaches to modern application development • Simplify environment management with serverless technologies • Reduce the impact of code changes with microservice architectures • Automate operations by modeling applications & infrastructure as code • Accelerate the delivery of new, high-quality services with CI/CD • Gain insight across resources and applications by enabling observability • Protect customers and the business with end-to-end security & compliance

Slide 15

Slide 15 text

Approaches to modern application development Serverless containers Long-running Abstracts the OS Fully managed orchestration Fully managed cluster scaling Serverless functions Event-driven Many language runtimes Data source integrations No server management

Slide 16

Slide 16 text

Approaches to modern application development • Simplify environment management with serverless technologies • Reduce the impact of code changes with microservice architectures • Automate operations by modeling applications & infrastructure as code • Accelerate the delivery of new, high-quality services with CI/CD • Gain insight across resources and applications by enabling observability • Protect customers and the business with end-to-end security & compliance

Slide 17

Slide 17 text

Release process stages Source Build Test Production

Slide 18

Slide 18 text

Release process stages Source Build Test Production

Slide 19

Slide 19 text

Release process stages Source Build Test Production

Slide 20

Slide 20 text

Release process stages Source Build Test Production • Integration tests • Load testing • UI/UX tests • Security testing • Check-in source code (git) • Peer reviews • Compile code • Unit tests • Style checkers • Create artifacts (images & deployment packages) • Deployment to production • Monitor prod to detect errors

Slide 21

Slide 21 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Pillars of releasing modern applications

Slide 22

Slide 22 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Pillars of releasing modern applications Infrastructure as code

Slide 23

Slide 23 text

Infrastructure as code (IaC) Declarative I tell you what I need I tell you what to do Imperative

Slide 24

Slide 24 text

IaC goals 1. Make infrastructure changes repeatable and predictable 2. Release infrastructure changes using the same tools as code changes 3. Replicate production environment in a staging environment to enable continuous testing

Slide 25

Slide 25 text

AWS Serverless Application Model (SAM) • Open source framework for building serverless applications on AWS • Shorthand syntax to express functions, APIs, databases, and event source mappings • Transforms and expands SAM syntax into AWS CloudFormation syntax on deployment • Supports all AWS CloudFormation resource types github.com/awslabs/serverless-application-model

Slide 26

Slide 26 text

SAM template AWSTemplateFormatVersion: '2010-09-09’ Transform: AWS::Serverless-2016-10-31 Resources: GetFunction: Type: AWS::Serverless::Function Properties: Handler: index.get Runtime: nodejs8.10 CodeUri: src/ Policies: - DynamoDBReadPolicy: TableName: !Ref MyTable Events: GetResource: Type: Api Properties: Path: /resource/{resourceId} Method: get MyTable: Type: AWS::Serverless::SimpleTable Just 20 lines to create: • Lambda function • IAM role • API Gateway • DynamoDB table

Slide 27

Slide 27 text

SAM CLI: test, package and deploy pip install --user aws-sam-cli sam logs sam validate sam local sam init sam build sam package sam deploy sam publish github.com/awslabs/aws-sam-cli

Slide 28

Slide 28 text

AWS Cloud Development Kit (CDK) • Open source framework to define cloud infrastructure in TypeScript, Python, Java, C#, … • Provides library of higher-level resource types (“construct” classes) with built-in AWS best practices, packaged as npm/pip/maven modules • Provisions resources with CloudFormation • Supports all CloudFormation resource types AWS CDK github.com/aws/aws-cdk

Slide 29

Slide 29 text

CDK template import ec2 = require('@aws-cdk/aws-ec2'); import ecs = require('@aws-cdk/aws-ecs'); import cdk = require('@aws-cdk/cdk'); class BonjourFargate extends cdk.Stack { constructor(parent: cdk.App, name: string, props?: cdk.StackProps) { super(parent, name, props); const vpc = new ec2.VpcNetwork(this, 'MyVpc', { maxAZs: 2 }); const cluster = new ecs.Cluster(this, 'Cluster', { vpc }); new ecs.LoadBalancedFargateService( this, "FargateService", { cluster, image: ecs.DockerHub.image("amazon/amazon-ecs-sample"), }); } } const app = new cdk.App(); new BonjourFargate(app, 'Bonjour'); app.run();

Slide 30

Slide 30 text

import ec2 = require('@aws-cdk/aws-ec2'); import ecs = require('@aws-cdk/aws-ecs'); import cdk = require('@aws-cdk/cdk'); class BonjourFargate extends cdk.Stack { constructor(parent: cdk.App, name: string, props?: cdk.StackProps) { super(parent, name, props); const vpc = new ec2.VpcNetwork(this, 'MyVpc', { maxAZs: 2 }); const cluster = new ecs.Cluster(this, 'Cluster', { vpc }); new ecs.LoadBalancedFargateService( this, "FargateService", { cluster, image: ecs.DockerHub.image("amazon/amazon-ecs-sample"), }); } } const app = new cdk.App(); new BonjourFargate(app, 'Bonjour'); app.run(); CDK template

Slide 31

Slide 31 text

22 Lines 400 lines CDK template import ec2 = require('@aws-cdk/aws-ec2'); import ecs = require('@aws-cdk/aws-ecs'); import cdk = require('@aws-cdk/cdk'); class BonjourFargate extends cdk.Stack { constructor(parent: cdk.App, name: string, props?: cdk.StackProps) { super(parent, name, props); const vpc = new ec2.VpcNetwork(this, 'MyVpc', { maxAZs: 2 }); const cluster = new ecs.Cluster(this, 'Cluster', { vpc }); new ecs.LoadBalancedFargateService( this, "FargateService", { cluster, image: ecs.DockerHub.image("amazon/amazon-ecs-sample"), }); } } const app = new cdk.App(); new BonjourFargate(app, 'Bonjour'); app.run();

Slide 32

Slide 32 text

CDK CLI: synthesize and deploy npm install -g aws-cdk cdk init app --language typescript cdk synth cdk deploy

Slide 33

Slide 33 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Pillars of releasing modern applications Infrastructure as code

Slide 34

Slide 34 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Pillars of releasing modern applications Continuous integration

Slide 35

Slide 35 text

Continuous integration goals Source Build Test Production

Slide 36

Slide 36 text

Continuous integration goals 1. Automatically kick off a new release when new code is checked in 2. Build and test code in a consistent, repeatable environment 3. Continually have an artifact ready for deployment 4. Continually close feedback loop when build fails

Slide 37

Slide 37 text

AWS CodePipeline • Continuous delivery service for fast and reliable application updates • Model and visualize software release process • Builds, tests, and deploys your code every time there is a code change • Integrates with third-party tools

Slide 38

Slide 38 text

AWS CodePipeline: Supported sources Pick branch AWS CodeCommit GitHub Pick object or folder Amazon S3 Pick Docker tag Amazon ECR

Slide 39

Slide 39 text

AWS CodePipeline: Supported triggers Amazon CloudWatch Events • Scheduled (nightly release) • AWS Health events (Fargate platform retirement) Webhooks • DockerHub • Quay • Artifactory

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

AWS CodeBuild • Fully managed build service that compiles source code, runs tests, and produces software packages • Scales continuously and processes multiple builds concurrently • No build servers to manage • Pay by the minute, only for the compute resources you use • Monitor builds through CloudWatch Events

Slide 43

Slide 43 text

AWS CodeBuild: Lambda buildspec version: 0.2 phases: build: commands: - npm ci - npm test - > aws cloudformation package --template-file template.yaml --output-template packaged.yaml --s3-bucket $BUCKET artifacts: type: zip files: - packaged.yaml

Slide 44

Slide 44 text

AWS CodeBuild: Lambda buildspec with SAM CLI version: 0.2 phases: install: commands: - pip install --upgrade awscli aws-sam-cli build: commands: - sam build - sam package --s3-bucket $BUCKET --output-template-file packaged.yaml artifacts: type: zip files: - packaged.yaml

Slide 45

Slide 45 text

AWS CodeBuild: Docker buildspec version: 0.2 phases: build: commands: - $(aws ecr get-login --no-include-email) - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $ECR_REPO:$IMAGE_TAG - docker push $ECR_REPO:$IMAGE_TAG

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

……

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Pillars of releasing modern applications Continuous integration

Slide 50

Slide 50 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Pillars of releasing modern applications Continuous deployment

Slide 51

Slide 51 text

Continuous deployment goals Source Build Test Production

Slide 52

Slide 52 text

Continuous deployment goals 1. Automatically deploy changes to staging environments for testing 2. Deploy to production safely without impacting customers 3. Deliver to customers faster: increase frequency, reduce failure rate

Slide 53

Slide 53 text

AWS CodeDeploy • Automates code deployments to any instance or function • Handles the complexity of updating your applications • Avoid downtime during deployment • Roll back automatically if failure is detected • Deploy to Amazon EC2, Lambda, or on-premises

Slide 54

Slide 54 text

CodeDeploy – Lambda deployments Enable in your serverless application template Resources: GetFunction: Type: AWS::Serverless::Function Properties: DeploymentPreference: Type: Canary10Percent10Minutes Alarms: - !Ref ErrorsAlarm Hooks: PreTraffic: !Ref PreTrafficHook Canary10Percent30Minutes Canary10Percent5Minutes Canary10Percent10Minutes Canary10Percent15Minutes Linear10PercentEvery10Minutes Linear10PercentEvery1Minute Linear10PercentEvery2Minutes Linear10PercentEvery3Minutes AllAtOnce

Slide 55

Slide 55 text

CodeDeploy – Lambda canary deployment API Gateway Lambda function weighted alias “live” v1 code 100% Run PreTraffic hook against v2 code before it receives traffic v2 code 0%

Slide 56

Slide 56 text

CodeDeploy – Lambda canary deployment API Gateway Lambda function weighted alias “live” v1 code 90% Wait for 10 minutes, roll back in case of alarm v2 code 10%

Slide 57

Slide 57 text

CodeDeploy – Lambda canary deployment API Gateway Lambda function weighted alias “live” v1 code 0% Run PostTraffic hook and complete deployment v2 code 100%

Slide 58

Slide 58 text

API Gateway canary stage API Gateway Production stage v1 code v2 code 99.5% 0.5% Canary stage

Slide 59

Slide 59 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Demo

Slide 60

Slide 60 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Pillars of releasing modern applications Continuous deployment

Slide 61

Slide 61 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Pillars of releasing modern applications

Slide 62

Slide 62 text

© 2019, Amazon Web Services, Inc. or its Affiliates. Takeaways 1. Manage your infrastructure as code 2. Frequently build and integrate your code to get a first feedback 3. Continuously release in production using canary releases with monitoring and automated rollbacks 4. Use canary releases to get both technical and business feedback

Slide 63

Slide 63 text

14:00 Choosing the right Database for your Applications [Steven Bryen] 15:00 Making Sense of Machine Learning for Your Organization [Antje Barth] 16:00 Getting Started with Serverless Chatbots [Marcia Villalba] Today

Slide 64

Slide 64 text

10:00 How to build on AWS without knowing much about AWS [Sebastien Stormacq] 11:00 Chaos Engineering: Why Breaking Things Should be Practiced [Boaz Ziniman] 12:00 Data lakes and analytics in the Cloud for developers and founders [Javier Ramirez] 13:00 An Introduction to Deep Learning [Antje Barth] 14:00 Tools for Building your MVP on AWS [Rob de Feo] 15:00 Improving your security posture with the AWS Cloud [Steven Bryen] 16:00 Understanding Graph Databases [Robert Zhu] Tomorrow

Slide 65

Slide 65 text

10:00 How to build on AWS without knowing much about AWS [Alex Casalboni] 11:00 Microservices and containers [Frank Munz] 12:00 Building modern APIs with GraphQL [Robert Zhu] 13:00 Why adding a Service Mesh to your containers? [Frank Munz] 14:00 Immutable & distributed transactions: your ledger databases & blockchain in the cloud [Javier Ramirez] 15:00 Improving UX through observability [Enrique Duvos] 16:00 Build a mobile app with machine learning [Nicki Stone] (no ML expertise required) Thursday

Slide 66

Slide 66 text

© 2019, Amazon Web Services, Inc. or its Affiliates. © 2019, Amazon Web Services, Inc. or its Affiliates. Thank you! Alex Casalboni Technical Evangelist, AWS @alex_casalboni