Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- rds
- 백엔드
- Spring Boot
- jpa
- kakao
- CodeCommit
- codedeploy
- Redis
- s3
- backenddeveloper
- MSA
- 자격증
- serverless
- ec2
- 티스토리챌린지
- aws
- 오블완
- sqs
- mapping
- spring
- Docker
- 스터디
- goorm
- CICD
- backend
- QueryDSL
- orm
- codebuild
- DynamoDB
- 개발자
Archives
- Today
- Total
gony-dev 님의 블로그
Section 26. Cloud Development Kit(CDK) 본문
CDK Basic
CDK는 프로그래밍 언어를 사용하여 클라우드 인프라를 정의한다.
얼핏 CloudFormation과 비슷할 수 있지만 언어를 사용하여 정의한다는 것에 큰 차이를 둔다. 즉 상향이라는 것이다.
- 코드는 cloudFormation 템플릿에 컴파일되며, 이를 통해 유연성이 높아지고 프로그래밍 언어를 사용할 수 있다.
- 이렇게 하면 인프라와 어플리케이션 런타임 코드를 함께 배포할 수가 있게 된다.
- 람다 함수
- ECS/EKS의 도커 컨테이너에 사용하면 좋다.
CDK in a Diagram
- CDK CLI로 합성하여 CloudFormation으로 만들 수 있다.
CDK vs. SAM
- SAM
- 서버리스에 중점을 두고 있다.
- 템플릿을 JSON이나 YAML 형식에 작성한다.
- 람다를 사용해서 빠르게 시작할 수 있다.
- CloudFormation을 사용하지만 SAM의 초점은 람다 함수와 서버리스 어플리케이션이라는 것이다.
- CDK
- CloudFormation의 상위 호환이다.
- 모든 AWS 서비스를 지원하며, 익숙한 프로그래밍 언어를 사용해서 인프라를 작성할 수 있다.
- CloudFormation을 생성하기 위해 CloudFormation을 활용한다.
CDK + SAM
- 이 둘을 우리는 조합하여 CDK 앱을 로컬에서 테스트할 수 있다.
- 그러기 위해서는 "cdk synth"가 필요하다.
CDK Hands-On
- 아래의 과정을 실습해보면 CDK의 작동 방식을 더 잘 이해할 수 있다.
CDK 실습
# 1. initialize the application
cdk init app --language javascript
# verify it works correctly
cdk ls
# 2. copy the content of cdk-app-stack.js into lib/
cdk-app-stack.js
# 3. setup the Lambda function
mkdir lambda && cd lambda
touch index.py
# 4. bootstrap the CDK application
cdk bootstrap
# 5. (Optional) synthesize as a CloudFormation template
cdk synth
# 6. deploy the CDK stacj
cdk deploy
# 7. empty the s3 bucket
# 8. destroy the stack
cdk destroy
CDK 구조
- CDK가 최종 CloudFormation 스택을 생성하는데 필요한 모든 것들을 담아놓은 구성 요소이다.
- 구조는 S3 버킷 같은 단일 AWS 리소스일 수도 있고, 여러 관련 리소스를 합쳐 놓은 리소스일 수도 있다.
- AWS Construct Library
- CDK에 포함되어 있는 구조를 모두 모아놓은 곳으로 AWS 리소스에 필요한 구조들이 들어있다.
- 구조는 3가지 계층으로 나뉘다.
- Construct Hub
- AWS 뿐만 아니라 third party나 오픈 소스 커뮤니티의 구조도 있는 경우 CDK 스택을 더 빠르고 잘 생성할 수 있다.
Layer 1 Constructs (L1)
- CFN 리소스라고도 불리며, CloudFormation 내의 사용 가능한 모든 리소스를 표현할 수 있다.
- CloudFormation Resource Specification으로부터 주기적으로 생성된 구조이다.
- 구조체 이름은 Cfn으로 시작되며, 반드시 모든 리소스 프로퍼티를 명시적으로 구성해야만 한다.
Layer 2 Constructs (L2)
- AWS 리소스이지만 고수준의 리소스이다.
- L1 같이 유사한 작동을 하지만 기본값과 보일러플레이트가 생겨 리소스 프로퍼티에 관해 전부 알 필요는 없다.
Layer 3 Constructs (L3)
- 패턴이라고도 불리는데, 이는 여러 관련 리소스들을 표현하기 때문이다.
- AWS에서 가장 흔한 작업을 완료할 수 있게 도와준다.
- aws-apigateway.LambdaRestApi로 람다 함수를 API 게이트웨이로 나타내기도 하거나,
aws-ecs-patterns.ApplicationLoadBalancerFargateService로 ALB를 가진 Fargate cluster를 포함하는 아키텍쳐를 나타내기도 한다.
- aws-apigateway.LambdaRestApi로 람다 함수를 API 게이트웨이로 나타내기도 하거나,
- CDK로는 빈 칸만 채우면 자동으로 ALB가 생성되고 Fargate 서비스를 올바르게 연결해준다.
CDK - Important Commands to know
- 여기 CDK CLI에서 사용하는 라이브러리들이 있으므로 한번씩 보도록 하자!
CDK - Bootstrapping
- 부트스트래핑은 CDK 앱을 AWS 환경에 배포할 수 있게 미리 CDK에 맞게 리소스를 프로비저닝하는 과정이다.
- AWS에서 환경은 계정과 리전을 결합한 형태를 말하며, 한 리전의 계정에 배포할 수 있게 그 전에 미리 CDKToolkit라는 CloudFormation 스택을 배포해야만 한다.(여기에는 S3와 IAM 역할이 들어있다.)
- 각각의 새로운 환경을 생성하기 위해서는 다음과 같은 명령어가 있어야한다.
"cdk bootstrap aws://<aws_account>/<aws_region>"
CDK - Testing
- CDK로 코드를 사용하고 있기에 정상적인 표준 python 코드나 javascript 등을 테스트할 수 있다.
- CDK 앱에는 CDK Assertions Module이라는 테스트 프레임워크가 들어있다.
- 이 모듈을 사용하여 필요한 특정 리소스나 역할, 조건 등이 있는지 확인할 수 있다.
- CDK에는 두 가지 유형이 존재한다.
- Fine-grained Assertion | 특정 리소스가 특정 프로퍼티를 갖추고 있는지 테스트한다.
- Snapshot Tests | 이전에 저장된 기본 템플릿을 기준으로 CloudFormation 템플릿을 테스트한다.
- 템플릿을 테스트 하는 데에는 두 가지 옵션이 있다.
- Template.fromStack(MyStack) | CDK에서 정의한 스택을 실제로 가져온다.
- Template.fromString(MyString) | 템플릿이 CDK에 아직 없을 경우에 입력하여 가져올 수 있다.
'AWS' 카테고리의 다른 글
Section 28. AWS Step Functions 및 AppSync (0) | 2024.12.10 |
---|---|
Section 27. Cognito: Cognito 사용자 풀, Cognito 자격 증명 풀 및 Cognito Sync (0) | 2024.12.05 |
Section 25. AWS Serverless: SAM - Serverless Application Model (0) | 2024.11.28 |
Section 24. AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy - 2 (0) | 2024.11.27 |
Section 24. AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy - 1 (1) | 2024.11.21 |