AWS Cloud Development Kit (CDK)
- 자바 스크립트, 파이썬, 자바 등 익숙한 언어를 사용하여 클라우드 인프라를 정의할 수 있다.
- Cloud Fromation과 비슷하다고 생각할 수 있다.
- Cloud Formation은 Yaml을 이용해서 클라우드 인프라를 정의하기 때문이다.
- 하지만 CDK는 프로그래밍 언어를 사용한다는 것에서 큰 차이점이 있다.
- 고수준의 컴포넌트를 생성자를 통해서 생성할 수 있다.

- 이렇게 만든 코드에 문제가 없다면 코드가 컴파일 되어 Cloud Formation 템플릿이 된다.
- 즉 CDK를 활용해서 Cloud Formation 템플릿을 만드는 서비스란 것이다.
- 기존 YAML로 작성하던 템플릿을 익숙한 언어로 더 쉽게 생성하는 차이점이 있다.
- 이는 인프라와 애플리케이션 런타임 코드를 함께 배포할 수 있다는 말도 된다.
- 따라서 람다함수나, ECS, EKS의 도커 컨테이너에 사용하면 좋다.


SAM을 활용해서 CDK를 로컬에서 테스트 해보기

- 다음과 같은 방식으로 CDK를 통해 CloudFormation 템플릿을 만들면 이후
SAM CLI를 활용하여 sam local invoke를 통해 로컬에서 함수를 호출할 수 있다.
CDK - Constructs
- cdk가 최종 CloudFormation 스택을 생성하는 데 필요한 모든 것을 담아놓은 생성자다.
- S3같은 단일 리소스 뿐만 아니라, 여러 리소스를 합쳐놓은 리소스도 지원한다.
- CDK 생성자는 어떻게 사용할까?
- Construct Library에 CDK의 모든 생성자가 모여있다.
- 생성자는 계층 1, 계층 2, 계층 3으로 총 세 가지 계층이 존재한다고 한다.
- Construct Hub
- AWS만이 아니라 서드파티나 오픈 소스의 생성자도 지원을 한다.
CDK Constructs - Layer 1 Constructs
- CFN 리소스라고 부른다.
- Cloud Formation 내의 사용 가능한 모든 리소스를 이 계층에서 표현하기 때문이다.

- 생성자의 이름은 CFN으로 시작한다.
- CfnBucket은 버킷을 생성하는데 필요한 모든 프로퍼티를 가지고 있어야 한다.
CDK Constructs - Layer 2 Constructs
- 더 높은 수준의 리소스를 의미한다고 한다.

- 이 예시를 보면 알겠지만 생성자에 CFN이 없다.
- encryption과 같은 보안 요소 설정이 추가됐고, 객체의 URL을 알아내는 메서드도 포함됐다.
- bucket.addLifeCycleRule()과 같은 메서드로 버킷의 생명 주기를 관리할 수도 있다.
CDK Constructs - Layer 3 Constructs
- 관련된 여러 리소스를 나타내는 방식으로 패턴이라고도 불린다.

- 람다 REST API를 생성하는 예시다.
- API Gateway로 RestAPI 생성하기 등의 작업을 수행하는 데 사용된다.
CDK - Important Commands to know

- cdk init: 특정 언어에 맞춰 cdk를 초기화 하기 위함
- cdk synth: cloud formation 템플릿을 합성하고 출력한다.
CDK - Bootstrapping
- CDK 앱을 AWS 환경에 배포할 수 있게 미리 CDK에 맞추어 리소스를 프로비저닝하는 과정이다.
- 한 리전의 계정에 배포할 수 있게 미리 CDKToolkit이라는 CloudFormation 스택을 배포해야한다.
- 이 스택에는 S3 버킷과 IAM 역할이 들어있게 된다.
- 그러니까 쉽게 말하면 특정 리소스를 배포하기 위해 반드시 필요한 정보를 입력해두는 것이다.

명령어를 실행하면 아래와 같이 생성된다.

- 부트스트래핑 설정을 미리 해놓지 않는다면 CDK를 배포하려할 때
정책에 유효하지 않은 Principal이 포함된 Statement가 포함돼있다는 오류가 발생한다고 한다.
CDK - Testing
- CDK Assertions Module을 사용해서 특정 리소스의 role이나 상태, 변수 등을 테스트 할 수 있다.

템플릿은 어떻게 테스트 할까?
- Template.fromSatck(MyStack)
- cdk에서 정의한 스택을 실제로 가져온다. 이후 위의 함수 파라미터에 집어넣는다.
- Template.fromString(MyString)
- 템플릿이 CDK에 아직 없을 경우 사용한다.
- String은 파일이고, 스택은 CDK 외부에 만들어진다.
- CloudFormation 기준으로 템플릿이 CDK 외부에 있어도, 테스트를 진행할 수 있는 방법인 것이다.
'AWS' 카테고리의 다른 글
| [AWS] aws 강의 섹션 28 (Step Function, AppSync, Amplify) (4) | 2024.12.05 |
|---|---|
| [AWS] aws 강의 섹션 27 (Cognito User Pools, Cognito Identity Pools) (0) | 2024.12.04 |
| [AWS] aws 강의 섹션 25 (AWS SAM) (0) | 2024.11.28 |
| [AWS] aws 강의 섹션 24 - 2 (Code Deploy, Code Star, Code Artifact, code Guru) (1) | 2024.11.27 |
| [AWS] aws 강의 섹션 24 - 1 (CI/CD, Code Commit, Code Build, Code Deploy) (1) | 2024.11.20 |