Fall in IT.

AWS CDK 간단정리 본문

Amazon Web Service(AWS)

AWS CDK 간단정리

D.Y 2021. 11. 4. 10:53

개요

AWS CDK란?

  • AWS Cloud Development Kit으로 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 모델링 및 프로비저닝 해주는 도구
  • 기존의 yaml, json 형태의 선언적 접근 방식보다 더 개발자에게 친화적인 언어를 사용해서 작성할 수 있다

 

기존 인프라 구축 방법

  • Level 1
    • AWS 관리 콘솔에서 리소스 만들기
  • Level 2
    • 코드 형태의 명령형 인프라 (aws-cli, aws-sdk 사용하여 deploy script 작성)
      • 문제 발생시 재시도하기 어려움, 동시에 여러명이 스크립트를 실행할 경우 에러 발생
  • Level 3
    • 코드로 선언하여 인프라 관리
      • yaml 또는 json 형태의 선억적 접근 방식 사용
      • Terraform, AWS CloudFormation (AWS 만 지원)
  • Level 4
    • 개발자에게 친화적인 언어로 작성 가능(DX)
    • for, if 와 같은 조건문을 사용하여 동적으로 인프라 구성이 가능

 

아키텍쳐

 

실습 (TypeScript)

실습내용

AWS SNS와 SQS를 생성하고, SQS를 구독하도록 SNS를 설정한다.

  • AWS SNS
  • AWS SQS

1. cdk cli 설치

$ npm install -g aws-cdk

2. cdk cli를 사용하여 프로젝트 생성

$ cdk init --language typescript

 

Project structure

  • lib: CDK Application의 메인 스택 정의
  • bin: CDK Application의 entry point (lib 디렉터리 하위의 스택이 사용된다)
  • cdk.json: Application에서 사용될 toolkit 정의

3. 메인 스택 정의

import * as sns from '@aws-cdk/aws-sns';
import * as subs from '@aws-cdk/aws-sns-subscriptions';
import * as sqs from '@aws-cdk/aws-sqs';
import * as cdk from '@aws-cdk/core';

export class CdkWorkshopStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const queue = new sqs.Queue(this, 'CdkWorkshopQueue', {
      visibilityTimeout: cdk.Duration.seconds(300)
    });

    const topic = new sns.Topic(this, 'CdkWorkshopTopic');

    topic.addSubscription(new subs.SqsSubscription(queue));
  }
}

 

4. cdk로 정의한 app을 사용하여 CloudFormation template 생성

$ cdk synth

 

5. bootstrap

// aws configure에 설정된 계정 정보를 사용하여 s3에 버킷 생성
$ cdk bootstrap

6.deploy

// 리소스 배포
$ cdk deploy

참조

 

 

Comments