SlideShare a Scribd company logo
S E P T E M B E R 2 8 - 2 9 , 2 0 2 1
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Improve the developer experience
with AWS CDK
Galen Dunkleberger
U S E 3 0 1
Solutions Architect
AWS
Casey Lee
Chief Technology Officer
Gaggle
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Agenda
• AWS CDK overview
• How CDK improves the developer experience on AWS
• Gaggle’s use of CDK
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
AWS CDK
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Evolution of provisioning cloud infrastructure
Manual
Scripted
.SH
CloudFormation HashiCorp
Terraform
Declarative
AWS CDK
Imperative
GoFormation
Troposphere
Generators
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
AWS CDK
COMING
SOON!
new s3.Bucket(this, "my-bucket", {
bucketName: “my-bucket”
})
mybucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-bucket
Write code Not yaml/json
CloudFormation
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Benefits of CDK
Your language
Just classes and methods
Autocomplete
Inline documentation
Sane defaults
Reusable classes
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
CDK components
App
Stacks
Resources
Core framework AWS CDK CLI AWS Construct Library
Serverless
Containers CI/CD
App Integration / Foundational Services
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Workflow
> cdk init
Generate project
> npm run build
Build project
> cdk synth
Create templates
and assets
> cdk diff
Check what will
change
> cdk deploy
Push changes
to the cloud
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
AWS Construct Library
Serverless Application Integration / Foundational Services
Containers CI/CD
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Constructs levels
CloudFormation resources
L1
Purpose-built constructs
L3+
AWS constructs
L2
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Paradigm shift
Stack A
Stack B
CDK
Typed OO language:
loops, conditions,
inheritence, etc
CDK App
Source Code
Template A
Template B
CloudFormation
CloudFormation
Parameters and
intrinsic functions
Parameterized
template
Stack 1
CloudFormation
Stack 2
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
How CDK improves the developer
experience on AWS
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
“Where do I put my
infrastructure as code?”
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Infrastructure and application code, together
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Simplified deployment
const f1 = new NodejsFunction(this, "say-hello-function",
{
memorySize: 256,
timeout: cdk.Duration.seconds(5),
runtime: lambda.Runtime.NODEJS_14_X,
handler: "index.lambdaHandler",
entry: path.join(__dirname, `/../runtime/lambda.ts`),
})
Assets
bucket
say-hello-function
"Code": {
"S3Bucket": "cdk-hnb659fds-assets",
"S3Key": “uuid1c18c5dc.zip"
}
> cdk deploy
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
“I don’t know what
IAM policy I need to
make this work…”
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Use grant methods to manage roles
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Minimal code, minimal permissions
const myBucket = new s3.Bucket(this, "my-bucket” )
myBucket.grantRead(myRole)
mybucketroleDefaultPolicy7E8479F3:
Type: AWS::IAM::Policy
Properties:
PolicyDocument:
Statement:
- Action:
- s3:GetObject*
- s3:GetBucket*
- s3:List*
Effect: Allow
Resource:
- Fn::GetAtt:
- mybucket15D133BF
- Arn
- Fn::Join:
- ""
- - Fn::GetAtt:
- mybucket15D133BF
- Arn
- /*
Roles:
- Ref: myroleBCC9F6EE
cdk synth
cdk deploy
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
“I hope this change doesn’t break
anything.”
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Refactor with confidence
Snapshot tests
Fine-grained assertions
Validation tests
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Snapshot tests
test("Test snapshot", () => {
const app = new cdk.App();
const stack = new MyTestStack(app, "MyTestStack");
expect(Template.fromStack(stack).toJSON()).toMatchSnapshot();
});
npm run build && npm test
npm run test -- -u
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Fine-grained assertions
test('Test fine-grained assertions', () => {
const app = new cdk.App();
const stack = new MyTestStack(app, "MyTestStack")
expect(stack).toHaveResource('AWS::SSM::Parameter', {
Tier: "Standard",
Name: "/dc-summit/component02/parameter",
Type : "String"
});
});
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Validation tests
export interface DeadLetterQueueProps {
retentionDays?: number;
}
constructor(scope: cdk.Construct, id: string, props: DeadLetterQueueProps = {}) {
if (props.retentionDays !== undefined && props.retentionDays > 14) {
throw new Error('retentionDays may not exceed 14 days');
}
expect(() => {
new DeadLetterQueue(stack, 'DLQ', {
retentionDays: 15
});
}).toThrowError(/retentionDays may not exceed 14 days/)
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
“We’ll add monitoring next sprint…”
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Use metric methods to add monitoring
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Easily measure what you need
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
“We tag our resources, sometimes…”
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Tagging made easy
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Use aspects to enforce standards
public visit(node: IConstruct): void {
if ("tags" in node) {
const tagManager: TagManager = node["tags"];
const tags: Record<string, string> = tagManager.tagValues();
if (!("CostCenter" in tags)) {
Annotations.of(node).addError(
"All taggable resources must include a 'CostCenter' tag"
);
}
}
cdk.Tags.of(myStack).add("Costcenter", "MyCostCenter");
Aspects.of(myStack).add(new TagEnforcer());
TagEnforcer.ts
[Error at /Stack/A/B/FileRole/Resource] All taggable resources must include a 'CostCenter' tag
cdk synth
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Adhere to best practices with cdk-nag
https://github.com/cdklabs/cdk-nag
Aspects.of(app).add(new AwsSolutionsChecks());
cdk synth
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
“How can I share my
infrastructure as code?”
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Model constructs, not stacks
Units of deployment,
typically not reusable
Cloud components,
potentially reusable
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Code organization
Component
Construct
library
or
Depends on zero or more
Team
Code
repository
Owns one
or more
Package
Contains one
or more CDK APP
Consist of
CodeArtifact
Shared via
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Leverage pre-built constructs
https://constructs.dev/
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
CDK Pipelines
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
“Did you just delete my stack?”
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Account structure
© 2021, 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%
© 2021, 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!”
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
% Efficiency = (# Engineers) / (WIP)
WIP = (Lead time) x (Deploy frequency)
High WIP, low efficiency
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge:
Inability to
work in
isolation
results in long
feedback loops
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Provision separate AWS accounts
per developer
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge: Unable to use existing CI/CD to deploy
into dev account
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Use CDK
for each
application
© 2021, 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,
}
)
© 2021, 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)
© 2021, 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)
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge: Deploying dependencies
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution:
Automate
build/deploy of
dependencies
from source
© 2021, 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
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge: QA
is now a
bottleneck to
delivery
process
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution:
Separate
integration
accounts per
team
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Create
pipeline for
each service
© 2021, 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",
)
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Challenge: Many
accounts can be
expensive
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution:
Budget
automation
© 2021, 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
© 2021, 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
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Solution: Budget automation
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Results...
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
% Efficiency = (# Engineers) / (WIP)
WIP = (Lead time) x (Deploy frequency)
Kickoff transformation
Thank you!
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Galen Dunkleberger
awsgalen@amazon.com
Casey Lee
casey@gaggle.net
Please complete
the session survey
© 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
https://onelink.to/4y9ve4
SESSION ID:
USE301

More Related Content

What's hot

마이데이터 사업자 핀다에게 듣다! - 핀테크의 AWS 활용 전략 - 이지영 AWS 솔루션즈 아키텍트 / 박홍민 대표, 핀다 :: AWS S...
마이데이터 사업자 핀다에게 듣다! - 핀테크의 AWS 활용 전략 - 이지영 AWS 솔루션즈 아키텍트 / 박홍민 대표, 핀다 :: AWS S...마이데이터 사업자 핀다에게 듣다! - 핀테크의 AWS 활용 전략 - 이지영 AWS 솔루션즈 아키텍트 / 박홍민 대표, 핀다 :: AWS S...
마이데이터 사업자 핀다에게 듣다! - 핀테크의 AWS 활용 전략 - 이지영 AWS 솔루션즈 아키텍트 / 박홍민 대표, 핀다 :: AWS S...
Amazon Web Services Korea
 
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
Amazon Web Services Korea
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon Web Services Korea
 
Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)
Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)
Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)
Amazon Web Services Korea
 
컨테이너 및 서버리스를 위한 효율적인 CI/CD 아키텍처 구성하기 - 현창훈 데브옵스 엔지니어, Flex / 송주영 데브옵스 엔지니어, W...
컨테이너 및 서버리스를 위한 효율적인 CI/CD 아키텍처 구성하기 - 현창훈 데브옵스 엔지니어, Flex / 송주영 데브옵스 엔지니어, W...컨테이너 및 서버리스를 위한 효율적인 CI/CD 아키텍처 구성하기 - 현창훈 데브옵스 엔지니어, Flex / 송주영 데브옵스 엔지니어, W...
컨테이너 및 서버리스를 위한 효율적인 CI/CD 아키텍처 구성하기 - 현창훈 데브옵스 엔지니어, Flex / 송주영 데브옵스 엔지니어, W...
Amazon Web Services Korea
 
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
Amazon Web Services Japan
 
Infrastructure Is Code with the AWS Cloud Development Kit (DEV372) - AWS re:I...
Infrastructure Is Code with the AWS Cloud Development Kit (DEV372) - AWS re:I...Infrastructure Is Code with the AWS Cloud Development Kit (DEV372) - AWS re:I...
Infrastructure Is Code with the AWS Cloud Development Kit (DEV372) - AWS re:I...
Amazon Web Services
 
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
Amazon Web Services Korea
 
Intro to Amazon ECS
Intro to Amazon ECSIntro to Amazon ECS
Intro to Amazon ECS
Amazon Web Services
 
데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...
데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...
데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...
Amazon Web Services Korea
 
AWS CDK: Your Infrastructure is Code!
AWS CDK: Your Infrastructure is Code!AWS CDK: Your Infrastructure is Code!
AWS CDK: Your Infrastructure is Code!
Wojciech Gawroński
 
20210309 AWS Black Belt Online Seminar AWS Audit Manager
20210309 AWS Black Belt Online Seminar AWS Audit Manager20210309 AWS Black Belt Online Seminar AWS Audit Manager
20210309 AWS Black Belt Online Seminar AWS Audit Manager
Amazon Web Services Japan
 
20210119 AWS Black Belt Online Seminar AWS CloudTrail
20210119 AWS Black Belt Online Seminar AWS CloudTrail20210119 AWS Black Belt Online Seminar AWS CloudTrail
20210119 AWS Black Belt Online Seminar AWS CloudTrail
Amazon Web Services Japan
 
Microservices & API Gateways
Microservices & API Gateways Microservices & API Gateways
Microservices & API Gateways
Kong Inc.
 
Programming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDKProgramming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDK
Donnie Prakoso
 
AWS CDK Introduction
AWS CDK IntroductionAWS CDK Introduction
AWS CDK Introduction
Kasun Dilunika
 
20190821 AWS Black Belt Online Seminar AWS AppSync
20190821 AWS Black Belt Online Seminar AWS AppSync20190821 AWS Black Belt Online Seminar AWS AppSync
20190821 AWS Black Belt Online Seminar AWS AppSync
Amazon Web Services Japan
 
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
Amazon Web Services Korea
 
VPC Design and New Capabilities for Amazon VPC
VPC Design and New Capabilities for Amazon VPCVPC Design and New Capabilities for Amazon VPC
VPC Design and New Capabilities for Amazon VPC
Amazon Web Services
 
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Amazon Web Services Korea
 

What's hot (20)

마이데이터 사업자 핀다에게 듣다! - 핀테크의 AWS 활용 전략 - 이지영 AWS 솔루션즈 아키텍트 / 박홍민 대표, 핀다 :: AWS S...
마이데이터 사업자 핀다에게 듣다! - 핀테크의 AWS 활용 전략 - 이지영 AWS 솔루션즈 아키텍트 / 박홍민 대표, 핀다 :: AWS S...마이데이터 사업자 핀다에게 듣다! - 핀테크의 AWS 활용 전략 - 이지영 AWS 솔루션즈 아키텍트 / 박홍민 대표, 핀다 :: AWS S...
마이데이터 사업자 핀다에게 듣다! - 핀테크의 AWS 활용 전략 - 이지영 AWS 솔루션즈 아키텍트 / 박홍민 대표, 핀다 :: AWS S...
 
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
 
Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)
Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)
Amazon ECS/ECR을 활용하여 마이크로서비스 구성하기 - 김기완 (AWS 솔루션즈아키텍트)
 
컨테이너 및 서버리스를 위한 효율적인 CI/CD 아키텍처 구성하기 - 현창훈 데브옵스 엔지니어, Flex / 송주영 데브옵스 엔지니어, W...
컨테이너 및 서버리스를 위한 효율적인 CI/CD 아키텍처 구성하기 - 현창훈 데브옵스 엔지니어, Flex / 송주영 데브옵스 엔지니어, W...컨테이너 및 서버리스를 위한 효율적인 CI/CD 아키텍처 구성하기 - 현창훈 데브옵스 엔지니어, Flex / 송주영 데브옵스 엔지니어, W...
컨테이너 및 서버리스를 위한 효율적인 CI/CD 아키텍처 구성하기 - 현창훈 데브옵스 엔지니어, Flex / 송주영 데브옵스 엔지니어, W...
 
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
 
Infrastructure Is Code with the AWS Cloud Development Kit (DEV372) - AWS re:I...
Infrastructure Is Code with the AWS Cloud Development Kit (DEV372) - AWS re:I...Infrastructure Is Code with the AWS Cloud Development Kit (DEV372) - AWS re:I...
Infrastructure Is Code with the AWS Cloud Development Kit (DEV372) - AWS re:I...
 
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
 
Intro to Amazon ECS
Intro to Amazon ECSIntro to Amazon ECS
Intro to Amazon ECS
 
데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...
데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...
데브옵스 엔지니어를 위한 신규 운영 서비스 - 김필중, AWS 개발 전문 솔루션즈 아키텍트 / 김현민, 메가존클라우드 솔루션즈 아키텍트 :...
 
AWS CDK: Your Infrastructure is Code!
AWS CDK: Your Infrastructure is Code!AWS CDK: Your Infrastructure is Code!
AWS CDK: Your Infrastructure is Code!
 
20210309 AWS Black Belt Online Seminar AWS Audit Manager
20210309 AWS Black Belt Online Seminar AWS Audit Manager20210309 AWS Black Belt Online Seminar AWS Audit Manager
20210309 AWS Black Belt Online Seminar AWS Audit Manager
 
20210119 AWS Black Belt Online Seminar AWS CloudTrail
20210119 AWS Black Belt Online Seminar AWS CloudTrail20210119 AWS Black Belt Online Seminar AWS CloudTrail
20210119 AWS Black Belt Online Seminar AWS CloudTrail
 
Microservices & API Gateways
Microservices & API Gateways Microservices & API Gateways
Microservices & API Gateways
 
Programming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDKProgramming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDK
 
AWS CDK Introduction
AWS CDK IntroductionAWS CDK Introduction
AWS CDK Introduction
 
20190821 AWS Black Belt Online Seminar AWS AppSync
20190821 AWS Black Belt Online Seminar AWS AppSync20190821 AWS Black Belt Online Seminar AWS AppSync
20190821 AWS Black Belt Online Seminar AWS AppSync
 
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
 
VPC Design and New Capabilities for Amazon VPC
VPC Design and New Capabilities for Amazon VPCVPC Design and New Capabilities for Amazon VPC
VPC Design and New Capabilities for Amazon VPC
 
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
 

Similar to AWS Summit DC 2021: Improve the developer experience with AWS CDK

From Docker Straight to AWS
From Docker Straight to AWSFrom Docker Straight to AWS
From Docker Straight to AWS
DevOps.com
 
Vue presentation
Vue presentationVue presentation
Vue presentation
Norbert Nader
 
Track 4 Session 5_ 架構即代碼 – AWS CDK 與 CDK8S 聯手打造下一代的 K8S 應用
Track 4 Session 5_ 架構即代碼 – AWS CDK 與 CDK8S 聯手打造下一代的 K8S 應用Track 4 Session 5_ 架構即代碼 – AWS CDK 與 CDK8S 聯手打造下一代的 K8S 應用
Track 4 Session 5_ 架構即代碼 – AWS CDK 與 CDK8S 聯手打造下一代的 K8S 應用Amazon Web Services
 
CI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and FargateCI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and Fargate
Amazon Web Services
 
AWS DevDay Cologne - Automating building blocks choices you will face with co...
AWS DevDay Cologne - Automating building blocks choices you will face with co...AWS DevDay Cologne - Automating building blocks choices you will face with co...
AWS DevDay Cologne - Automating building blocks choices you will face with co...
Cobus Bernard
 
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
 
20210608 - Desarrollo de aplicaciones en la nube
20210608 - Desarrollo de aplicaciones en la nube20210608 - Desarrollo de aplicaciones en la nube
20210608 - Desarrollo de aplicaciones en la nube
Marcia Villalba
 
AWS DevDay Berlin - Automating building blocks choices you will face with con...
AWS DevDay Berlin - Automating building blocks choices you will face with con...AWS DevDay Berlin - Automating building blocks choices you will face with con...
AWS DevDay Berlin - Automating building blocks choices you will face with con...
Cobus Bernard
 
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
Cobus Bernard
 
Infrastructure is code with the AWS cloud development kit
Infrastructure is code with the AWS cloud development kitInfrastructure is code with the AWS cloud development kit
Infrastructure is code with the AWS cloud development kit
AWS User Group Pune
 
AWS SSA Webinar 12 - Getting started on AWS with Containers
AWS SSA Webinar 12 - Getting started on AWS with ContainersAWS SSA Webinar 12 - Getting started on AWS with Containers
AWS SSA Webinar 12 - Getting started on AWS with Containers
Cobus Bernard
 
Getting started with Amazon ECS
Getting started with Amazon ECSGetting started with Amazon ECS
Getting started with Amazon ECS
Ioannis Polyzos
 
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_SingaporeCI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
Amazon Web Services
 
Deep Dive on Amazon Elastic Container Service (ECS) | AWS Summit Tel Aviv 2019
Deep Dive on Amazon Elastic Container Service (ECS)  | AWS Summit Tel Aviv 2019Deep Dive on Amazon Elastic Container Service (ECS)  | AWS Summit Tel Aviv 2019
Deep Dive on Amazon Elastic Container Service (ECS) | AWS Summit Tel Aviv 2019
Amazon Web Services
 
Deep Dive on Amazon Elastic Container Service (ECS) | AWS Summit Tel Aviv 2019
Deep Dive on Amazon Elastic Container Service (ECS)  | AWS Summit Tel Aviv 2019Deep Dive on Amazon Elastic Container Service (ECS)  | AWS Summit Tel Aviv 2019
Deep Dive on Amazon Elastic Container Service (ECS) | AWS Summit Tel Aviv 2019
AWS Summits
 
Frome Code to Cloud: Exploring AWS CDK for Infrastructure Management
Frome Code to Cloud: Exploring AWS CDK for Infrastructure ManagementFrome Code to Cloud: Exploring AWS CDK for Infrastructure Management
Frome Code to Cloud: Exploring AWS CDK for Infrastructure Management
Sujay Pillai
 
Deep Dive - CI/CD on AWS
Deep Dive - CI/CD on AWSDeep Dive - CI/CD on AWS
Deep Dive - CI/CD on AWS
Amazon Web Services
 
CMP209_Getting started with Docker on AWS
CMP209_Getting started with Docker on AWSCMP209_Getting started with Docker on AWS
CMP209_Getting started with Docker on AWS
Amazon Web Services
 
Continuously Deploy Your CDK Application by Petra novandi barus
Continuously  Deploy Your CDK Application by Petra novandi barusContinuously  Deploy Your CDK Application by Petra novandi barus
Continuously Deploy Your CDK Application by Petra novandi barus
DevOps Indonesia
 
Assembling an AWS CloudFormation Authoring Tool Chain (DEV368-R2) - AWS re:In...
Assembling an AWS CloudFormation Authoring Tool Chain (DEV368-R2) - AWS re:In...Assembling an AWS CloudFormation Authoring Tool Chain (DEV368-R2) - AWS re:In...
Assembling an AWS CloudFormation Authoring Tool Chain (DEV368-R2) - AWS re:In...
Amazon Web Services
 

Similar to AWS Summit DC 2021: Improve the developer experience with AWS CDK (20)

From Docker Straight to AWS
From Docker Straight to AWSFrom Docker Straight to AWS
From Docker Straight to AWS
 
Vue presentation
Vue presentationVue presentation
Vue presentation
 
Track 4 Session 5_ 架構即代碼 – AWS CDK 與 CDK8S 聯手打造下一代的 K8S 應用
Track 4 Session 5_ 架構即代碼 – AWS CDK 與 CDK8S 聯手打造下一代的 K8S 應用Track 4 Session 5_ 架構即代碼 – AWS CDK 與 CDK8S 聯手打造下一代的 K8S 應用
Track 4 Session 5_ 架構即代碼 – AWS CDK 與 CDK8S 聯手打造下一代的 K8S 應用
 
CI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and FargateCI/CD with AWS Developer Tools and Fargate
CI/CD with AWS Developer Tools and Fargate
 
AWS DevDay Cologne - Automating building blocks choices you will face with co...
AWS DevDay Cologne - Automating building blocks choices you will face with co...AWS DevDay Cologne - Automating building blocks choices you will face with co...
AWS DevDay Cologne - Automating building blocks choices you will face with co...
 
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...
 
20210608 - Desarrollo de aplicaciones en la nube
20210608 - Desarrollo de aplicaciones en la nube20210608 - Desarrollo de aplicaciones en la nube
20210608 - Desarrollo de aplicaciones en la nube
 
AWS DevDay Berlin - Automating building blocks choices you will face with con...
AWS DevDay Berlin - Automating building blocks choices you will face with con...AWS DevDay Berlin - Automating building blocks choices you will face with con...
AWS DevDay Berlin - Automating building blocks choices you will face with con...
 
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
 
Infrastructure is code with the AWS cloud development kit
Infrastructure is code with the AWS cloud development kitInfrastructure is code with the AWS cloud development kit
Infrastructure is code with the AWS cloud development kit
 
AWS SSA Webinar 12 - Getting started on AWS with Containers
AWS SSA Webinar 12 - Getting started on AWS with ContainersAWS SSA Webinar 12 - Getting started on AWS with Containers
AWS SSA Webinar 12 - Getting started on AWS with Containers
 
Getting started with Amazon ECS
Getting started with Amazon ECSGetting started with Amazon ECS
Getting started with Amazon ECS
 
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_SingaporeCI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
CI-CD with AWS Developer Tools and Fargate_AWSPSSummit_Singapore
 
Deep Dive on Amazon Elastic Container Service (ECS) | AWS Summit Tel Aviv 2019
Deep Dive on Amazon Elastic Container Service (ECS)  | AWS Summit Tel Aviv 2019Deep Dive on Amazon Elastic Container Service (ECS)  | AWS Summit Tel Aviv 2019
Deep Dive on Amazon Elastic Container Service (ECS) | AWS Summit Tel Aviv 2019
 
Deep Dive on Amazon Elastic Container Service (ECS) | AWS Summit Tel Aviv 2019
Deep Dive on Amazon Elastic Container Service (ECS)  | AWS Summit Tel Aviv 2019Deep Dive on Amazon Elastic Container Service (ECS)  | AWS Summit Tel Aviv 2019
Deep Dive on Amazon Elastic Container Service (ECS) | AWS Summit Tel Aviv 2019
 
Frome Code to Cloud: Exploring AWS CDK for Infrastructure Management
Frome Code to Cloud: Exploring AWS CDK for Infrastructure ManagementFrome Code to Cloud: Exploring AWS CDK for Infrastructure Management
Frome Code to Cloud: Exploring AWS CDK for Infrastructure Management
 
Deep Dive - CI/CD on AWS
Deep Dive - CI/CD on AWSDeep Dive - CI/CD on AWS
Deep Dive - CI/CD on AWS
 
CMP209_Getting started with Docker on AWS
CMP209_Getting started with Docker on AWSCMP209_Getting started with Docker on AWS
CMP209_Getting started with Docker on AWS
 
Continuously Deploy Your CDK Application by Petra novandi barus
Continuously  Deploy Your CDK Application by Petra novandi barusContinuously  Deploy Your CDK Application by Petra novandi barus
Continuously Deploy Your CDK Application by Petra novandi barus
 
Assembling an AWS CloudFormation Authoring Tool Chain (DEV368-R2) - AWS re:In...
Assembling an AWS CloudFormation Authoring Tool Chain (DEV368-R2) - AWS re:In...Assembling an AWS CloudFormation Authoring Tool Chain (DEV368-R2) - AWS re:In...
Assembling an AWS CloudFormation Authoring Tool Chain (DEV368-R2) - AWS re:In...
 

More from Casey Lee

2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK
Casey Lee
 
The Last Bottleneck of Continuous Delivery
The Last Bottleneck of Continuous DeliveryThe Last Bottleneck of Continuous Delivery
The Last Bottleneck of Continuous Delivery
Casey 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 3M
Casey Lee
 
AWS DOs and DONTs
AWS DOs and DONTsAWS DOs and DONTs
AWS DOs and DONTs
Casey 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 Downtime
Casey 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 Actions
Casey Lee
 
WORKSHOP: Microservices as Containers on AWS
WORKSHOP: Microservices as Containers on AWSWORKSHOP: Microservices as Containers on AWS
WORKSHOP: Microservices as Containers on AWS
Casey 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 Profit
Casey Lee
 
Serverless Delivery
Serverless DeliveryServerless Delivery
Serverless Delivery
Casey Lee
 
Top10 Characteristics of Awesome Apps
Top10 Characteristics of Awesome AppsTop10 Characteristics of Awesome Apps
Top10 Characteristics of Awesome Apps
Casey Lee
 

More from Casey Lee (11)

2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK
 
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

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 

AWS Summit DC 2021: Improve the developer experience with AWS CDK

  • 1. S E P T E M B E R 2 8 - 2 9 , 2 0 2 1
  • 2. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Improve the developer experience with AWS CDK Galen Dunkleberger U S E 3 0 1 Solutions Architect AWS Casey Lee Chief Technology Officer Gaggle
  • 3. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Agenda • AWS CDK overview • How CDK improves the developer experience on AWS • Gaggle’s use of CDK
  • 4. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS CDK
  • 5. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Evolution of provisioning cloud infrastructure Manual Scripted .SH CloudFormation HashiCorp Terraform Declarative AWS CDK Imperative GoFormation Troposphere Generators
  • 6. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS CDK COMING SOON! new s3.Bucket(this, "my-bucket", { bucketName: “my-bucket” }) mybucket: Type: AWS::S3::Bucket Properties: BucketName: my-bucket Write code Not yaml/json CloudFormation
  • 7. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Benefits of CDK Your language Just classes and methods Autocomplete Inline documentation Sane defaults Reusable classes
  • 8. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. CDK components App Stacks Resources Core framework AWS CDK CLI AWS Construct Library Serverless Containers CI/CD App Integration / Foundational Services
  • 9. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Workflow > cdk init Generate project > npm run build Build project > cdk synth Create templates and assets > cdk diff Check what will change > cdk deploy Push changes to the cloud
  • 10. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Construct Library Serverless Application Integration / Foundational Services Containers CI/CD
  • 11. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Constructs levels CloudFormation resources L1 Purpose-built constructs L3+ AWS constructs L2
  • 12. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Paradigm shift Stack A Stack B CDK Typed OO language: loops, conditions, inheritence, etc CDK App Source Code Template A Template B CloudFormation CloudFormation Parameters and intrinsic functions Parameterized template Stack 1 CloudFormation Stack 2
  • 13. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. How CDK improves the developer experience on AWS
  • 14. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: “Where do I put my infrastructure as code?”
  • 15. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Infrastructure and application code, together
  • 16. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Simplified deployment const f1 = new NodejsFunction(this, "say-hello-function", { memorySize: 256, timeout: cdk.Duration.seconds(5), runtime: lambda.Runtime.NODEJS_14_X, handler: "index.lambdaHandler", entry: path.join(__dirname, `/../runtime/lambda.ts`), }) Assets bucket say-hello-function "Code": { "S3Bucket": "cdk-hnb659fds-assets", "S3Key": “uuid1c18c5dc.zip" } > cdk deploy
  • 17. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: “I don’t know what IAM policy I need to make this work…” { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
  • 18. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Use grant methods to manage roles
  • 19. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Minimal code, minimal permissions const myBucket = new s3.Bucket(this, "my-bucket” ) myBucket.grantRead(myRole) mybucketroleDefaultPolicy7E8479F3: Type: AWS::IAM::Policy Properties: PolicyDocument: Statement: - Action: - s3:GetObject* - s3:GetBucket* - s3:List* Effect: Allow Resource: - Fn::GetAtt: - mybucket15D133BF - Arn - Fn::Join: - "" - - Fn::GetAtt: - mybucket15D133BF - Arn - /* Roles: - Ref: myroleBCC9F6EE cdk synth cdk deploy
  • 20. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: “I hope this change doesn’t break anything.”
  • 21. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Refactor with confidence Snapshot tests Fine-grained assertions Validation tests
  • 22. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Snapshot tests test("Test snapshot", () => { const app = new cdk.App(); const stack = new MyTestStack(app, "MyTestStack"); expect(Template.fromStack(stack).toJSON()).toMatchSnapshot(); }); npm run build && npm test npm run test -- -u
  • 23. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Fine-grained assertions test('Test fine-grained assertions', () => { const app = new cdk.App(); const stack = new MyTestStack(app, "MyTestStack") expect(stack).toHaveResource('AWS::SSM::Parameter', { Tier: "Standard", Name: "/dc-summit/component02/parameter", Type : "String" }); });
  • 24. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Validation tests export interface DeadLetterQueueProps { retentionDays?: number; } constructor(scope: cdk.Construct, id: string, props: DeadLetterQueueProps = {}) { if (props.retentionDays !== undefined && props.retentionDays > 14) { throw new Error('retentionDays may not exceed 14 days'); } expect(() => { new DeadLetterQueue(stack, 'DLQ', { retentionDays: 15 }); }).toThrowError(/retentionDays may not exceed 14 days/)
  • 25. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: “We’ll add monitoring next sprint…”
  • 26. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Use metric methods to add monitoring
  • 27. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Easily measure what you need
  • 28. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: “We tag our resources, sometimes…”
  • 29. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Tagging made easy
  • 30. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Use aspects to enforce standards public visit(node: IConstruct): void { if ("tags" in node) { const tagManager: TagManager = node["tags"]; const tags: Record<string, string> = tagManager.tagValues(); if (!("CostCenter" in tags)) { Annotations.of(node).addError( "All taggable resources must include a 'CostCenter' tag" ); } } cdk.Tags.of(myStack).add("Costcenter", "MyCostCenter"); Aspects.of(myStack).add(new TagEnforcer()); TagEnforcer.ts [Error at /Stack/A/B/FileRole/Resource] All taggable resources must include a 'CostCenter' tag cdk synth
  • 31. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Adhere to best practices with cdk-nag https://github.com/cdklabs/cdk-nag Aspects.of(app).add(new AwsSolutionsChecks()); cdk synth
  • 32. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: “How can I share my infrastructure as code?”
  • 33. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Model constructs, not stacks Units of deployment, typically not reusable Cloud components, potentially reusable
  • 34. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Code organization Component Construct library or Depends on zero or more Team Code repository Owns one or more Package Contains one or more CDK APP Consist of CodeArtifact Shared via
  • 35. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Leverage pre-built constructs https://constructs.dev/
  • 36. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. CDK Pipelines
  • 37. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: “Did you just delete my stack?”
  • 38. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Account structure
  • 39. © 2021, 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%
  • 40. © 2021, 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!”
  • 41. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. % Efficiency = (# Engineers) / (WIP) WIP = (Lead time) x (Deploy frequency) High WIP, low efficiency
  • 42. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: Inability to work in isolation results in long feedback loops
  • 43. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Provision separate AWS accounts per developer
  • 44. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: Unable to use existing CI/CD to deploy into dev account
  • 45. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Use CDK for each application
  • 46. © 2021, 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, } )
  • 47. © 2021, 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)
  • 48. © 2021, 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)
  • 49. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: Deploying dependencies
  • 50. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Automate build/deploy of dependencies from source
  • 51. © 2021, 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
  • 52. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: QA is now a bottleneck to delivery process
  • 53. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Separate integration accounts per team
  • 54. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Create pipeline for each service
  • 55. © 2021, 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", )
  • 56. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Challenge: Many accounts can be expensive
  • 57. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Budget automation
  • 58. © 2021, 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
  • 59. © 2021, 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
  • 60. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
  • 61. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Solution: Budget automation
  • 62. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Results...
  • 63. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
  • 64. © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. % Efficiency = (# Engineers) / (WIP) WIP = (Lead time) x (Deploy frequency) Kickoff transformation
  • 65. Thank you! © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. Galen Dunkleberger awsgalen@amazon.com Casey Lee casey@gaggle.net
  • 66. Please complete the session survey © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved. https://onelink.to/4y9ve4 SESSION ID: USE301