SlideShare a Scribd company logo
1 of 30
S A N F R A N C I S C O | A P R I L 2 0 , 2 0 2 2
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Improving developer experience
with CDK
Casey Lee
D E V 2 0 2
Chief Technology Officer
Gaggle
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Gaggle’s Transformation Story
Blocked Items
190,616,612
105%
Messages
5,155,335,282
350%
Files
6,276,549,392
489%
PSS
20,395
61%
Human Items
38,815,291
34%
Lives Saved
1,338
50%
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
“The tech team never gets
anything done...when they do,
it is months late!”
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
% Efficiency = (# Engineers) / (WIP)
WIP = (Lead Time) x (Deploy Frequency)
High WIP, Low Efficiency
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
Inability to
work in
isolation
results in long
feedback loops
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Provision separate AWS
accounts per developer
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge: Unable to use
existing CI/CD to deploy
into dev account
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Use CDK
for each
application
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Use CDK for each application
from gaggle_cdk.core import S3Website, S3JsonFile, apply_permissions_boundary
class AppStack(core.Stack):
def __init__() -> None:
s3_website = S3Website(
self,
hosted_zone=hosted_zone,
website_sources=s3deploy.Source.asset(artifact)
)
config = S3JsonFile(
bucket=s3_website.bucket,
object_key="assets/config.json",
values={
"version": os.getenv("CODEBUILD_RESOLVED_SOURCE_VERSION","-"),
"identityProviderId": user_pool_idp,
"baseApiUrl": base_url,
}
)
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Automate IAM Permission Boundary
from gaggle_cdk.core import apply_permissions_boundary
class AppStack(core.Stack):
def __init__(self) -> None:
apply_permissions_boundary(self)
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Automate Tag Policy
tags = GaggleTags(
application=application,
environment=environment,
team=team,
some_random_tag=”foo",
)
# Create a stack, add resources to it
stack = core.Stack(app, "my-stack")
# Apply the tags to the stack
tags.apply(stack)
# Additionally you can apply tags to the entire app
tags.apply(app)
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge: Deploying dependencies
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution:
Automate
build/deploy of
dependencies
from source
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Automate build/deploy of
dependencies from source
# Define the commands needed to build build:
- npm run build
# Define the dependencies to load
dependencies:
- repo: gaggle-net/service-a.git
ref: main
# Define the applications to run locally
- basedir: infrastructure
stacks: ui-stack
context:
my-context-key: my-context-value
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge: QA
is now a
bottleneck to
delivery
process
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution:
Separate
integration
accounts per
team
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Create
pipeline for
each service
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Create pipeline for
each service
from aws_cdk import core
from gaggle_cdk.core.pipelines import DeploymentPipeline
class ExamplePipelineStack(core.Stack):
def __init__(self,scope: core.Construct):
pipeline = DeploymentPipeline(
self,
github_repo="sample-api",
github_org="gaggle-net",
integration_account="100000000000",
staging_account="200000000000",
production_account="300000000000",
)
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge: Many
accounts can be
expensive!!
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution:
Budget
Automation
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
# The 'org' sections defines settings for the entire organization
org:
owner: org-owner@gaggle.net
workspace: T0000000
channel: ZZZZZZZ
default_daily_limit: 5
# Teams are containers for accounts.
# 'owner' - email address to notify for overages
# 'channel' - slack channel to notify for overages
teams:
- name: FOO
owner: alice@gaggle.net
channel: YYYYYYYYYYY
# Accounts are matched by 'name'.
# - 'owner' an additional 'owner' can be specified to be included in overage emails.
# - 'daily_limit' can be overridden per team
account_costs:
- name: developer-alice
- name: developer-bob
owner: bob@gaggle.net
Solution: Budget Automation
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
from account_budget import AccountBudget
class BudgetsStack(core.Stack):
def __init__(self) -> None:
for account in accounts:
b = AccountBudget(
self,
account_id=account.id,
daily_limit=daily_limit,
emails=[team.owner,account_cost.owner]
)
# create chatbot channel
aws_chatbot.SlackChannelConfiguration(
self,
slack_channel_id=config.org.channel,
slack_workspace_id=config.org.workspace,
notification_topics=[b.topic]
)
Solution: Budget Automation
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Budget Automation
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Results...
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
% Efficiency = (# Engineers) / (WIP)
WIP = (Lead Time) x (Deploy Frequency)
Kickoff Transformation
Thank you!
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Casey Lee
@nektos
Survey Link 
Please complete
the session survey
© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.

More Related Content

Similar to 2022 SF Summit - Improving Developer Experience with CDK

Speed up your Machine Learning workflows with build-in algorithms
Speed up your Machine Learning workflows with build-in algorithmsSpeed up your Machine Learning workflows with build-in algorithms
Speed up your Machine Learning workflows with build-in algorithmsJulien SIMON
 
BDA210 AWS DeepLens Workshop Building Computer Vision Applications
BDA210 AWS DeepLens Workshop Building Computer Vision Applications BDA210 AWS DeepLens Workshop Building Computer Vision Applications
BDA210 AWS DeepLens Workshop Building Computer Vision Applications Amazon Web Services
 
High Velocity DevOps: Four Ways to Leverage CloudFront in Faster DevOps Workf...
High Velocity DevOps: Four Ways to Leverage CloudFront in Faster DevOps Workf...High Velocity DevOps: Four Ways to Leverage CloudFront in Faster DevOps Workf...
High Velocity DevOps: Four Ways to Leverage CloudFront in Faster DevOps Workf...Amazon Web Services
 
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...Amazon Web Services
 
Advanced Container Automation, Security, and Monitoring - AWS Summit Sydney 2018
Advanced Container Automation, Security, and Monitoring - AWS Summit Sydney 2018Advanced Container Automation, Security, and Monitoring - AWS Summit Sydney 2018
Advanced Container Automation, Security, and Monitoring - AWS Summit Sydney 2018Amazon Web Services
 
DevConfZA 2020 : Automating your cloud: What are the building blocks
DevConfZA 2020 : Automating your cloud: What are the building blocksDevConfZA 2020 : Automating your cloud: What are the building blocks
DevConfZA 2020 : Automating your cloud: What are the building blocksCobus Bernard
 
Building Deep Learning Applications with TensorFlow and SageMaker on AWS - Te...
Building Deep Learning Applications with TensorFlow and SageMaker on AWS - Te...Building Deep Learning Applications with TensorFlow and SageMaker on AWS - Te...
Building Deep Learning Applications with TensorFlow and SageMaker on AWS - Te...Amazon Web Services
 
20201013 - Serverless Architecture Conference - How to migrate your existing ...
20201013 - Serverless Architecture Conference - How to migrate your existing ...20201013 - Serverless Architecture Conference - How to migrate your existing ...
20201013 - Serverless Architecture Conference - How to migrate your existing ...Marcia Villalba
 
AWS DeepLens Workshop: Building Computer Vision Applications - BDA201 - Anahe...
AWS DeepLens Workshop: Building Computer Vision Applications - BDA201 - Anahe...AWS DeepLens Workshop: Building Computer Vision Applications - BDA201 - Anahe...
AWS DeepLens Workshop: Building Computer Vision Applications - BDA201 - Anahe...Amazon Web Services
 
AWS DATABASE USER GROUP - LAUNCH EVENT (LONDON) December 7, 2022 - COM311 Mi...
AWS DATABASE USER GROUP - LAUNCH EVENT (LONDON)  December 7, 2022 - COM311 Mi...AWS DATABASE USER GROUP - LAUNCH EVENT (LONDON)  December 7, 2022 - COM311 Mi...
AWS DATABASE USER GROUP - LAUNCH EVENT (LONDON) December 7, 2022 - COM311 Mi...Matt Houghton
 
COM311 Migrating 600 Databases To AWS
COM311 Migrating 600 Databases To AWS COM311 Migrating 600 Databases To AWS
COM311 Migrating 600 Databases To AWS Matt Houghton
 
AWS DevDay Vienna - Automating building blocks choices you will face with con...
AWS DevDay Vienna - Automating building blocks choices you will face with con...AWS DevDay Vienna - Automating building blocks choices you will face with con...
AWS DevDay Vienna - Automating building blocks choices you will face with con...Cobus Bernard
 
PRG 420 Week 3 Individual Assignment Netbeans Project (annual co.docx
PRG 420 Week 3 Individual Assignment Netbeans Project (annual co.docxPRG 420 Week 3 Individual Assignment Netbeans Project (annual co.docx
PRG 420 Week 3 Individual Assignment Netbeans Project (annual co.docxharrisonhoward80223
 
AEM target Integration
AEM target IntegrationAEM target Integration
AEM target IntegrationKanika Gera
 
How to build unified Batch & Streaming Pipelines with Apache Beam and Dataflow
How to build unified Batch & Streaming Pipelines with Apache Beam and DataflowHow to build unified Batch & Streaming Pipelines with Apache Beam and Dataflow
How to build unified Batch & Streaming Pipelines with Apache Beam and DataflowDaniel Zivkovic
 
CIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
CIRCUIT 2015 - Responsive Websites & Grid-Based LayoutsCIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
CIRCUIT 2015 - Responsive Websites & Grid-Based LayoutsICF CIRCUIT
 
AWS DeepLens Workshop: Building Computer Vision Applications
AWS DeepLens Workshop: Building Computer Vision ApplicationsAWS DeepLens Workshop: Building Computer Vision Applications
AWS DeepLens Workshop: Building Computer Vision ApplicationsAmazon Web Services
 

Similar to 2022 SF Summit - Improving Developer Experience with CDK (20)

Speed up your Machine Learning workflows with build-in algorithms
Speed up your Machine Learning workflows with build-in algorithmsSpeed up your Machine Learning workflows with build-in algorithms
Speed up your Machine Learning workflows with build-in algorithms
 
BDA210 AWS DeepLens Workshop Building Computer Vision Applications
BDA210 AWS DeepLens Workshop Building Computer Vision Applications BDA210 AWS DeepLens Workshop Building Computer Vision Applications
BDA210 AWS DeepLens Workshop Building Computer Vision Applications
 
High Velocity DevOps: Four Ways to Leverage CloudFront in Faster DevOps Workf...
High Velocity DevOps: Four Ways to Leverage CloudFront in Faster DevOps Workf...High Velocity DevOps: Four Ways to Leverage CloudFront in Faster DevOps Workf...
High Velocity DevOps: Four Ways to Leverage CloudFront in Faster DevOps Workf...
 
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
 
Advanced Container Automation, Security, and Monitoring - AWS Summit Sydney 2018
Advanced Container Automation, Security, and Monitoring - AWS Summit Sydney 2018Advanced Container Automation, Security, and Monitoring - AWS Summit Sydney 2018
Advanced Container Automation, Security, and Monitoring - AWS Summit Sydney 2018
 
DevConfZA 2020 : Automating your cloud: What are the building blocks
DevConfZA 2020 : Automating your cloud: What are the building blocksDevConfZA 2020 : Automating your cloud: What are the building blocks
DevConfZA 2020 : Automating your cloud: What are the building blocks
 
Azure from scratch part 4
Azure from scratch part 4Azure from scratch part 4
Azure from scratch part 4
 
Building Deep Learning Applications with TensorFlow and SageMaker on AWS - Te...
Building Deep Learning Applications with TensorFlow and SageMaker on AWS - Te...Building Deep Learning Applications with TensorFlow and SageMaker on AWS - Te...
Building Deep Learning Applications with TensorFlow and SageMaker on AWS - Te...
 
20201013 - Serverless Architecture Conference - How to migrate your existing ...
20201013 - Serverless Architecture Conference - How to migrate your existing ...20201013 - Serverless Architecture Conference - How to migrate your existing ...
20201013 - Serverless Architecture Conference - How to migrate your existing ...
 
AWS DeepLens Workshop: Building Computer Vision Applications - BDA201 - Anahe...
AWS DeepLens Workshop: Building Computer Vision Applications - BDA201 - Anahe...AWS DeepLens Workshop: Building Computer Vision Applications - BDA201 - Anahe...
AWS DeepLens Workshop: Building Computer Vision Applications - BDA201 - Anahe...
 
AWS DATABASE USER GROUP - LAUNCH EVENT (LONDON) December 7, 2022 - COM311 Mi...
AWS DATABASE USER GROUP - LAUNCH EVENT (LONDON)  December 7, 2022 - COM311 Mi...AWS DATABASE USER GROUP - LAUNCH EVENT (LONDON)  December 7, 2022 - COM311 Mi...
AWS DATABASE USER GROUP - LAUNCH EVENT (LONDON) December 7, 2022 - COM311 Mi...
 
COM311 Migrating 600 Databases To AWS
COM311 Migrating 600 Databases To AWS COM311 Migrating 600 Databases To AWS
COM311 Migrating 600 Databases To AWS
 
AWS DevDay Vienna - Automating building blocks choices you will face with con...
AWS DevDay Vienna - Automating building blocks choices you will face with con...AWS DevDay Vienna - Automating building blocks choices you will face with con...
AWS DevDay Vienna - Automating building blocks choices you will face with con...
 
PRG 420 Week 3 Individual Assignment Netbeans Project (annual co.docx
PRG 420 Week 3 Individual Assignment Netbeans Project (annual co.docxPRG 420 Week 3 Individual Assignment Netbeans Project (annual co.docx
PRG 420 Week 3 Individual Assignment Netbeans Project (annual co.docx
 
AEM target Integration
AEM target IntegrationAEM target Integration
AEM target Integration
 
How to build unified Batch & Streaming Pipelines with Apache Beam and Dataflow
How to build unified Batch & Streaming Pipelines with Apache Beam and DataflowHow to build unified Batch & Streaming Pipelines with Apache Beam and Dataflow
How to build unified Batch & Streaming Pipelines with Apache Beam and Dataflow
 
CIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
CIRCUIT 2015 - Responsive Websites & Grid-Based LayoutsCIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
CIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
 
AEM responsive
AEM responsiveAEM responsive
AEM responsive
 
DevOps on AWS
DevOps on AWSDevOps on AWS
DevOps on AWS
 
AWS DeepLens Workshop: Building Computer Vision Applications
AWS DeepLens Workshop: Building Computer Vision ApplicationsAWS DeepLens Workshop: Building Computer Vision Applications
AWS DeepLens Workshop: Building Computer Vision Applications
 

More from Casey Lee

The Last Bottleneck of Continuous Delivery
The Last Bottleneck of Continuous DeliveryThe Last Bottleneck of Continuous Delivery
The Last Bottleneck of Continuous DeliveryCasey Lee
 
Using AWS to Achieve Both Autonomy and Governance at 3M
Using AWS to Achieve Both Autonomy and Governance at 3MUsing AWS to Achieve Both Autonomy and Governance at 3M
Using AWS to Achieve Both Autonomy and Governance at 3MCasey Lee
 
AWS DOs and DONTs
AWS DOs and DONTsAWS DOs and DONTs
AWS DOs and DONTsCasey Lee
 
AWS re:Invent 2018
AWS re:Invent 2018 AWS re:Invent 2018
AWS re:Invent 2018 Casey Lee
 
Continuous Delivery on AWS with Zero Downtime
Continuous Delivery on AWS with Zero DowntimeContinuous Delivery on AWS with Zero Downtime
Continuous Delivery on AWS with Zero DowntimeCasey Lee
 
Container based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsContainer based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsCasey Lee
 
WORKSHOP: Microservices as Containers on AWS
WORKSHOP: Microservices as Containers on AWSWORKSHOP: Microservices as Containers on AWS
WORKSHOP: Microservices as Containers on AWSCasey Lee
 
Microservices as Containers on AWS . . . for Fun and Profit
Microservices as Containers on AWS . . . for Fun and ProfitMicroservices as Containers on AWS . . . for Fun and Profit
Microservices as Containers on AWS . . . for Fun and ProfitCasey Lee
 
Serverless Delivery
Serverless DeliveryServerless Delivery
Serverless DeliveryCasey Lee
 
Top10 Characteristics of Awesome Apps
Top10 Characteristics of Awesome AppsTop10 Characteristics of Awesome Apps
Top10 Characteristics of Awesome AppsCasey Lee
 

More from Casey Lee (10)

The Last Bottleneck of Continuous Delivery
The Last Bottleneck of Continuous DeliveryThe Last Bottleneck of Continuous Delivery
The Last Bottleneck of Continuous Delivery
 
Using AWS to Achieve Both Autonomy and Governance at 3M
Using AWS to Achieve Both Autonomy and Governance at 3MUsing AWS to Achieve Both Autonomy and Governance at 3M
Using AWS to Achieve Both Autonomy and Governance at 3M
 
AWS DOs and DONTs
AWS DOs and DONTsAWS DOs and DONTs
AWS DOs and DONTs
 
AWS re:Invent 2018
AWS re:Invent 2018 AWS re:Invent 2018
AWS re:Invent 2018
 
Continuous Delivery on AWS with Zero Downtime
Continuous Delivery on AWS with Zero DowntimeContinuous Delivery on AWS with Zero Downtime
Continuous Delivery on AWS with Zero Downtime
 
Container based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsContainer based CI/CD on GitHub Actions
Container based CI/CD on GitHub Actions
 
WORKSHOP: Microservices as Containers on AWS
WORKSHOP: Microservices as Containers on AWSWORKSHOP: Microservices as Containers on AWS
WORKSHOP: Microservices as Containers on AWS
 
Microservices as Containers on AWS . . . for Fun and Profit
Microservices as Containers on AWS . . . for Fun and ProfitMicroservices as Containers on AWS . . . for Fun and Profit
Microservices as Containers on AWS . . . for Fun and Profit
 
Serverless Delivery
Serverless DeliveryServerless Delivery
Serverless Delivery
 
Top10 Characteristics of Awesome Apps
Top10 Characteristics of Awesome AppsTop10 Characteristics of Awesome Apps
Top10 Characteristics of Awesome Apps
 

Recently uploaded

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 

Recently uploaded (20)

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 

2022 SF Summit - Improving Developer Experience with CDK

  • 1. S A N F R A N C I S C O | A P R I L 2 0 , 2 0 2 2
  • 2. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Improving developer experience with CDK Casey Lee D E V 2 0 2 Chief Technology Officer Gaggle
  • 3. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Gaggle’s Transformation Story Blocked Items 190,616,612 105% Messages 5,155,335,282 350% Files 6,276,549,392 489% PSS 20,395 61% Human Items 38,815,291 34% Lives Saved 1,338 50%
  • 4. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: “The tech team never gets anything done...when they do, it is months late!”
  • 5. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. % Efficiency = (# Engineers) / (WIP) WIP = (Lead Time) x (Deploy Frequency) High WIP, Low Efficiency
  • 6. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: Inability to work in isolation results in long feedback loops
  • 7. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Provision separate AWS accounts per developer
  • 8. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: Unable to use existing CI/CD to deploy into dev account
  • 9. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Use CDK for each application
  • 10. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Use CDK for each application from gaggle_cdk.core import S3Website, S3JsonFile, apply_permissions_boundary class AppStack(core.Stack): def __init__() -> None: s3_website = S3Website( self, hosted_zone=hosted_zone, website_sources=s3deploy.Source.asset(artifact) ) config = S3JsonFile( bucket=s3_website.bucket, object_key="assets/config.json", values={ "version": os.getenv("CODEBUILD_RESOLVED_SOURCE_VERSION","-"), "identityProviderId": user_pool_idp, "baseApiUrl": base_url, } )
  • 11. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Automate IAM Permission Boundary from gaggle_cdk.core import apply_permissions_boundary class AppStack(core.Stack): def __init__(self) -> None: apply_permissions_boundary(self)
  • 12. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Automate Tag Policy tags = GaggleTags( application=application, environment=environment, team=team, some_random_tag=”foo", ) # Create a stack, add resources to it stack = core.Stack(app, "my-stack") # Apply the tags to the stack tags.apply(stack) # Additionally you can apply tags to the entire app tags.apply(app)
  • 13. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: Deploying dependencies
  • 14. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Automate build/deploy of dependencies from source
  • 15. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Automate build/deploy of dependencies from source # Define the commands needed to build build: - npm run build # Define the dependencies to load dependencies: - repo: gaggle-net/service-a.git ref: main # Define the applications to run locally - basedir: infrastructure stacks: ui-stack context: my-context-key: my-context-value
  • 16. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: QA is now a bottleneck to delivery process
  • 17. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Separate integration accounts per team
  • 18. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Create pipeline for each service
  • 19. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Create pipeline for each service from aws_cdk import core from gaggle_cdk.core.pipelines import DeploymentPipeline class ExamplePipelineStack(core.Stack): def __init__(self,scope: core.Construct): pipeline = DeploymentPipeline( self, github_repo="sample-api", github_org="gaggle-net", integration_account="100000000000", staging_account="200000000000", production_account="300000000000", )
  • 20. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: Many accounts can be expensive!!
  • 21. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Budget Automation
  • 22. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. # The 'org' sections defines settings for the entire organization org: owner: org-owner@gaggle.net workspace: T0000000 channel: ZZZZZZZ default_daily_limit: 5 # Teams are containers for accounts. # 'owner' - email address to notify for overages # 'channel' - slack channel to notify for overages teams: - name: FOO owner: alice@gaggle.net channel: YYYYYYYYYYY # Accounts are matched by 'name'. # - 'owner' an additional 'owner' can be specified to be included in overage emails. # - 'daily_limit' can be overridden per team account_costs: - name: developer-alice - name: developer-bob owner: bob@gaggle.net Solution: Budget Automation
  • 23. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. from account_budget import AccountBudget class BudgetsStack(core.Stack): def __init__(self) -> None: for account in accounts: b = AccountBudget( self, account_id=account.id, daily_limit=daily_limit, emails=[team.owner,account_cost.owner] ) # create chatbot channel aws_chatbot.SlackChannelConfiguration( self, slack_channel_id=config.org.channel, slack_workspace_id=config.org.workspace, notification_topics=[b.topic] ) Solution: Budget Automation
  • 24. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
  • 25. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Budget Automation
  • 26. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Results...
  • 27. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
  • 28. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. % Efficiency = (# Engineers) / (WIP) WIP = (Lead Time) x (Deploy Frequency) Kickoff Transformation
  • 29. Thank you! © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Casey Lee @nektos Survey Link 
  • 30. Please complete the session survey © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Editor's Notes

  1. Duration: 120 seconds Talk Track Casey: Talk about who Gaggle is
  2. Duration: 30 seconds Talk Track Casey: The challenge…
  3. Duration: 60 seconds Talk Track Casey: Describe problem: * Lead time = 47 days * Deploy frequency = 2/day * WIP 87 * Efficiency = 12%
  4. Duration: 90 seconds Talk Track Casey: Inability to work in isolation -> long feedback loops * developers can’t run everything locally (lambdas, kinesis, sqs, etc) * Forced use of shared account and release branches. * QA owns shared environment and deployed to shared account. SLOW FEEDBACK. → DEV and QA are coupled to get feedback.
  5. Duration: 30 seconds Talk Track Casey: Use Control tower to provision each developer their own account
  6. Duration: 90 seconds Talk Track Casey: How do they deploy to new accounts? Can’t use bamboo 
  7. Duration: 120 seconds Talk Track Casey: Wrap existing CFN templates with CDK where possible. Create shared resources.
  8. Duration: 120 seconds Talk Track Casey: Create higher order constructs S3Website – S3 Bucket, CloudFront, Route53, Deploy code S3JsonFile – dynamic values from CFN pushed to JSON file in bucket
  9. Duration: 60 seconds Talk Track Casey: IAM Permission Boundary to allow creating IAM policies in CDK, but automatically add the appropriate perm boundary to avoid privilege escalation
  10. Duration: 60 seconds Talk Track Casey: We enforce certain tags – make it easy to add those tags to the stack or app
  11. Duration: 90 seconds Talk Track Casey: How do I deploy my dependencies?
  12. Duration: 120 seconds Talk Track Casey: Define dependencies in code, pull/build/deploy deps Quickly converge any environment to run an app and its deps
  13. Duration: 120 seconds Talk Track Casey: CDKR tool. Define deps in YAML. Run deploy Clones dependencies and deploys
  14. Duration: 60 seconds Talk Track Casey: Still waiting on QA for all testing – and now devs are providing pressure! Still have shared account and release branches. Bottleneck is now QA. They own shared environment and deployed to shared account. SLOW FEEDBACK. → COUPLING between ALL dev teams to test/release changes. ONLY 1 path to production!
  15. Duration: 60 seconds Talk Track Casey: MOAR accounts! New account per team This account allows teams to handle their integration testing in parallel of other teams
  16. Duration: 60 seconds Talk Track Casey: Each service gets CodePipeline Explain how dependencies are deployed into team accounts but not to higher accounts
  17. Duration: 120 seconds Talk Track Casey: CDK - high level construct for a pipeline Creates build job - use buildspec Creates deploy to integration and runs tests “ Staging “ prod
  18. Duration: 60 seconds Talk Track Casey: Hard to manage costs across dozens of accounts Devs trying new things Devs scaling old things Need visibility
  19. Duration: 120 seconds Talk Track Casey: Approach: decentralized view into budgets...give ownership to others Automate provisioning of budget per member account Attach SNS top to budget Subscribe slack and email
  20. Duration: 120 seconds Talk Track Casey: # 'owner' - email address to notify for overages # 'workspace' - slack workspace id # 'channel' - slack channel to notify for overages # 'default_daily_limit' - a default daily limit for any account that isn't included in a team
  21. Duration: 120 seconds Talk Track Casey: Run in master account. Loop through all accounts and create an account budget construct Budget construct does the budget, notifications, and sns topic Include daily limit and emails for notifications Include chatbot from budget SNS topic
  22. Duration: 30 seconds Talk Track Casey: Leverage existing AWS tools (budget in console)
  23. Duration: 30 seconds Talk Track Casey: Slack message
  24. Duration: 5 seconds Talk Track Casey: transition…
  25. Duration: 12= seconds Talk Track Casey: New process
  26. Duration: 90 seconds Talk Track Casey: Results after transformation * Lead time = 47 days -> 12 days * Deploy frequency = 2/day -> 6/day * WIP 72 (40% increase in headcount) Efficiency = 12% -> 61% Pipelines launched efficiency and throughput