AWS CDK 사용 환경 구성(Python)

Dongkyu Ko
딜리버스
Published in
6 min readOct 26, 2021

이 글은 AWS CDK(Python) 사용을 위한 환경 구성 방법 및 AWS CDK 예제(with SSO, Pyenv)를 다룹니다.

AWS CDK에 대한 기본적인 내용은 아래의 링크를 참고해주세요.

링크

딜리버스가 AWS CDK를 사용하는 이유

딜리버스는 서비스 개발 전에 클라우드 인프라에 대한 거버넌스, 리소스 관리 등 클라우드 인프라와 관련된 모든 사항들을 효율적으로 관리하기 위한 방법(소규모 인원으로)을 계속 고민해왔습니다. 다양한 방법을 고민 하던 중 콘솔로 클라우드 리소스를 관리하는 것이 아닌 코드를 통해 인프라를 관리하고 프로비저닝 하며, 오류 감소, 비용 절감, 일관성, 버전 관리 등 여러가지 이점이 있는 IaC(Infrastructure as Code)를 사용하기로 했습니다.

IaC 서비스 및 도구들은 유명한 Terraform부터 AWS CloudFormation, Pulumi 등 다양하게 있지만 AWS CDK를 사용하는 이유는 다음과 같습니다.

딜리버스가 AWS CDK를 사용하는 이유

  1. 딜리버스가 사용하는 주 프로그래밍 언어인 Python 사용 가능
    - 사내에서 프로그래밍 언어에 대해 제한을 두고 있지는 않지만 선호
  2. 모듈화 편리
    - Property 정의로 스택간의 참조 기능이 매우 직관적
  3. 여러가지 종류의 테스트 가능
    - Snapshot tests: 기준 템플릿으로 만들어진 AWS CloudFormation 템플릿 테스트
    - Fine-grained assertions: 생성된 AWS CloudFormation 특정 부분 템플릿테스트
    - Validation test: CDK 구문 검사
  4. VS Code와의 궁합 (딜러버스 구성원들은 주 소스 코드 에디터로 VS Code 사용)
    - AWS Toolkit 활용 가능 (CDK 포함)
    - VS Code에서 Python에 대한 구문 검사, 자동 완성 등 다양한 지원

AWS CDK 사용 환경 구성을 위한 설치 목록

python(≥ 3.6), node.js( ≥ 10.13.0) 설치 방법은 따로 설명하지 않았습니다.

AWS CDK (v2)

기본 버전인 AWS CDK v1 아닙니다!

AWS Docs

AWS CDK v2 설치

AWS CLI

쉘(Shell)에서 여러가지 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈소스 도구
- AWS Toolkit 및 AWS CDK에서 SSO을 사용해 Credentials를 설정할 때 필수

AWS Docs

Pyenv

글로벌 파이썬 버전 관리 및 프로젝트 단위로 파이썬 버전 관리가 가능한 환경 제공

설치 방법

참고자료 (venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv의 차이점)

Pyenv-virtualenv

Pyenv + Virtualenv, Virtualenv는 프로젝트 별로 독립된 파이썬 환경을 만들 수 있도록 도와주는 도구

설치 방법

AWS Toolkit for VS Code

VS Code를 활용하여 AWS에서 개발, 디버깅 및 배포를 할 수 있는 오픈소스 플러그인

AWS Docs

AWS 계정과 연결된 모습

AWS CDK 예제 (with SSO, Pyenv)

진행할 예제는 AWS CDK공식 문서에 있는 Getting started > Your first CDK app의 예제입니다.
(AWS CDK 예제와 다른점은 아래와 같습니다)

AWS CDK 예제와 다른점
1. Pyenv 활용 (예제에서는 virtualenv 활용)
2. SSO Credentials 활용 (예제에서는 Access Key Credentials 활용)
3. CDK v2 사용

— —

(1) Pyenv로 파이썬 버전 3.6이상 설치 및 Pyenv-virtualenv로 배포 테스트를 위한 가상 환경 생성

— —

(2) 프로젝트 폴더 생성 및 cdk-init 명령어 실행

CDK 실행 후 만들어진 파일 및 폴더 구조

— —

(3) 가상 환경 shell 진입 후 CDK에 필요한 패키지 설치

requirements.txt

— —

(4) S3 생성 소스코드 추가

hello-cdk/hello_cdk/hello_cdk_stack.py

— —

(5) S3 생성 스택에 대한 CloudFormation 템플릿 합성 및 정의

  • 정상적으로 실행되면 output에 SAML 형식의 문자들이 보이고프로젝트 폴더에 hello_cdk/hello_cdk.egg-info 폴더가 추가됨

— —

(6) CDK SSO Credentials 설정
SSO Credential으로 cdk deploy하면 AWS 계정 관련 오류가 발생하여 아래의 방법으로 진행

참조 URL

— —

(7) app.py에 S3 생성 stack 추가

hello-cdk/app.py

— —

(8) CDK 배포

정상적으로 배포된 CDK
생성된 S3

— —

(9) S3 생성 스택 소스코드 업데이트

hello-cdk/hello_cdk/hello_cdk_stack.py

— —

(10) 배포된 템플릿과 로컬 템플릿 비교를 위한 cdk diff 명령어 실행 후 에셋 생성 및 보관을 위한 cdk bootstrap 명령어 실행 후 배포

cdk diff 실행

— —

(11) 생성한 CDK 앱 삭제

부록. VS Code 설정 팁

  1. VS Code Python 관련 패키지 설치
    - Python, Python for VSCode, Python Extension Pack
    - Pylint (문법 자동 검사 및 수정)

--

--