는 사수님의 과제 때문이다.
사수님께서 이 과제를 내주신 이유는 내가 Terraform과 AWS CDK에 대한 질문을 해서...ㅎ 사수님께서 도태되지 않으려면 늘 공부해야한다고 말씀하셨다. 나 또한 배우는 것에 열정이 있고, 늘 배우고 싶었기에 사수님의 과제는 어떻게든 해내려고 했다.
지금 회사로 이직한 이유도 '지금 나의 사수님께 많이 배우고 싶어서' 이다. 나의 성장에 많은 도움을 주신. 길라잡이를 해주신 정말 감사한 분이다.
AWS Cloud Development Kit의 줄임말로 'AWS 클라우드 개발 키트' 다.
다시말해 CDK는 코드로 AWS 클라우드 인프라를 정의하고 AWS CloudFormation을 통해 프로비저닝하기 위한 프레임워크이다. 개발자는 프로그래밍 언어를 이용하여 클라우드 인프라를 코드로 정의 할 수 있다. 현재 AWS CDK 는 TypeScript, JavaScript, Python, Java, C#/.Net, Go
언어를 지원하고 있다.
1). TypeScript 설치
npm -g install typescript
2). TypeScript Version 확인
tsc -v
버전이 확인되어야 제대로 설치된 것임.
3). AWS CDK 설치
npm install -g aws-cdk
4). AWS CDK Version 확인
cdk --version
5). CDK 실습을 위한 폴더 생성
mkdir level_00 && cd level_00
6). CDK 초기 레포 세팅
나는 typescript로 진행할 예정이므로 --language typescript
로 지정했다.
cdk init --language typescript
All done! 이라는 문구가 나오면 초기세팅 완료✨
folder 이름이 곧 project 이름이 된다.
level_00
폴더 안에서 CDK 초기 레포 세팅을 했기 때문에, 생성된 파일 이름들이 level_00 이라는 이름으로 생성 되었다.
아래와 같이 파일들이 생성되었다.
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { aws_s3 as s3 } from 'aws-cdk-lib';
export class Level00Stack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// S3 bucket 생성
new s3.Bucket(this, 'aws-s3-sandbox-cdktemp-dev', {
versioned: true
})
}
}
$ npm run build
> level_00@0.1.0 build
> tsc
package.json
파일에 의하면, npm run build = tsc 이다.
tsc
명령어는 TypeScript를 JavaScript로 변환할 때 사용하는 명령어다. 즉, 이 프로젝트의 모든 TypeScript 파일을 tsconfig.json 파일에 정의된 내용을 기준으로 JavaScript 파일로 변환 작업(컴파일)을 진행한다는 의미다.
그래서 Build를 하면 각 폴더에 .d.ts
, .js
파일이 생성된다.
.d.ts
파일은 타입스크립트 선언 파일로 타입스크립트 코드의 타입 추론을 돕는 파일이다.
작성한 코드가 잘 작동하는지 확인하기 위해 앱에 Stack을 나열하도록 한다.
$ cdk ls
Level00Stack
라는 값이 뜨면서 cdk.out
폴더가 생성된다.
_
(언더바) 또는 -
(하이픈)은 자체적으로 빼고 생성하는 것 같다.
현재 작성한 앱(S3 Bucket 생성 코드)에 대한 AWS CloudFormation 템플릿을 합성한다.
cdk synth
위의 명령어를 실행하면 코드에 정의된 리소스가 AWS CloudFormation Template로 변환되도록 한다. 그래서 cdk synth
의 반환 값(?)은 YAML 형식의 템플릿이다. 이 파일은 cdk.out > **.template.json
파일로 저장된다.
aws credentials를 여러개 쓰는 분이라면 아래처럼 --profile을 이용해서 배포 가능하다.
cdk deploy
배포가 끝나면 AWS Console > CloudFormation > Stacks 를 확인해보면 생성된 리소스 들을 확인할 수 있다.
위의 배포된 CloudFormation Stack을 삭제할 때는
cdk destroy
위의 한 줄을 입력하면 y/n 를 입력해달라는 재확인을 한다. y를 입력하면 모두 한 번에 삭제된다 :-)
Terraform에 익숙해서 그런가,, 아직은 왜 CDK를 사용하는지 잘 모르겠다. 불필요한 리소스들(ROLE, ECR Repository)이 생성되어서 이걸 굳이.. 이렇게 써야하나? 라는 생각이 들지만 아직 이제 첫 걸음마 뗀거니까 잘 지내보자 CDK...