AWS CDK란 무엇입니까? - AWS 클라우드 개발 키트(AWS CDK) v2

CDK AWS v2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.

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

AWS CDK란 무엇입니까?

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

AWS CDK는 두 가지 기본 부분으로 구성됩니다.

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

  • AWS CDK 명령줄 인터페이스(AWS CDK CLI) - CDK 앱과 상호 작용하기 위한 명령줄 도구입니다. CDK CLI를 사용하여 AWS CDK 프로젝트를 생성, 관리 및 배포합니다. CDK CLI는 CDK 도구 키트라고도 합니다.

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

CDK 앱 및 프로세스 개요

AWS CDK의 이점

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

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

코드형 인프라를 연습하여 프로그래밍, 설명 및 선언 방식으로 인프라를 생성, 배포 및 유지 관리합니다. IaC를 사용하면 개발자가 코드를 처리하는 것과 동일한 방식으로 인프라를 처리합니다. 이를 통해 인프라 관리에 대한 확장 가능하고 구조화된 접근 방식을 얻을 수 있습니다. IaC에 대해 자세히 알아보려면 백서의 DevOps 소개에서 코드형 인프라를 참조하세요. DevOps AWS

AWS CDK를 사용하면 인프라, 애플리케이션 코드 및 구성을 모두 한 곳에 배치하여 모든 마일스톤에서 완전한 클라우드 배포 가능 시스템을 확보할 수 있습니다. 코드 검토, 유닛 테스트 및 소스 제어와 같은 소프트웨어 엔지니어링 모범 사례를 사용하여 인프라를 더욱 견고하게 만듭니다.

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

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

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

구문 강조 표시 및 지능형 코드 완료와 같이 선호하는 IDE(통합 개발 환경)에서 인프라를 개발할 때의 이점을 누릴 수 있습니다.

VPC 및 Fargate 서비스 구성이 있는 ECS 클러스터에 대한 CDK 설정을 보여주는 코드 조각입니다.
AWS CloudFormation을 통해 인프라 배포

AWS CDK는 AWS CloudFormation과 통합되어에서 인프라를 배포하고 프로비저닝합니다 AWS. AWS CloudFormation은에서 AWS 서비스를 프로비저닝하기 위한 리소스 및 속성 구성을 광범위하게 지원하는 관리형 서비스입니다 AWS. AWS CloudFormation을 사용하면 오류 시 롤백과 함께 인프라 배포를 예측 가능하고 반복적으로 수행할 수 있습니다. 이미 AWS CloudFormation에 익숙한 경우 AWS CDK를 시작할 때 새 IaC 관리 서비스를 배울 필요가 없습니다.

구문으로 애플리케이션 개발을 빠르게 시작

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

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

AWS CDK의 예

다음은 AWS CDK Constructs Library를 사용하여 AWS Fargate 시작 유형의 Amazon Elastic Container Service(Amazon ECS) 서비스를 생성하는 예제입니다. 이 예제에 대한 자세한 내용은 예제: AWS CDK를 사용하여 AWS Fargate 서비스 생성을 참조하세요.

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 템플릿을 생성합니다. https://github.com/awsdocs/aws-cdk-guide/blob/main/doc_source/my_ecs_construct-stack.yaml AWS CDK 앱을 배포하면 다음 유형의 리소스가 50개 이상 생성됩니다.

AWS CDK 기능

AWS CDKGitHub 리포지토리

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

AWS CDK는 오픈 소스이므로 팀이 더 나은 도구로 만들기 위해 기여할 것을 권장합니다. 자세한 내용은 AWS 클라우드 개발 키트(AWS CDK)에 기여를 참조하세요.

AWS CDK API 참조

AWS CDK Construct Library는 CDK 애플리케이션을 정의하고 애플리케이션에 CDK 구문을 추가하는 APIs를 제공합니다. 자세한 내용은 AWS CDK API 참조를 참조하세요.

Construct Programming Model

구성 프로그래밍 모델(CPM)은 AWS CDK의 개념을 추가 도메인으로 확장합니다. CPM을 사용하는 다른 도구는 다음과 같습니다.

Construct Hub

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 서버리스 애플리케이션 모델 - 서버리스 애플리케이션을 구축하고 실행하는 환경을 간소화하고 개선하는 오픈 소스 개발자 도구입니다 AWS.

  • AWS Chalice - Python에서 서버리스 앱을 작성하기 위한 프레임워크입니다.