본문으로 건너뛰기
김신건의 로그

[IaC] AWS CDK: TypeScript 로 CloudFormation 생성

· 수정 · 📖 약 1분 · 242자/단어 #aws #cdk #iac #devops #cloudformation #cloud
AWS CDK, Cloud Development Kit, CDK construct, CDK stack, L1 L2 L3 construct, CDK Toolkit, cdktf

정의

AWS CDK = TS/Python/Java/Go 로 AWS 인프라 정의CloudFormation 으로 컴파일 → 배포. AWS 전용.

흐름

flowchart LR
    Code["TypeScript (CDK)"] --> Synth["cdk synth<br/>(CFN template 생성)"]
    Synth --> Deploy["cdk deploy<br/>(CloudFormation)"]
    Deploy --> CFN[CloudFormation Stack]
    CFN --> AWS[AWS Resources]

예시

import { Stack, StackProps, RemovalPolicy } from 'aws-cdk-lib';
import { Bucket, BucketEncryption } from 'aws-cdk-lib/aws-s3';
import { Function, Runtime, Code } from 'aws-cdk-lib/aws-lambda';
import { Construct } from 'constructs';

export class MyStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const bucket = new Bucket(this, 'Data', {
      versioned: true,
      encryption: BucketEncryption.KMS_MANAGED,
      removalPolicy: RemovalPolicy.RETAIN,
    });

    const fn = new Function(this, 'Processor', {
      runtime: Runtime.NODEJS_22_X,
      handler: 'index.handler',
      code: Code.fromAsset('lambda'),
    });

    bucket.grantReadWrite(fn);   // ← IAM 자동 생성!
  }
}

bucket.grantReadWrite(fn) 한 줄 = bucket policy + IAM role + 권한 → 자동 생성. 가장 강력한 추상화.

Construct Level (L1, L2, L3)

Level의미
L1 (Cfn)*CloudFormation 그대로 (CfnBucket)
L2추상화 (Bucket, Function)
L3 (Patterns)합성 (LoadBalancedFargateService)
// L3 example: ALB + Fargate 한 줄
new ApplicationLoadBalancedFargateService(this, 'Service', {
  cluster,
  taskImageOptions: {
    image: ContainerImage.fromRegistry('nginx'),
  },
  desiredCount: 3,
});

CDK 명령

cdk init app --language=typescript
cdk synth                    # CFN template 생성
cdk diff                     # 현 stack vs 예정 변경
cdk deploy MyStack
cdk destroy MyStack
cdk bootstrap                # CDK 의 metadata bucket 생성 (account 당 1회)

CDK vs Terraform vs Pulumi

항목CDKTerraformPulumi
언어TS/Python/Java/GoHCLTS/Python/Go
Multi-cloudAWS only
StateCFN (managed)별도 backend별도 backend
추상화L1/L2/L3provider코드
학습 곡선AWS 잘 알면 쉬움HCL 학습코드 자유
AWS 통합최고

CDK for Terraform (cdktf)

import { S3Bucket } from '@cdktf/provider-aws/lib/s3-bucket';

new S3Bucket(this, 'data', {
  bucket: 'myapp-data',
  ...
});

코드 (TS/Python) + Terraform backend. CDK 의 언어 + Terraform 의 multi-cloud.

흔한 함정

WARNING

  1. cdk bootstrap 한 번 필요 = account+region 당. CI/CD 에서 잊음.
  2. CFN limit = stack 당 500 resource. Nested stack 으로.
  3. CDK Asset 의 S3 누적 = bootstrap bucket 비용. 정기 정리.
  4. Snapshot 테스트 (jest) = 큰 stack 의 변경 추적. CI 에 필수.

관련 위키

이 글의 용어 (4개)
[AWS] Lambda: 서버리스 함수, 트리거, 동시성cloud
정의 AWS Lambda = 서버리스 함수 실행. 이벤트 트리거 → 함수 실행 → 결과 / 비동기 처리. 서버 관리 0. 트리거 종류 | 트리거 | 모델 | |---|---| |…
[AWS] S3: object storage, storage classes, lifecyclecloud
정의 S3 = AWS 의 object storage. bucket + key + object. 11 9's durability, 무한 확장. 2026 시점 인터넷의 핵심 스토리지…
[IaC] Pulumi: 코드로 인프라 (TS/Python/Go)cloud
정의 Pulumi = 일반 프로그래밍 언어로 IaC. TypeScript, Python, Go, .NET, Java. Terraform 의 HCL DSL 대신 코드 자유도. TS…
[IaC] Terraform: HCL, provider, statecloud
정의 Terraform = 선언적 인프라 코드. HCL (HashiCorp Configuration Language) 로 리소스 정의 → AWS/GCP/Azure 등 provid…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기