이게 뭐야 AWS CDK? - AWS Cloud Development Kit (AWS CDK) v2

v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔고 2023년 6월 1일에 지원을 종료했습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

이게 뭐야 AWS CDK?

코드로 클라우드 인프라를 정의하고 이를 통해 프로비저닝하기 위한 오픈 소스 소프트웨어 개발 AWS Cloud Development Kit (AWS CDK) 프레임워크입니다. AWS CloudFormation

두 가지 주요 AWS CDK 부분으로 구성되어 있습니다.

  • AWS CDK Construct Library — 미리 작성된 모듈식 및 재사용 가능한 코드 (구성이라고 함) 의 모음으로, 이를 사용, 수정 및 통합하여 인프라를 빠르게 개발할 수 있습니다. AWS CDK Construct Library의 목표는 애플리케이션을 구축할 때 AWS 서비스를 정의하고 통합하는 데 필요한 복잡성을 줄이는 것입니다. AWS

  • AWS CDK 명령줄 인터페이스 (AWS CDKCLI) — CDK 앱과 상호 작용하기 위한 명령줄 도구입니다. CDKCLI를 사용하여 AWS CDK 프로젝트를 만들고, 관리하고, 배포할 수 있습니다. CDKCLICDK툴킷이라고도 합니다.

TypeScript,,, JavaScript Python JavaC#/.Net, 및 Go 를 AWS CDK 지원합니다. 지원되는 이러한 프로그래밍 언어를 사용하여 구조라고 하는 재사용 가능한 클라우드 구성 요소를 정의할 수 있습니다. 이들을 함께 스택과 앱으로 구성합니다. 그런 다음 CDK 애플리케이션을 에 AWS CloudFormation 배포하여 리소스를 프로비저닝하거나 업데이트합니다.

AWS CDK app structure with stacks, constructs, and deployment to CloudFormation.

의 이점 AWS CDK

AWS CDK 를 사용하여 프로그래밍 언어의 뛰어난 표현력을 갖춘 안정적이고 확장 가능하며 비용 효율적인 애플리케이션을 클라우드에서 개발할 수 있습니다. 이 접근 방식은 다음과 같은 많은 이점을 제공합니다.

코드형 인프라 (IaC) 개발 및 관리

코드로서의 인프라를 연습하여 프로그래밍, 설명 및 선언적 방식으로 인프라를 생성, 배포 및 유지 관리하세요. IaC를 사용하면 개발자가 코드를 다루는 것과 같은 방식으로 인프라를 취급할 수 있습니다. 그 결과 인프라 관리에 대한 확장 가능하고 구조화된 접근 방식이 가능해집니다. IaC에 대해 자세히 알아보려면 AWS 백서 소개에서 코드로서의 인프라를 참조하십시오. DevOps

를 사용하면 인프라 AWS CDK, 애플리케이션 코드 및 구성을 모두 한 곳에 모아 모든 마일스톤에서 클라우드로 배포할 수 있는 완전한 시스템을 확보할 수 있습니다. 코드 검토, 단위 테스트, 소스 제어와 같은 소프트웨어 엔지니어링 베스트 프랙티스를 활용하여 인프라를 더욱 견고하게 만드세요.

범용 프로그래밍 언어를 사용하여 클라우드 인프라를 정의하십시오.

를 사용하면 AWS CDK,,,, 및 등의 프로그래밍 언어를 사용하여 클라우드 인프라를 정의할 수 있습니다. TypeScript JavaScript Python Java C#/.Net Go 선호하는 언어를 선택하고 매개 변수, 조건부, 루프, 구성, 상속 등의 프로그래밍 요소를 사용하여 인프라의 원하는 결과를 정의하십시오.

동일한 프로그래밍 언어를 사용하여 인프라와 애플리케이션 로직을 정의하십시오.

원하는 IDE (통합 개발 환경) 에서 구문 강조 표시 및 지능형 코드 완성과 같은 인프라 개발의 이점을 누리십시오.

Code snippet showing AWS CDK setup for ECS 클러스터 with VPC and Fargate service configuration.
를 통해 인프라를 배포하십시오. AWS CloudFormation

AWS CDK 와 AWS CloudFormation 통합하여 인프라를 배포 및 프로비저닝합니다. AWS AWS CloudFormation 서비스 프로비저닝을 위한 리소스 및 속성 구성을 광범위하게 AWS 서비스 지원하는 관리형입니다. AWS를 사용하면 롤백 오류가 발생해도 예측 가능하고 반복적으로 인프라 배포를 수행할 수 있습니다. AWS CloudFormation이미 잘 알고 있다면 처음 AWS CloudFormation시작할 때 새로운 IaC 관리 서비스를 배울 필요가 없습니다. AWS CDK

구문을 사용하여 애플리케이션 개발을 빠르게 시작하세요.

구조라고 하는 재사용 가능한 구성 요소를 사용하고 공유하여 더 빠르게 개발하세요. 저수준 구조를 사용하여 개별 AWS CloudFormation 리소스와 해당 속성을 정의할 수 있습니다. 고수준 구조를 사용하면 AWS 리소스에 대해 합리적이고 안전한 기본값을 사용하여 애플리케이션의 더 큰 구성 요소를 빠르게 정의하고 더 적은 코드로 더 많은 인프라를 정의할 수 있습니다.

고유한 사용 사례에 맞게 사용자 지정된 자체 구문을 만들어 조직 전체 또는 대중과 공유하세요.

예시: AWS CDK

다음은 AWS CDK 구성 라이브러리를 사용하여 AWS Fargate 시작 유형의 Amazon Elastic 컨테이너 서비스 (AmazonECS) 서비스를 생성하는 예제입니다. 이 예제에 대한 자세한 내용은 을 참조하십시오예: 를 사용하여 AWS Fargate 서비스 생성 AWS CDK.

TypeScript
export class MyEcsConstructStack extends Stack { constructor(scope: App, id: string, props?: StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, "MyVpc", { maxAzs: 3 // Default is all AZs in region }); const cluster = new ecs.Cluster(this, "MyCluster", { vpc: vpc }); // Create a load-balanced Fargate service and make it public new ecs_patterns.ApplicationLoadBalancedFargateService(this, "MyFargateService", { cluster: cluster, // Required cpu: 512, // Default is 256 desiredCount: 6, // Default is 1 taskImageOptions: { image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample") }, memoryLimitMiB: 2048, // Default is 512 publicLoadBalancer: true // Default is false }); } }
JavaScript
class MyEcsConstructStack extends Stack { constructor(scope, id, props) { super(scope, id, props); const vpc = new ec2.Vpc(this, "MyVpc", { maxAzs: 3 // Default is all AZs in region }); const cluster = new ecs.Cluster(this, "MyCluster", { vpc: vpc }); // Create a load-balanced Fargate service and make it public new ecs_patterns.ApplicationLoadBalancedFargateService(this, "MyFargateService", { cluster: cluster, // Required cpu: 512, // Default is 256 desiredCount: 6, // Default is 1 taskImageOptions: { image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample") }, memoryLimitMiB: 2048, // Default is 512 publicLoadBalancer: true // Default is false }); } } module.exports = { MyEcsConstructStack }
Python
class MyEcsConstructStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) vpc = ec2.Vpc(self, "MyVpc", max_azs=3) # default is all AZs in region cluster = ecs.Cluster(self, "MyCluster", vpc=vpc) ecs_patterns.ApplicationLoadBalancedFargateService(self, "MyFargateService", cluster=cluster, # Required cpu=512, # Default is 256 desired_count=6, # Default is 1 task_image_options=ecs_patterns.ApplicationLoadBalancedTaskImageOptions( image=ecs.ContainerImage.from_registry("amazon/amazon-ecs-sample")), memory_limit_mib=2048, # Default is 512 public_load_balancer=True) # Default is False
Java
public class MyEcsConstructStack extends Stack { public MyEcsConstructStack(final Construct scope, final String id) { this(scope, id, null); } public MyEcsConstructStack(final Construct scope, final String id, StackProps props) { super(scope, id, props); Vpc vpc = Vpc.Builder.create(this, "MyVpc").maxAzs(3).build(); Cluster cluster = Cluster.Builder.create(this, "MyCluster") .vpc(vpc).build(); ApplicationLoadBalancedFargateService.Builder.create(this, "MyFargateService") .cluster(cluster) .cpu(512) .desiredCount(6) .taskImageOptions( ApplicationLoadBalancedTaskImageOptions.builder() .image(ContainerImage .fromRegistry("amazon/amazon-ecs-sample")) .build()).memoryLimitMiB(2048) .publicLoadBalancer(true).build(); } }
C#
public class MyEcsConstructStack : Stack { public MyEcsConstructStack(Construct scope, string id, IStackProps props=null) : base(scope, id, props) { var vpc = new Vpc(this, "MyVpc", new VpcProps { MaxAzs = 3 }); var cluster = new Cluster(this, "MyCluster", new ClusterProps { Vpc = vpc }); new ApplicationLoadBalancedFargateService(this, "MyFargateService", new ApplicationLoadBalancedFargateServiceProps { Cluster = cluster, Cpu = 512, DesiredCount = 6, TaskImageOptions = new ApplicationLoadBalancedTaskImageOptions { Image = ContainerImage.FromRegistry("amazon/amazon-ecs-sample") }, MemoryLimitMiB = 2048, PublicLoadBalancer = true, }); } }
Go
func NewMyEcsConstructStack(scope constructs.Construct, id string, props *MyEcsConstructStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) vpc := awsec2.NewVpc(stack, jsii.String("MyVpc"), &awsec2.VpcProps{ MaxAzs: jsii.Number(3), // Default is all AZs in region }) cluster := awsecs.NewCluster(stack, jsii.String("MyCluster"), &awsecs.ClusterProps{ Vpc: vpc, }) awsecspatterns.NewApplicationLoadBalancedFargateService(stack, jsii.String("MyFargateService"), &awsecspatterns.ApplicationLoadBalancedFargateServiceProps{ Cluster: cluster, // required Cpu: jsii.Number(512), // default is 256 DesiredCount: jsii.Number(5), // default is 1 MemoryLimitMiB: jsii.Number(2048), // Default is 512 TaskImageOptions: &awsecspatterns.ApplicationLoadBalancedTaskImageOptions{ Image: awsecs.ContainerImage_FromRegistry(jsii.String("amazon/amazon-ecs-sample"), nil), }, PublicLoadBalancer: jsii.Bool(true), // Default is false }) return stack }

이 클래스는 500줄이 넘는 AWS CloudFormation 템플릿을 생성합니다. AWS CDK 앱을 배포하면 다음과 같은 유형의 리소스가 50개 이상 생성됩니다.

AWS CDK features

리포지토리 AWS CDKGitHub

공식 AWS CDK GitHub 리포지토리에 대해서는 aws-cdk를 참조하십시오. 여기에서 이슈를 제출하고, 라이선스를 보고, 릴리스를 추적하는 등의 작업을 할 수 있습니다.

오픈 소스이기 때문에 팀에서는 여러분이 이 도구를 더 나은 도구로 만드는 데 기여할 것을 권장합니다. AWS CDK 자세한 내용은 기여를 참조하십시오. AWS Cloud Development Kit (AWS CDK)

AWS CDK API레퍼런스

AWS CDK 구성 라이브러리는 CDK 응용 프로그램을 정의하고 응용 프로그램에 CDK 구문을 APIs 추가하는 기능을 제공합니다. 자세한 내용은 AWS CDK API참조를 참조하십시오.

구상 프로그래밍 모델

구성 프로그래밍 모델 (CPM) 은 기본 개념을 추가 AWS CDK 영역으로 확장합니다. 를 사용하는 기타 도구는 다음과 CPM 같습니다.

컨스트럭트 허브

Construct Hub는 오픈 소스 AWS CDK 라이브러리를 찾고, 게시하고, 공유할 수 있는 온라인 레지스트리입니다.

다음 단계

사용을 시작하려면 AWS CDK을 참조하십시오시작하기 AWS CDK.

자세히 알아보기

에 대해 계속 AWS CDK알아보려면 다음을 참조하십시오.

와 관련된 주제에 대한 자세한 내용은 AWS CDK다음을 참조하십시오.

  • AWS CloudFormation 개념 — AWS CDK 은 (와) 함께 AWS CloudFormation사용할 수 있도록 만들어졌으므로 주요 AWS CloudFormation 개념을 배우고 이해하는 것이 좋습니다.

  • AWS 용어집 — 여러 곳에서 AWS사용되는 주요 용어에 대한 정의

서버리스 애플리케이션 개발 및 배포를 단순화하는 데 사용할 수 AWS CDK 있는 관련 도구에 대한 자세한 내용은 다음을 참조하십시오.

  • AWS Serverless Application Model— 서버리스 애플리케이션을 구축하고 실행하는 경험을 단순화하고 개선하는 오픈 소스 개발자 도구입니다. AWS

  • AWSChalice— 서버리스 앱을 작성하기 위한 프레임워크입니다. Python