[AWS] AWS CDK 개념 및 설치
0. INTRO
-
AWS CDK는 Cloud Development Kit으로 python, java, typescript, C#, go, javascript 등 다양한 언어들을 통한 정의로 IaC(Infra as Code)를 더 쉽고 효과적으로 할 수 있도록 도와주는 툴이다.
-
기존의 AWS 인프라 구축 툴로 유명한 Cloudformation은 YAML이나 JSON 형식으로 인프라들을 정의한 후 deploy 하기 때문에 직관적이기는 하지만 약간의 인프라를 구축하는데도 줄이 엄청 길어지게 된다. 또한 파일 내에서 각종 리소스들을 참조, 변수 선언 등을 할 수 있는데 이게 많아지다보면 복잡해지고 한눈에 리소스들을 파악하고 관리하기가 상당히 힘들어질 수 있다.
-
CDK의 경우 개발자에게 익숙한 언어로 함수를 짜듯 인프라에 대한 정의를 내려줄 수가 있기 때문에 일단 줄 수가 굉장히 많이 줄어든다. aws-cdk-lib에서 지원해주는 함수 한 줄이 cloudformation에서 약 6-7줄 정의내린 것과 동일한 역할을 할 수도 있다. 또한 생각보다 아주 디테일한 기능까지 전부 다 함수로 만들어져서 지원되므로 AWS 인프라 구축시 기능 지원이 없어 불편한 부분은 거의 없을 것이라 생각된다.
-
AWS Native 서비스지만 코드가 직접 인프라를 구축시켜주는게 아니고 cdk synth 명령을 통해 정의내려진 코드를 Cloudformation 템플릿으로 변환 후 해당 JSON 템플릿을 이용하여 Cloudformation으로 인프라 구축이 시작된다. 즉, 핵심은 Cloudformation 코드 이며 python으로 작성한 코드들은 Cloudformation 템플릿 작성을 조금 더 쉽게 할 수 있도록 도와주는 변환 툴인 것이다.
1. 설치 명령
- CDK는 nodejs 기반으로 동작된다. 아래는 설치에 필요한 내용들을 모아 만든 shell script이다.
-
cdk_install.sh
#!/bin/bash sudo apt-get update sudo apt install awscli -y curl -s https://deb.nodesource.com/setup_16.x | sudo bash sudo apt-get install -y nodejs sudo npm install -g aws-cdk sudo apt install python3.8-venv -y echo "CDK VERSION : $(cdk --version)"
# 실행 명령 bash cdk_install.sh
2. 실행 순서
-
CDK CLI 설치 후 init 명령 실행 (아래와 같은 기본 골격이 만들어진다.)
cdk init app --language=python
cdktest ├── README.md ├── app.py -> cdk synth, bootstrap, deploy 등의 명령이 내려지는 위치 ├── cdk.json ├── cdktest │ ├── __init__.py │ └── cdktest_stack.py -> 인프라 구축되는 코드 위치 ├── requirements-dev.txt ├── requirements.txt ├── source.bat └── tests ├── __init__.py └── unit ├── __init__.py └── test_cdktest_stack.py
-
Python3.8 가상환경을 만들어준다.
python3 -m venv .venv
-
해당 가상환경을 활성화시킨 후 필요 모듈들을 설치해준다.
source .venv/bin/activate pip3 install -r requirements.txt
- 만들어진 템플릿에 맞게 인프라 구축 관련 코드를 작성한다.
- 배포 전 아래 코드들을 쳐보며 에러는 없는지 확인한다.
- Cloudformation의 경우 AWS 서비스에 직접 등록해보기 전까지는 어디서 에러가 났는지 찾아내기가 상당히 까다롭니다. 하지만 CDK는 처음의 ls나 synth 과정에서 코드에 에러가 있으면 에러 메세지를 띄워주기 때문에 에러 위치를 찾아서 수정하기가 굉장히 용이하다.
* `cdk ls` list all stacks in the app * `cdk synth` 정의 내린 코드가 CloudFormation template 으로 변환된다. * `cdk bootstrap' 코드 에러를 확인하고 변환된 cloudformation JSON이 저장될 S3 경로를 만든다. * `cdk diff` compare deployed stack with current state * `cdk docs` open CDK documentation
- cdk deploy 명령을 통해 변환된 CloudFormation template을 실제 배포하여 인프라들을 구축한다.
-
생성한 인프라들을 삭제하고 실습을 정리한다.
cdk destroy
2. 참고 문서
- CDK DOCS
- CDK EXAMPLES
Leave a comment