[aws] AWS CDK 실습(1) - 프로젝트 구조, CDK CLI, 작동 원리 포함

2022. 5. 27. 16:27✅ STUDY/AWS

안녕하세요 :)

오늘은 AWS CDK 프로젝트 구조, CDK CLI, 작동 원리를 알아보고
CDK를 사용해 간단한 인프라를 배포해보겠습니다.

이 글을 보기 전에 이전 글을 참고 하면 더욱 이해가 쉽습니다 !

 

[AWS] AWS를 제어하는 방법

안녕하세요 :) 오늘은 AWS를 제어하는 4가지 방법에 대해 간단히 설명드리려 합니다. AWS를 제어하는 방법 AWS를 제어하는 방법에 대해 아시나요? 아래의 그림과 같이, 4가지의 방법으로 AWS를 제어

minjii-ya.tistory.com


AWS CDK란?

AWS 클라우드 개발 키트(CDK)는 대적 프로그래밍 언어를 사용하여 클라우드 인프라를 코드로 정의하고 AWS CloudFormation을 통해 배포하는 오픈 소스 소프트웨어 개발 프레임워크 입니다.

 

AWS CDK 작동 원리

AWS CDK를 사용해 프로젝트를 만듭니다. ->  CDK CLI(cdk synth)를 통해 CloudFormation Template으로 변환이 됩니다. -> 변환된 CloudFormation Template를 토대로 CDK CLI(cdk deploy)를 통해 AWS CloudFormation이 AWS에 정의된 인프라를 프로비저닝 합니다.

AWS CDK CLI(AWS CDK Toolkit)

  • cdk init : 지정된 템플릿에서 현재 디렉터리에 새 CDK 프로젝트를 만듭니다.
  • cdk list : 현재 프로젝트에 정의되어 있는 모든 스택을 나열합니다.
  • cdk synth : 코드(Typescript, Python, Java 등)로 개발된 스택을 CloudFormation Template로 변환합니다.
  • cdk bootstrap : CDK Tookit 스테이징 스택을 배포합니다.
  • cdk deploy : 지정된 스택을 배포 합니다.
  • cdk destroy : 배포된 스택을 삭제합니다.
  • cdk diff : 지정된 스택을 배포된 스택 또는 로컬 CloudFormation 템플릿과 비교하여 차이가 있는 부분을 Terminal에 출력합니다.
  • cdk metadata : 지정된 스택에 대한 메타데이터를 표시합니다.

 

AWS CDK 워크샵

아래 실습 자료를 토대로 진행하겠습니다.

 

cdkworkshop.com

Welcome Developers! Hey there, and thanks for joining us! Hope you can’t wait to play with this new thing we call the “AWS Cloud Development Kit” or in short, the AWS CDK. The AWS CDK is a new software development framework from AWS with the sole pur

cdkworkshop.com


[전제 조건]
타입스크립트용 CDK를 배포하기 위해서 아래의 것들이 미리 설치되어 있어야 합니다.

-> 저는 AWS Cloud9 통합개발환경을 사용하였고, 아래와 같이 node.js, npm, cdk, aws cli가 설치되어 있음을 확인할 수 있습니다.
또한, cloud9을 사용하였기 때문에 AWS 계정에 접근할 수 있는 권한이 이미 부여되어 있습니다.


CDK 프로젝트 만들기

cdk-workshop 폴더를 만든 후에, 해당 폴더 내부에 cdk 프로젝트를 만들겠습니다.

mkdir cdk-workshop && cd cdk-workshop
cdk init sample-app --language typescript

 

[프로젝트 구조]


bin/cdk-workshop.ts
: CDK 애플리케이션의 진입점입니다. lib/cdk-workshop-stack.ts에 정의된 스택을 로드합니다.
-> cdk App을 생성하고, 해당 앱에 CdkWorkshopStack을 생성합니다.

lib/cdk-workshop-stack.ts : CDK 애플리케이션의 메인 스택이 정의되는 곳입니다. 실제 배포할 리소스를 정의하고 관리하는 가장 중요한 파일입니다. ✨
-> workshop sample code에서는, 아래의 리소스를 생성하고 있습니다.

  • SQS 대기열(new sqs.Queue)
  • SNS 주제(new sns.Topic)
  • 큐를 구독하여 주제에 게시된 모든 메시지(topic.addSubscription)

package.json : npm 모듈 매니페스트입니다. 여기에는 앱 이름, 버전, 종속성 및 "watch" 및 "build"와 같은 빌드 스크립트와 같은 정보가 포함됩니다. (package-lock.json은 npm에서 유지 관리됨)

node_modules : npm에 의해 유지 관리되며 프로젝트의 모든 종속성을 포함합니다.

cdk.json : 툴킷(CDK CLI)에 앱을 실행하는 방법을 알려줍니다. 우리의 경우 "npx ts-node bin/cdk-workshop.ts"가 됩니다.


tsconfig.json : 프로젝트의 typescript 구성


.gitignore / .npmignore : 소스 제어에서 제외할 파일과 이 모듈을 패키지 관리자에 게시할 때 git 및 npm에 알려줍니다.

 
[컴파일]

새로운 터미널을 띄워, 컴파일을 자동으로 할 수 있도록 해줍니다.

cd cdk-workshop
npm run watch

npm run watch란, package.json에 정의되어 있는 tsc -w를 실행하는 것과 같은 의미입니다.

 

CDK 프로젝트 배포

이제 해당 sample code를 AWS에 배포해봅시다.

[합성(synth)]
CDK는 코드로 인프라를 정의하는 것일 뿐, 실제 AWS에 인프라를 배포하기 위해서는 CloudFormation이 인식할 수 있는 Template으로 변경을 해줘야 합니다.
cdk synth 명령어를 터미널에 입력하면, 아래와 같이 cdk.out 폴더가 생기며 코드로 작성한 것이 CloudFormation이 인식할 수 있는 Template으로 변경이 됩니다!

cdk synth


[부트스트랩(bootstrap)]

한 계정의 특정 리전에 CDK 프로젝트를 처음 배포하신다면, 아래의 명령어를 이용해 "bootstrapping"을 해야 합니다❗

AWS CDK 앱을 AWS 환경 (AWS 계정 및 리전의 조합)에 배포하려면 AWS CDK가 배포를 수행하는 데 필요한 리소스를 프로비저닝해야 할 수 있습니다. 이러한 리소스에는 파일을 저장하기 위한 Amazon S3 버킷과 배포를 수행하는 데 필요한 권한을 부여하는 IAM 역할이 포함됩니다. 이러한 초기 리소스를 프로비저닝하는 프로세스를 부트스트랩 이라고 합니다.

cdk bootstrap ACCOUNT-NUMBER/REGION

 

[배포(deploy)]

부트스트랩까지 완료하셨다면, 실제 AWS 계정에 배포해봅시다❗

cdk deploy

cdk deploy를 터미널에 입력하시고,
Do you wish to deploy these changes (y/n)? 이 나오면 y를 입력하고 엔터를 쳐주세요.

 

결과 확인

AWS Console > CloudFormation에서 결과를 확인하실 수 있습니다.
파일에 정의되었던 CdkWorkshopStack이 생성되어, CREATE_COMPLETE 상태가 되었습니다!


실제 해당 스택에서 SQS, SNS Topic, SNS Topic에 SQS를 Subscription한 것을 확인할 수 있습니다.

 


AWS CDK를 실제로 실습해보면서 알아보았습니다.🎈
조금 감이 오시나요?
실제로 만들고 싶은 아키텍처를 정하고, 해당 인프라를 CDK로 만들어보면 더욱 더 감이 잡히실 거라고 생각합니다 😀

다음 시간에는, 위의 sample code로 배포한 CdkWorkshopStack의 리소스를 변경해 UPDATE 해보도록 하겠습니다!


참고) https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html 

 

Bootstrapping - AWS Cloud Development Kit (CDK) v2

The modern bootstrap template effectively grants the permissions implied by the --cloudformation-execution-policies to any AWS account in the --trust list, which by default will extend permissions to read and write to any resource in the bootstrapped accou

docs.aws.amazon.com