AWS Cloud Development Kit(CDK)
: JavaScript/TypeScript Python, Java 및 .NET 등의 친숙한 프로그래밍 언어를 이용해서 클라우드 인프라를 정의하도록 해주는 키트
- constructs라고 불리는 높은 수준의 구성요소를 가지고 있다.
- 인프라와 애플리케이션 런타임 코드를 함께 배포할 수 있다.
CDK vs SAM
CDK Constructs
: CDK가 최종 CloudFormation 스택을 생성하는 데 필요한 모든 것들을 담아놓은 구성 요소
AWS Construct Library
: CDK에 포함되어 있는 컨스트럭트를 모아놓은 곳
Construct Hub
: AWS만이 아니라 서드파티나 오픈 소스 커뮤니티의 컨스트럭트도 있는 경우 CDK 스택을 더 빠르게, 더 잘 생성할 수 있다.
Layer 1 Constructs(L1)
: CloudFormation 내의 사용 가능한 모든 리소스를 표현하기 때문에 CFN 리소스라고도 한다.
- bucket을 선언하고 새 S3 버킷을 생성할 때 CloudFormation Resource Specification의 속성과 똑같은 프로퍼티를 정의한다.
- CfnBucket은 버켓에 필요한 모든 리소스 프로퍼티를 가지고 있어야 한다.
Layer 2 Constructs(L2)
: 더 높은 수준의 AWS 리소스
- bucket.addLifeCycleRule()과 같은 메서드로 수명주기 규칙을 추가할 수 있다.
Layer 3 Constructs(L3)
: 여러 관련 리소스를 나타내기 때문에 패턴이라고 한다.
- aws-apigateway.LambdaRestApi
- aws-ecs-patterns.ApplicationLoadBalancerFargateService
Important Commands to know
- npm install -g aws-cdk-lib: CDK CLI와 라이브러리를 설치하는 명령어
- cdk init app: 앱을 특정 템플릿에서 초기화
- cdk synth: CloudFormation 템플릿을 합성하고 출력
- cdk bootstrap
- cdk deploy: 스택을 배포
- cdk diff: 배포된 스택의 차이를 본다.
- cdk destroy: 스택 삭제
Bootstrapping
: CDK 앱을 AWS 환경에 배포할 수 있게 미리 CDK에 맞게 리소스를 프로비저닝하는 과정
- AWS Environment = account & region
- 한 리전의 계정에 배포할 수 있게 그 전에 미리 CDKToolkit이라는 CloudFormation 스택을 배포해야 한다. 이 스택에는 S3 Bucket과 IAM Roles이 들어있게 된다.
- 새 환경에 배포할 때는 cdk bootstrap aws://<aws_account>/<aws_region> 을 입력한다.
- 환경에 부트스트래핑을 하지 않았다면 CDK 스택을 배포하려고 시도할 때 “정책에 유효하지 않은 Principal이 하나 이상 포함된 Statement가 들어 있습니다”라는 오류가 발생한다.
Testing
- CDK 앱에는 CDK Assertion Module이라는 게 있는데 이것을 이용해 필요한 특정 리소스나 역할, 조건, 파라미터 등이 있는지 확인할 수 있다.
Fine-grained Assertions(common)
Snapshot Tests
To import a Template
Template.fromStack(MyStack)
: CDK에서 정의한 스택을 실제로 가져오기 한다.
Template.fromString(MyString)
: 템플릿이 CDK에 아직 없을 경우 가져오기 한다.