SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Lucy Chang
Sr. Software Engineer in Quality, Intuit
CI/CD with Mocking &
Resiliency Testing Using AWS
Alfred Tan
Sr. DevOps Manager, Intuit
Session Overview
• CI/CD and AWS onboarding
• Cross team AWS strategy alignment
• Automating AWS deployment
• Development work is blocked by dependency
• Integration tests fails due to unreliable dependency
• Need to do resiliency testing
CI/CD in AWS
Our Challenges
• Security requirements
• Onboarding into CI/CD
• Highly Available
Our Solution - Slingshot
• Build security in
• Automate onboarding to CI/CD
• Build HA/DR in
CI/CD Pipeline
Continuous Integration
Continuous Delivery/Deployment Pipeline
Promotion Criteria:
• Build pass: 100%
• Unit Test pass: 100%
• Code Coverage: >80%
Build
Promotion Criteria:
• BAT pass: 100%
CI
Promotion Criteria:
• Regression Test
pass: 100%
QA
Promotion Criteria:
• E2E Test pass:
100%
Test Run:
• E2E Test
• Performance Test
E2E/Perf
Test Run:
• Smoke Test pass: 100%
Prod
Slingshot Setup
Initial Setup
GitHub Repo
CI/CD Pipeline
KMS/SSH keys
S3 Buckets
Egress Proxy and Bastion Host
Splunk Forwarder
AWS Account Setup
AWS Account
VPC, Subnets, Routing tables, Route 53 Zone Delegation
One time events
Slingshot Initial Setup
Region US-WEST-2
Bucket for Artifacts KMS Key for SecretsKMS Key for EBSBucket for Secrets
Internet
Gateway
Bastion
ASG
Splunk
Forwarder
Egress
ASG
Public Bastion Subnets Public Egress Subnets
Private DB Subnets
Private APP Subnets
Public ELB Subnets
Private WEB Subnets
Delegated DNS Zones
Slingshot Setup
Initial Setup
GitHub Repo
CI/CD Pipeline
KMS/SSH keys
S3 Buckets
Egress Proxy and Bastion Host
Splunk Forwarder
CI/CD
ELB
Web Tier
App Tier
CNAME
Recurring events
AWS Account Setup
AWS Account
VPC, Subnets, Routing tables, Route 53 Zone Delegation
One time events
CD with Blue-Green Deployment
ci-svc.intuit.com qa-svc.intuit.com svc.intuit.com
PreProd
Account
Prod
Account
Public ELB
Subnets
Private Web
Subnets
Private App
Subnets
100% 5%95% 100%0%
CI Web
Build 10
CI App
Build 10
CI Web
Build 12
CI App
Build 12
QA App
Build 10
QA Web
Build 10
QA App
Build 10
QA Web
Build 12
QA App
Build 12
Prod App
Build 10
Prod Web
Build 10
Prod App
Build 10
Prod Web
Build 12
Prod App
Build 12
Benefits
• Early feedback on changes flowing through the system
• Increase in quality
• Frequent releases to production
• Development productivity from day 1
Slingshot Demo
Recap
Challenges
• Security requirements
• Onboarding into CI/CD
• Highly Available
The Solution: Slingshot
• Build security in
• Automate onboarding to CI/CD
• Build HA/DR in
The Next Problem
• Automation tests failed due to unreliable dependency server
• Builds are not promoted
Our Solution
Overview of Wiremock
Wiremock is a library for stubbing and proxying web services
• Stubbing
• Fault Injection
• Easy Set up
• Easy onboarding
How does Wiremock work?
System
Under Test
Wiremock
Server
Dependency
Server
Automation
Test
• Configure the Wiremock server to be man-in-the-middle
• Increased integration test pass rate
• Increased code coverage
• Does not interrupt other team’s calling the SUT
= Stubs
Before Wiremock
Subnet
ELB for SUT
SUT 1
SUT 2
Dependency
Server
Subnet
Automation
Test
We tried this
Subnet
ELB for SUT
SUT 1
SUT 2
Subnet
Automation
Test
• Deploy Wiremock on SUT EC2 instance
• No consistent stub response!
= Stubs
Our Solution
ELB for WM
SUT 1
SUT 2
Automation
Test
Wiremock
(Stub
Dependency)
ELB for SUT
• Deploy Wiremock on dedicated EC2 and ELB
• Consistent Stub responses!
= Stubs
If no stubs…
ELB for WM
SUT 1
SUT 2
Automation
Test
Wiremock
ELB for SUT
Dependency
Server
WM will proxy the
request to
dependency
server
Wiremock Code Snipets
Starting Up Wiremock Server
java -jar wiremock-1.53-standalone.jar --verbose --
port 8080 --proxy-all=[Dependency Server DNS Name]
Stubbing the response
//This calls Wiremock API to stub the response
stubFor(get(urlEqualTo(“/from/where”))
.willReturn(aResponse().withStatus(200)
.withHeader("Cache-Control", "no-cache")
.withHeader("Content-Type", ”text/plain")
.withBody(“Taiwan” )));
Simulating Fault
//This calls Wiremock API for fault injection
stubFor(get(urlEqualTo(“/some/thing”))
.willReturn(aResponse()
.withFault(Fault.EMPTY_RESPONSE)));
Benefits
• We fixed the CI/CD pipeline
• No more unnecessary test failures debugging
• Less production escapes and firefighting
Recap
The Second Challenge
• Integration tests failures broke CICD pipeline
• Hard to do resiliency testing
The Solution : Wiremock
Next Step
Why don’t we combine them?
Slingshot With Wiremock
Slingshot with Wiremock
W
ASG
Web
ASG
App
ASG
System Under Test
Region US-WEST-2
Availability Zone #1
Wiremock
ASG
Wiremock
Internet Gateway
Dependency
Server
AWS Region X / Datacenter X
Automate WM Deployment
Automate Wiremock Deployment
Chef is an infrastructure automation code tool we use
• Code how you deploy and manage your infrastructure
• Allows version control
• Code can be reused
Automate Wiremock Deployment
We wrote a Wiremock Recipe
• Download the Wiremock jar
• Start up the Wiremock server
Automate Wiremock Deployment
Berkshelf is a dependency manager for chef
• Get the Java recipe to download Java
• Get the Wiremock recipe to deploy Wiremock server
Chef Snipet
#This will start the wiremock server with the
parameters passed in
function start { cd "${USER_DIRECTORY}" ;java -jar
wiremock-${WIREMOCK_VERSION}-standalone.jar --port
${PORT} --proxy-via ${PROXY_VIA} -–proxy-all=
${PROXY_ALL} --verbose > /var/log/wiremock.log 2>&1
& }
Automate Wiremock Stack Creation
Use AWS CloudFormation API
• Provision EC2 instances and ELB
• Create Auto Scaling Group
• Set up other AWS resources
Use WireMock in Slingshot
Call Chef from CloudFormation
How to Call Cookbook From CloudFormation
Write shell scripts In the InstanceLaunchConfig section
1. Download and install chef
2. Run Chef. In this case we created a Wiremock role to
execute the java and Wiremock cookbooks.
Call Chef from CloudFormation
"5_run_chef": {
"command": { "Fn::Join": [ "", [
"/usr/bin/chef-solo -c /var/chef/config/solo.rb -o
'role[", { "Ref": "Role" }, "]' -E '", { "Ref":
"Environment" },"'" ] ]
}
Benefits
• A simplified CI/CD pipeline onboarding
• A successful CI/CD pipeline with increased test pass rate
• Resiliency testing capability built in
• Security features built in
Deep Dives
Demo
SUT Wiremock
Server
YelpTest
Automation
Recap
Recap
Combined Solution: Slingshot with Wiremock
• CI/CD pipeline easy onboarding
• Builds are auto-promoted
• Less Engineers’ time spent on debugging
• Resiliency issue found before production
• Happy Engineers
What we learned
What We Learned
• The initial investment is worth it
• Try to be flexible
• Set up DNS
References
• http://www.pnsqc.org/the-journey-of-mocking-in-aws/
• http://wiremock.org/
• https://www.chef.io/
• http://docs.aws.amazon.com/AWSCloudFormation/latest
/APIReference/Welcome.html
Related Sessions
Breakout Session:
ARC344
How Intuit Improves Security and Productivity with
AWS Virtual Networking, identity, and Account
Services
Track: Architecture
Session Level: Advanced (300 level)
Session Time: Thursday, Oct 8, 2:45 PM – 3:45 PM–
Palazzo
Contact
Lucy Chang
Sr. Software Engineer in Quality , Intuit
https://www.linkedin.com/pub/lucy-chang/11/312/a83
Alfred Tan
Sr. DevOps Manager, Intuit
https://www.linkedin.com/pub/alfred-tan/1/938/9b
Thank you!
Remember to complete
your evaluations!

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Introducción a Wiremock
Introducción a WiremockIntroducción a Wiremock
Introducción a Wiremock
 
CICD Mule
CICD Mule CICD Mule
CICD Mule
 
Describing Kafka security in AsyncAPI
Describing Kafka security in AsyncAPIDescribing Kafka security in AsyncAPI
Describing Kafka security in AsyncAPI
 
The Test Pyramid
The Test PyramidThe Test Pyramid
The Test Pyramid
 
Agile Testing Introduction
Agile Testing IntroductionAgile Testing Introduction
Agile Testing Introduction
 
CI/CT/CD and Role of Quality Engineering
CI/CT/CD and Role of Quality EngineeringCI/CT/CD and Role of Quality Engineering
CI/CT/CD and Role of Quality Engineering
 
Modern CI/CD in the microservices world with Kubernetes
Modern CI/CD in the microservices world with KubernetesModern CI/CD in the microservices world with Kubernetes
Modern CI/CD in the microservices world with Kubernetes
 
SonarQube: Continuous Code Inspection
SonarQube: Continuous Code InspectionSonarQube: Continuous Code Inspection
SonarQube: Continuous Code Inspection
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
Jenkins with SonarQube
Jenkins with SonarQubeJenkins with SonarQube
Jenkins with SonarQube
 
Swagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfSwagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdf
 
Jenkins tutorial
Jenkins tutorialJenkins tutorial
Jenkins tutorial
 
Testing microservices with rest assured
Testing microservices with rest assuredTesting microservices with rest assured
Testing microservices with rest assured
 
Springboot Microservices
Springboot MicroservicesSpringboot Microservices
Springboot Microservices
 
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
 
Azure DevOps - Um case de sucesso
Azure DevOps - Um case de sucessoAzure DevOps - Um case de sucesso
Azure DevOps - Um case de sucesso
 
End-to-End Test Automation for Both Horizontal and Vertical Scale
End-to-End Test Automation for Both Horizontal and Vertical ScaleEnd-to-End Test Automation for Both Horizontal and Vertical Scale
End-to-End Test Automation for Both Horizontal and Vertical Scale
 
DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágil
 
Test your microservices with REST-Assured
Test your microservices with REST-AssuredTest your microservices with REST-Assured
Test your microservices with REST-Assured
 
Azure DevOps CI/CD For Beginners
Azure DevOps CI/CD  For BeginnersAzure DevOps CI/CD  For Beginners
Azure DevOps CI/CD For Beginners
 

Semelhante a (DEV310) CI/CD of Services with Mocking & Resiliency Testing Using AWS

Semelhante a (DEV310) CI/CD of Services with Mocking & Resiliency Testing Using AWS (20)

Towards automated testing - CloudStack Collab Conference
Towards automated testing - CloudStack Collab ConferenceTowards automated testing - CloudStack Collab Conference
Towards automated testing - CloudStack Collab Conference
 
Containerising bootiful microservices javaeeconf
Containerising bootiful microservices javaeeconfContainerising bootiful microservices javaeeconf
Containerising bootiful microservices javaeeconf
 
Cypress Automation
Cypress  AutomationCypress  Automation
Cypress Automation
 
Getting to Walk with DevOps
Getting to Walk with DevOpsGetting to Walk with DevOps
Getting to Walk with DevOps
 
Andreas Grabner - Performance as Code, Let's Make It a Standard
Andreas Grabner - Performance as Code, Let's Make It a StandardAndreas Grabner - Performance as Code, Let's Make It a Standard
Andreas Grabner - Performance as Code, Let's Make It a Standard
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWS
 
Aws Amity University Presentation Mar-10-2022
Aws Amity University Presentation Mar-10-2022Aws Amity University Presentation Mar-10-2022
Aws Amity University Presentation Mar-10-2022
 
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsDevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
 
Putting it All Together: Securing Systems at Cloud Scale
Putting it All Together: Securing Systems at Cloud ScalePutting it All Together: Securing Systems at Cloud Scale
Putting it All Together: Securing Systems at Cloud Scale
 
Continuous Integration with Amazon ECS and Docker
Continuous Integration with Amazon ECS and DockerContinuous Integration with Amazon ECS and Docker
Continuous Integration with Amazon ECS and Docker
 
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...
 
Advanced Continuous Delivery on AWS
Advanced Continuous Delivery on AWSAdvanced Continuous Delivery on AWS
Advanced Continuous Delivery on AWS
 
TestCorner#22 - Evolving QA implementation for Microservices in Viveport
TestCorner#22 - Evolving QA implementation for Microservices in ViveportTestCorner#22 - Evolving QA implementation for Microservices in Viveport
TestCorner#22 - Evolving QA implementation for Microservices in Viveport
 
Introduction to Spring Cloud
Introduction to Spring Cloud           Introduction to Spring Cloud
Introduction to Spring Cloud
 
Integrating Security into DevOps and CI / CD Environments - Pop-up Loft TLV 2017
Integrating Security into DevOps and CI / CD Environments - Pop-up Loft TLV 2017Integrating Security into DevOps and CI / CD Environments - Pop-up Loft TLV 2017
Integrating Security into DevOps and CI / CD Environments - Pop-up Loft TLV 2017
 
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsDevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
 
Application Delivery Patterns for Developers - Technical 401
Application Delivery Patterns for Developers - Technical 401Application Delivery Patterns for Developers - Technical 401
Application Delivery Patterns for Developers - Technical 401
 
Kubernetes your tests! automation with docker on google cloud platform
Kubernetes your tests! automation with docker on google cloud platformKubernetes your tests! automation with docker on google cloud platform
Kubernetes your tests! automation with docker on google cloud platform
 
Dropwizard and Groovy
Dropwizard and GroovyDropwizard and Groovy
Dropwizard and Groovy
 
AWS Summit Auckland - Application Delivery Patterns for Developers
AWS Summit Auckland - Application Delivery Patterns for DevelopersAWS Summit Auckland - Application Delivery Patterns for Developers
AWS Summit Auckland - Application Delivery Patterns for Developers
 

Mais de Amazon Web Services

Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
Amazon Web Services
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
Amazon Web Services
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
Amazon Web Services
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
Amazon Web Services
 

Mais de Amazon Web Services (20)

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS Fargate
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWS
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot
 
Open banking as a service
Open banking as a serviceOpen banking as a service
Open banking as a service
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
 
Computer Vision con AWS
Computer Vision con AWSComputer Vision con AWS
Computer Vision con AWS
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatare
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e web
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
 
Fundraising Essentials
Fundraising EssentialsFundraising Essentials
Fundraising Essentials
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container Service
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Último (20)

Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 

(DEV310) CI/CD of Services with Mocking & Resiliency Testing Using AWS

  • 1. © 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Lucy Chang Sr. Software Engineer in Quality, Intuit CI/CD with Mocking & Resiliency Testing Using AWS Alfred Tan Sr. DevOps Manager, Intuit
  • 2.
  • 3.
  • 4. Session Overview • CI/CD and AWS onboarding • Cross team AWS strategy alignment • Automating AWS deployment • Development work is blocked by dependency • Integration tests fails due to unreliable dependency • Need to do resiliency testing
  • 6. Our Challenges • Security requirements • Onboarding into CI/CD • Highly Available
  • 7. Our Solution - Slingshot • Build security in • Automate onboarding to CI/CD • Build HA/DR in
  • 8. CI/CD Pipeline Continuous Integration Continuous Delivery/Deployment Pipeline Promotion Criteria: • Build pass: 100% • Unit Test pass: 100% • Code Coverage: >80% Build Promotion Criteria: • BAT pass: 100% CI Promotion Criteria: • Regression Test pass: 100% QA Promotion Criteria: • E2E Test pass: 100% Test Run: • E2E Test • Performance Test E2E/Perf Test Run: • Smoke Test pass: 100% Prod
  • 9. Slingshot Setup Initial Setup GitHub Repo CI/CD Pipeline KMS/SSH keys S3 Buckets Egress Proxy and Bastion Host Splunk Forwarder AWS Account Setup AWS Account VPC, Subnets, Routing tables, Route 53 Zone Delegation One time events
  • 10. Slingshot Initial Setup Region US-WEST-2 Bucket for Artifacts KMS Key for SecretsKMS Key for EBSBucket for Secrets Internet Gateway Bastion ASG Splunk Forwarder Egress ASG Public Bastion Subnets Public Egress Subnets Private DB Subnets Private APP Subnets Public ELB Subnets Private WEB Subnets Delegated DNS Zones
  • 11. Slingshot Setup Initial Setup GitHub Repo CI/CD Pipeline KMS/SSH keys S3 Buckets Egress Proxy and Bastion Host Splunk Forwarder CI/CD ELB Web Tier App Tier CNAME Recurring events AWS Account Setup AWS Account VPC, Subnets, Routing tables, Route 53 Zone Delegation One time events
  • 12. CD with Blue-Green Deployment ci-svc.intuit.com qa-svc.intuit.com svc.intuit.com PreProd Account Prod Account Public ELB Subnets Private Web Subnets Private App Subnets 100% 5%95% 100%0% CI Web Build 10 CI App Build 10 CI Web Build 12 CI App Build 12 QA App Build 10 QA Web Build 10 QA App Build 10 QA Web Build 12 QA App Build 12 Prod App Build 10 Prod Web Build 10 Prod App Build 10 Prod Web Build 12 Prod App Build 12
  • 13. Benefits • Early feedback on changes flowing through the system • Increase in quality • Frequent releases to production • Development productivity from day 1
  • 15. Recap Challenges • Security requirements • Onboarding into CI/CD • Highly Available The Solution: Slingshot • Build security in • Automate onboarding to CI/CD • Build HA/DR in
  • 16. The Next Problem • Automation tests failed due to unreliable dependency server • Builds are not promoted
  • 18. Overview of Wiremock Wiremock is a library for stubbing and proxying web services • Stubbing • Fault Injection • Easy Set up • Easy onboarding
  • 19. How does Wiremock work? System Under Test Wiremock Server Dependency Server Automation Test • Configure the Wiremock server to be man-in-the-middle • Increased integration test pass rate • Increased code coverage • Does not interrupt other team’s calling the SUT = Stubs
  • 20. Before Wiremock Subnet ELB for SUT SUT 1 SUT 2 Dependency Server Subnet Automation Test
  • 21. We tried this Subnet ELB for SUT SUT 1 SUT 2 Subnet Automation Test • Deploy Wiremock on SUT EC2 instance • No consistent stub response! = Stubs
  • 22. Our Solution ELB for WM SUT 1 SUT 2 Automation Test Wiremock (Stub Dependency) ELB for SUT • Deploy Wiremock on dedicated EC2 and ELB • Consistent Stub responses! = Stubs
  • 23. If no stubs… ELB for WM SUT 1 SUT 2 Automation Test Wiremock ELB for SUT Dependency Server WM will proxy the request to dependency server
  • 25. Starting Up Wiremock Server java -jar wiremock-1.53-standalone.jar --verbose -- port 8080 --proxy-all=[Dependency Server DNS Name]
  • 26. Stubbing the response //This calls Wiremock API to stub the response stubFor(get(urlEqualTo(“/from/where”)) .willReturn(aResponse().withStatus(200) .withHeader("Cache-Control", "no-cache") .withHeader("Content-Type", ”text/plain") .withBody(“Taiwan” )));
  • 27. Simulating Fault //This calls Wiremock API for fault injection stubFor(get(urlEqualTo(“/some/thing”)) .willReturn(aResponse() .withFault(Fault.EMPTY_RESPONSE)));
  • 28. Benefits • We fixed the CI/CD pipeline • No more unnecessary test failures debugging • Less production escapes and firefighting
  • 29. Recap The Second Challenge • Integration tests failures broke CICD pipeline • Hard to do resiliency testing The Solution : Wiremock
  • 30. Next Step Why don’t we combine them?
  • 32. Slingshot with Wiremock W ASG Web ASG App ASG System Under Test Region US-WEST-2 Availability Zone #1 Wiremock ASG Wiremock Internet Gateway Dependency Server AWS Region X / Datacenter X
  • 34. Automate Wiremock Deployment Chef is an infrastructure automation code tool we use • Code how you deploy and manage your infrastructure • Allows version control • Code can be reused
  • 35. Automate Wiremock Deployment We wrote a Wiremock Recipe • Download the Wiremock jar • Start up the Wiremock server
  • 36. Automate Wiremock Deployment Berkshelf is a dependency manager for chef • Get the Java recipe to download Java • Get the Wiremock recipe to deploy Wiremock server
  • 37. Chef Snipet #This will start the wiremock server with the parameters passed in function start { cd "${USER_DIRECTORY}" ;java -jar wiremock-${WIREMOCK_VERSION}-standalone.jar --port ${PORT} --proxy-via ${PROXY_VIA} -–proxy-all= ${PROXY_ALL} --verbose > /var/log/wiremock.log 2>&1 & }
  • 38. Automate Wiremock Stack Creation Use AWS CloudFormation API • Provision EC2 instances and ELB • Create Auto Scaling Group • Set up other AWS resources
  • 39. Use WireMock in Slingshot Call Chef from CloudFormation
  • 40. How to Call Cookbook From CloudFormation Write shell scripts In the InstanceLaunchConfig section 1. Download and install chef 2. Run Chef. In this case we created a Wiremock role to execute the java and Wiremock cookbooks.
  • 41. Call Chef from CloudFormation "5_run_chef": { "command": { "Fn::Join": [ "", [ "/usr/bin/chef-solo -c /var/chef/config/solo.rb -o 'role[", { "Ref": "Role" }, "]' -E '", { "Ref": "Environment" },"'" ] ] }
  • 42. Benefits • A simplified CI/CD pipeline onboarding • A successful CI/CD pipeline with increased test pass rate • Resiliency testing capability built in • Security features built in
  • 45. Recap
  • 46. Recap Combined Solution: Slingshot with Wiremock • CI/CD pipeline easy onboarding • Builds are auto-promoted • Less Engineers’ time spent on debugging • Resiliency issue found before production • Happy Engineers
  • 48. What We Learned • The initial investment is worth it • Try to be flexible • Set up DNS
  • 49. References • http://www.pnsqc.org/the-journey-of-mocking-in-aws/ • http://wiremock.org/ • https://www.chef.io/ • http://docs.aws.amazon.com/AWSCloudFormation/latest /APIReference/Welcome.html
  • 50. Related Sessions Breakout Session: ARC344 How Intuit Improves Security and Productivity with AWS Virtual Networking, identity, and Account Services Track: Architecture Session Level: Advanced (300 level) Session Time: Thursday, Oct 8, 2:45 PM – 3:45 PM– Palazzo
  • 51. Contact Lucy Chang Sr. Software Engineer in Quality , Intuit https://www.linkedin.com/pub/lucy-chang/11/312/a83 Alfred Tan Sr. DevOps Manager, Intuit https://www.linkedin.com/pub/alfred-tan/1/938/9b