cdk - basics with typescript

tags: cdk aws infrastructure-as-code

안녕, AWS CDK?

안녕하세요, 김재욱입니다. 오늘의 주제는 AWS의 또 다른 리소스 프로비저닝 툴인 CDK의 기본적인 프로젝트 셋업과 커맨드에 대해 알아 볼 예정입니다.

이번 글에서는 타입스크립트를 활용한 프로젝트를 만들 예정입니다.

Sample_Project Setup

샘플 프로젝트를 만들어 볼 에정이니, 해당 폴더와 필요한 앱 설정 해주도록 하겠습니다. 이 섹션을 완료하시면, 기본 프로젝트 트리와 스트럭쳐가 만들어져 좋은 시작포인트까지 오신것입니다.

mkdir sample_project # 폴더만들기
n 20 # nodejs 설치*
npx aws-cdk init --language typescript # cdk boilerplate 만들기

Sample_Project

npx aws-cdk init --language typescript 커맨드 실행뒤 생기는 폴더들과 파일들이 cdk 프로젝트의 기본이 쓰여질수있는 상태로 만들어집니다. 여타 다른 타입스크립트 프로젝트들과 크게 다르지 않으며, package.jsontsconfig.json 그리고 cdk.json을 주축으로 프로젝트가 정의 됩니다.

또한, 일반적인 리소스 추가는, lib 폴더 속, sample_project-stack.ts 파일, SampleProjectStack 클래스 안에 추가를 하면, 해당 클라우드포메이션 스택에 리소스 추가 형식으로 만들어지게 됩니다. 가령, vpc 리소스를 추가를 원한다면, cdk.aws_ec2.Vpc 리소스를 추가하여 만들수 있게 됩니다. CDK 사용 가능한 리소스들은 AWS 문서에 자세히 기술되어 있습니다.

Sample_Project와 실질적인 cdk 코드 사용법에 대해선, 차차 다른 코드체인지들과 함께 돌아오도록 하겠습니다.

CDK CLI

AWS CDK에는 다양한 CLI 커맨드가 존재합니다. 이번 섹션에서는, 앞으로 자주 사용하게될 synth, deploy, 그리고 diff에 대해 알아보겠습니다.

자세한 사항에 대해선 AWS 문서를 참조 바랍니다.

Synth

(npm run) cdk synth (발음: 씬쓰)는 모든 cdk 과정들중 필수적으로 거치는단계인데, 이 과정중에 코드 빌드 과정이 포함되어 있습니다. cdk 빌드는 코드 작성중에 사용한 변수들, 사용한 범주, 만들고 사용한 참조를 실제 값으로 변환하는 과정 포함하여 클라우드포메이션에서 인식가능한 JSON으로 변환을 시켜주는 과정을 말합니다. 이 과정 끝에 나온 JSON은 프로젝트 루트에 cdk.out 폴더로 나오게 됩니다.

Deploy

(npm run) cdk deploy (발음: 디플로이)는 synth에서 컴파일된 JSON파일을 실 AWS 환경에 배포를 담당하는 커맨드입니다. 자연스럽게 이 커맨드 전에 synth과정은 필수이고, 디플로이 커맨드 안에 포함되어져 실행됩니다.

Diff

(npm run) cdk diff (발음: 디프)는 현재 코드와, 배포가 되어진 스택에 한해서 차이점을 비교하여 터미널에 보여줍니다. 이 커맨드 역시, 컴파일 된 현재 상태가 필요로 하기때문에 synth과정이 포함되어져 있으며 현재 AWS에 배포되어있는 상태와 비교를 합니다. 추가로, 이 과정은 현재 배포 되어져 있는 상태, 말 그대로 배포가 되어져있는 스택의 클라우드포매이션과, 컴파일 된 클라우드포메이션을 비교하는 과정입니다. 혹시 수동으로 AWS에서 설정을 바꾼 리소스는, 당연하게, 트랙되지 않습니다.

Note

*다른 여러 방법으로 nodejs를 설치하기

오늘도, 끝까지 읽어주셔서 감사합니다. 질문은 이메일, 링크드인 메시지, 깃헙이슈로 열어주시면, 아는 한도내에서 답 해드리겠습니다!

오늘도 좋은 하루 되세요!

Written by Jae Wook Kim
Written on December 20, 2023
Last modified on December 23, 2023