회사에서 AWS Cloud Development Kit (이하 CDK)를 적용한 지도 1년이 되어가고 있습니다. 사용하면서 매우 유용하다는 생각이 들었지만, 생각보다 한국에서는 사용이 많이 이루어지지 않는 것 같아서 해당 경험을 공유해보려고 합니다.
CDK는 AWS Cloud Development Kit의 약어로, AWS 인프라 관리를 개발자가 사용하는 언어(예: Python, Java, TypeScript 등)로 관리할 수 있게 해주는 도구입니다.
핵심만 말하자면
내가 사용하는 언어로 AWS 인프라 관리를 도와주는 도구
개발자가 AWS 인프라 관리를 자신이 사용하는 언어로 관리하고 싶을 때, CDK를 사용할 수 있습니다. 특히 TypeScript를 사용하는 경우 프론트엔드, 백엔드, 인프라 관리 등 다양한 작업을 동시에 할 수 있습니다.
이거를 이제 내가 잘 쓰는 언어로 할 수 있다는 건데
유명한 terraform 같은 경우에도 새로 언어를 배워한다는게,
특히 스타트업 입장에서는 러닝커브라는건 시간적인 리스크가 있어서 "이렇게 할바에는 그냥 수동으로 하는게 빠르겠다. 도입 포기!" 이런 결과로 가기 쉽다는 거죠.
요약을 하자면 IaC 도입을 가장 쉽게 할 수 있는 방법인거 같아요
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as ecs from 'aws-cdk-lib/aws-ecs';
import * as ecsPatterns from 'aws-cdk-lib/aws-ecs-patterns';
const app = new cdk.App();
const stack = new cdk.Stack(app, 'MyStack');
const vpc = new ec2.Vpc(stack, 'MyVpc', { maxAzs: 2 });
const cluster = new ecs.Cluster(stack, 'MyCluster', { vpc });
const fargateService = new ecsPatterns.ApplicationLoadBalancedFargateService(stack, 'MyFargateService', {
cluster,
memoryLimitMiB: 512,
cpu: 256,
taskImageOptions: {
image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
},
});
new cdk.CfnOutput(stack, 'LoadBalancerDNS', { value: fargateService.loadBalancer.loadBalancerDnsName });
위 코드는 AWS CDK를 사용해 Amazon ECS 클러스터와 Fargate 서비스를 생성하는 TypeScript 코드 예시입니다.
지금 적용되어있는 형태
CDK를 사용하면 인프라 관리가 코드 형태로 되므로, IaC(Infrastructure as Code)를 사용하지 않을 때 발생할 수 있는 문제들을 방지할 수 있습니다. 그러나 CDK 역시 일정한 학습 곡선이 필요하고, AWS 서비스가 업데이트되면서 CDK에서 지원되지 않는 경우도 있습니다.
실제로 제 경험상, API Gateway에서 리소스를 삭제하고 코드를 변경 후 배포하면, 삭제된 리소스가 남아있어 배포가 실패할 수 있습니다. 또한, 많은 리소스를 한 번에 변경하려다가 실패하여 롤백하는 경우에는 롤백 시간이 길어지는 등의 문제가 발생할 수 있습니다.
하지만 이러한 문제들은 CDK의 원리와 사용 방법을 숙지하고 있으면 충분히 해결할 수 있습니다.
CDK는 개발자가 AWS 인프라를 코드로 관리할 수 있게 해주는 도구로, 코드 재사용성과 모듈화가 가능하며, 코드 버전 관리와 변경 내역 추적, 빠른 배포와 롤백이 가능하다는 장점이 있습니다. 또한, CDK를 사용하면 AWS 인프라 관리에 대한 이해도가 높아질 수 있다는 점도 큰 장점입니다.
그러나 AWS 서비스가 업데이트되면서 CDK에서 지원되지 않는 경우도 있으므로, CDK를 사용하기 전에 AWS 공식 문서를 꼼꼼하게 확인하는 것이 중요합니다.
시간이 날때마다 그동안 적용해왔던 경험을 시리즈로 공유해보겠습니다. 감사합니다.