gony-dev 님의 블로그

Section 26. Cloud Development Kit(CDK) 본문

AWS

Section 26. Cloud Development Kit(CDK)

minarinamu 2024. 12. 4. 08:02

CDK Basic

CDK는 프로그래밍 언어를 사용하여 클라우드 인프라를 정의한다.
얼핏 CloudFormation과 비슷할 수 있지만 언어를 사용하여 정의한다는 것에 큰 차이를 둔다. 즉 상향이라는 것이다.
  • 코드는 cloudFormation 템플릿에 컴파일되며, 이를 통해 유연성이 높아지고 프로그래밍 언어를 사용할 수 있다.
  • 이렇게 하면 인프라와 어플리케이션 런타임 코드를 함께 배포할 수가 있게 된다.
    • 람다 함수
    • ECS/EKS의 도커 컨테이너에 사용하면 좋다.

CDK in a Diagram

  • CDK CLI로 합성하여 CloudFormation으로 만들 수 있다.

 

CDK vs. SAM

  • SAM
    • 서버리스에 중점을 두고 있다.
    • 템플릿을 JSON이나 YAML 형식에 작성한다.
    • 람다를 사용해서 빠르게 시작할 수 있다.
    • CloudFormation을 사용하지만 SAM의 초점은 람다 함수와 서버리스 어플리케이션이라는 것이다.
  • CDK
    • CloudFormation의 상위 호환이다.
    • 모든 AWS 서비스를 지원하며, 익숙한 프로그래밍 언어를 사용해서 인프라를 작성할 수 있다.
    • CloudFormation을 생성하기 위해 CloudFormation을 활용한다.

CDK + SAM

  • 이 둘을 우리는 조합하여 CDK 앱을 로컬에서 테스트할 수 있다.
  • 그러기 위해서는 "cdk synth"가 필요하다.

CDK Hands-On

  • 아래의 과정을 실습해보면 CDK의 작동 방식을 더 잘 이해할 수 있다.

CDK 실습

# 1. initialize the application
cdk init app --language javascript
# verify it works correctly
cdk ls

# 2. copy the content of cdk-app-stack.js into lib/
cdk-app-stack.js

# 3. setup the Lambda function
mkdir lambda && cd lambda
touch index.py

# 4. bootstrap the CDK application
cdk bootstrap

# 5. (Optional) synthesize as a CloudFormation template
cdk synth

# 6. deploy the CDK stacj
cdk deploy

# 7. empty the s3 bucket
# 8. destroy the stack
cdk destroy

CDK 구조

  • CDK가 최종 CloudFormation 스택을 생성하는데 필요한 모든 것들을 담아놓은 구성 요소이다.
  • 구조는 S3 버킷 같은 단일 AWS 리소스일 수도 있고, 여러 관련 리소스를 합쳐 놓은 리소스일 수도 있다.
  • AWS Construct Library
    • CDK에 포함되어 있는 구조를 모두 모아놓은 곳으로 AWS 리소스에 필요한 구조들이 들어있다.
    • 구조는 3가지 계층으로 나뉘다.
  • Construct Hub
    • AWS 뿐만 아니라 third party나 오픈 소스 커뮤니티의 구조도 있는 경우 CDK 스택을 더 빠르고 잘 생성할 수 있다.

Layer 1 Constructs (L1)

  • CFN 리소스라고도 불리며, CloudFormation 내의 사용 가능한 모든 리소스를 표현할 수 있다.
  • CloudFormation Resource Specification으로부터 주기적으로 생성된 구조이다.
  • 구조체 이름은 Cfn으로 시작되며, 반드시 모든 리소스 프로퍼티를 명시적으로 구성해야만 한다.

Layer 2 Constructs (L2)

  • AWS 리소스이지만 고수준의 리소스이다.
  • L1 같이 유사한 작동을 하지만 기본값과 보일러플레이트가 생겨 리소스 프로퍼티에 관해 전부 알 필요는 없다.

Layer 3 Constructs (L3)

  • 패턴이라고도 불리는데, 이는 여러 관련 리소스들을 표현하기 때문이다.
  • AWS에서 가장 흔한 작업을 완료할 수 있게 도와준다.
    • aws-apigateway.LambdaRestApi로 람다 함수를 API 게이트웨이로 나타내기도 하거나,
      aws-ecs-patterns.ApplicationLoadBalancerFargateService로 ALB를 가진 Fargate cluster를 포함하는 아키텍쳐를 나타내기도 한다.
  • CDK로는 빈 칸만 채우면 자동으로 ALB가 생성되고 Fargate 서비스를 올바르게 연결해준다.

CDK - Important Commands to know

  • 여기 CDK CLI에서 사용하는 라이브러리들이 있으므로 한번씩 보도록 하자!

CDK - Bootstrapping

  • 부트스트래핑은 CDK 앱을 AWS 환경에 배포할 수 있게 미리 CDK에 맞게 리소스를 프로비저닝하는 과정이다.
  • AWS에서 환경은 계정과 리전을 결합한 형태를 말하며, 한 리전의 계정에 배포할 수 있게 그 전에 미리 CDKToolkit라는 CloudFormation 스택을 배포해야만 한다.(여기에는 S3와 IAM 역할이 들어있다.)
  • 각각의 새로운 환경을 생성하기 위해서는 다음과 같은 명령어가 있어야한다.
    "cdk bootstrap aws://<aws_account>/<aws_region>"

 

 

 

 

 

 

 


CDK - Testing

  • CDK로 코드를 사용하고 있기에 정상적인 표준 python 코드나 javascript 등을 테스트할 수 있다.
  • CDK 앱에는 CDK Assertions Module이라는 테스트 프레임워크가 들어있다.
  • 이 모듈을 사용하여 필요한 특정 리소스나 역할, 조건 등이 있는지 확인할 수 있다.
  • CDK에는 두 가지 유형이 존재한다.
    1. Fine-grained Assertion | 특정 리소스가 특정 프로퍼티를 갖추고 있는지 테스트한다.
    2. Snapshot Tests | 이전에 저장된 기본 템플릿을 기준으로 CloudFormation 템플릿을 테스트한다.
  • 템플릿을 테스트 하는 데에는 두 가지 옵션이 있다.
    1. Template.fromStack(MyStack) | CDK에서 정의한 스택을 실제로 가져온다.
    2. Template.fromString(MyString) | 템플릿이 CDK에 아직 없을 경우에 입력하여 가져올 수 있다.