AWS CDK를 나의 PC에서 사용해볼까?

Simon Kim·2022년 4월 1일
0

오랜만에 글을 남겨본다. 지난번까지는 지난날의 나를 돌아보며 기술적인(정확히는 잡다한...) 부분을 정리하였다면, 이번 글부터는 앞으로 사용해보고 싶은 기술적인 부분을 나만의 방식으로 한번 정리해보려 한다. (사실은 지인에게 나 뭐 공부하면 좋을지 물어봤었는데 이거 한번 스터디해봐라고 추천을 받은 내용을 바탕으로 반강제적으로 해보려한다. ^^;;)

짧은 기간이었지만, Python 기반의 Django Framework로 서비스 개발 경험이 있고, Javascript 이후에 굉장히 친숙하게 다가온 언어다보니 이거 기반으로 스터디를 무엇을 해볼까 고민하다, 서버리스기반의 마이크로 아키텍처를 생각해봤고, Lambda에 코드 작성을 AWS Console 말고 다른 방법이 없을까 고민하는 중에 AWS에서 제공하는 CDK를 이용하여 Lambda에 배포가 가능하다고 하여, 이거다!! 생각하고 스터디 해보려고 한다.
(즉, 오늘의 주제는 CDK for Python + CloudFormation + Lambda + API Gateway... 주제범위가 너무 넓은데... 이번 시간은 CDK 설치만 해보겠다.)

일단 CDK가 무엇인지 열심히 구글링 해보니 나보다 앞서서 잘 정리해주신 분들이 너무너무 많아서 이분들의 내용을 참고로 한번 정리해보겠다.
(출처란의 URL 정보를 참고하시면 더욱 도움이 되실겁니다.^^)


CDK 정의

Cloud Development Kit의 줄임말로 직역하면 클라우드 개발 도구라고한다.
IaC(Infrastructure as Code) 서비스의 한 종류이고, 유사 서비스는 Terraform, AWS CloudFormation 등이 존재한다.
(여기서 IaC에 대한 이해가 전무한지라 또다시 구글링해보니, "코드를 통한 인프라를 관리"하여 눈치밥으로 클라우드 인프라를 CDK에서 제공하는 코드를 이용하여 구성하는 구나. 생각해보았다. 자세한 설명은 AWS 코리아의 김현수 솔루션즈아키텍트님께서 발표해주신 영상을 참고해서 보시면 좋겠다. 정리가 너무 잘되어 있다.^^)
https://youtu.be/hOJbhfF0DYQ

그럼 CDK를 이용하여 어떻게 인프라를 관리하는데??

CDK에서는 아래 명령어를 사용하여 인프라를 관리할 수 있다.

cdk deploy [stack_name|~*~] - cloudFormation을 통해 테스트 또는 프로덕션에 was cdk 어플리케이션 배포
cdk destory [stack_name|~*~] - 스택 삭제
cdk synth - aws cdk 어플리케이션을 cloudFormation 템플릿으로 컴파일하여 인프라 동기화

와 그럼 위의 명령어를 이용해서 내가 원하는 인프라에 자동적으로 배포해주는 거야? 생각이들면서 그럼 어떻게 만들어야 하지? 생각이 들었다. 당연하게도 아래 명령어를 통해서 구성을 자동으로 생성하여 준다.
(당연하겠지만, GIT처럼 내가 작성한 코드와 현재 인프라에 구성되어 있는 내용의 차이점을 확인할수도 있다. AWS 짱~~)

cdk bootstrap - aws 환경에 cdk toolkit을 위한 스택 배포
cdk init - 사용자가 선택한 기본 어플리케이션으로 초기화
cdk diff - 로컬 aws cdk코드와  aws 에서 실행되는 어플리케이션간 차이점 확인

그럼 한번 구성해보자..나의 PC에

그래서 CDK를 내 PC 한번 구성해보려고 또다시 구글링.. 그런데, 웬만한 블로그에는 AWS의 Cloud9를 이용해서 작성하는 예시가 많아 절망에 빠질뻔하다가, PC에 구성할 수 있는 블로그를 찾아서 해당 내용을 바탕으로 설치해보기로 했다.
(언어는 Python, OS는 Mac 기준으로 작성하였다.)
1. AWS CLI 설치

//python 설치 
brew install python

//aws cli 설치
brew install awscli
  1. IAM 계정 생성
    (IAM 계정 생성하는 방법은 너무나도 잘 아실듯하여 결과만 이미지로 대체하겠다.)
1. aws console login
2. aws IAM 클릭 후 계정 생성
3. 계정 생성 후 보안자격증명->엑세스키 생성

  1. PC에 aws 접속 설정
    (위의 이미지에 생성된 계정의 엑세스키를 이용하여 내 PC에서 aws에 접근 하도록 설정한다.)
aws configure
AWS Access Key ID [None]: [Your-Key-ID]
AWS Secret Access Key [None]:[Your-AccessKey]
Default region name [None]: [Your-Region]
Default output format [None]: [option]
  1. AWS-CDK install
brew install aws-cdk
  1. 내 PC에 Project 폴더 및 파일 생성
mkdir [Your Project Name]
cd [Your Project Name]
cdk init [PROJECT NAME] --language Python
pip install -r requirements.txt

이렇게 하면 아래 이미지와 같이 CDK에서 프로젝트 구성을 자동으로 해준다.

그러면 설치 작업은 끝난 것이다.


부록

Lambda 작성방법

생성된 프로젝트 내에 Lambda에 올릴 폴더 및 파일을 생성한다.

mkdir f_lambda
cd f_lambda
mkdir test.py


2. 해당 파일에 원하는 기능을 작성
3. [Your-Project]_stack.py에서 lambda에 배포할 내용 작성

from constructs import Construct
from aws_cdk import (
    Stack,
    aws_lambda as _lambda,
)

class YourProjectStack(Stack):

    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # Defines an AWS Lambda resource
        my_lambda = _lambda.Function(
            self, 'TestHandler',
            runtime=_lambda.Runtime.[Your-Python-Version],
            code=_lambda.Code.from_asset('lambda'),
            handler='test.main',
        )

4.이후 cdk 명령어를 이용하여 배포하면 된다.

코드에서 AWS 접근방법

당연하겠지만, Python에서는 AWS을 사용할 수 있도록 Boto3 Library를 제공해준다. 해당 lib를 받은 후 AWS에 접근 하고싶은 솔루션에 맞게 코드를 작성하면 된다.

pip install boto3

test.py파일에 s3 bucket 조회하는 코드(예시)

import boto3

def s3_list():
        s3 = boto3.resource('s3')
        result = []
        for bucket in s3.buckets.all():
            result.append(bucket.name)
        
        return result
        

vscode에서 디버깅

기본적으로 CDK에는 pytest library를 이용하여 단위테스트를 할 수 있도록 requirements-dev.txt에 정의되어 있다. 그런데, vscode에서 디버깅을 사용하면서 내부 데이터를 보고 싶을 경우가 있을 것이다. 이경우, 확장 플러그인에서 Python Extension Pack을 다운 받으면 왼쪽에 테스트 아이콘이 생성되고, 클릭하면 왼쪽에 pytest가 가능한 목록이 나오게 된다. 여기에 내가 작성한 테스트코드에 디버깅을 걸고 테스트 하면된다.


레퍼런스 :

https://dev.classmethod.jp/articles/aws-cdk-intro-kor/
https://www.redhat.com/ko/topics/automation/what-is-infrastructure-as-code-iac
https://medium.com/@sindepal/aws-cdk-basic-guide-239b76d4f72c

profile
다양한 주제를 심플하고 명확하게 정리해 보려는 연차만 많은 IT 잡부입니다. 사람들과의 소통을 사랑합니다.~^^

0개의 댓글