Amazon Web Services 한국 블로그

인프라 코드 자동화를 위한 AWS CDK 개발자용 미리보기 출시

지난 8월에 인프라 코드 자동화(Infra as a Code, IaC)를 좀 더 쉽게 하고 싶어하는 AWS 개발자를 위해 TypeScript, JavaScript 및 .Net 및 Java용 AWS Cloud Development Kit(CDK) 개발자 평가판을 출시하였습니다. (Python도 곧 지원될 예정입니다.)

Example usage of CDK

AWS CDK는 CloudFormation을 통해 클라우드 인프라를 코드로 정의하고 프로비저닝하는 소프트웨어 개발 프레임워크입니다. CDK는 주요 AWS 서비스와 완벽하게 통합되며 AWS 리소스를 명령어로 정의하는 높은 수준의 객체 지향 추상화를 제공합니다. CDK를 사용하면 최신 프로그래밍 언어의 강점을 사용하여 AWS 인프라를 예측 가능하고 효율적인 방식으로 정의할 수 있으므로 전체 개발 경험을 개선 하실 수 있습니다.

사실 CDK는 클라우드 인프라 “컴파일러”와 같습니다. CDK는 Constructs라고 하는 상위 수준의 클래스 라이브러리 세트를 제공하며, 이 라이브러리는 AWS 클라우드 리소스를 추상화하고 AWS 모범 사례를 포함 시킬 수 있습니다. Constructs는 애플리케이션 인프라를 정확히 정의하고 모든 복잡한 상용 논리를 처리하는 객체 지향 CDK 애플리케이션에 간편하게 통합할 수 있습니다.

CDK 애플리케이션을 실행하면 AWS 클라우드 인프라의 “어셈블리 언어”인 CloudFormation 템플릿으로 컴파일됩니다. CloudFormation 프로비저닝 엔진은 이 템플릿을 처리하여 AWS 계정에 배포합니다. CDK 도구를 사용하면 CloudFormation 서비스가 안전하고 신뢰할 수 있는 스택 프로비저닝을 처리하는 동안 애플리케이션 인프라 스택을 손쉽게 정의할 수 있습니다.

기존에 익숙한 도구 경험 제공

AWS CDK는 매일 사용하는 익숙한 환경과 팀 워크플로에서 인프라를 정의할 수 있도록 하여 사용 편의성과 생산성을 극대화합니다. CDK는 많이 사용하는 객체 지향 프로그래밍 언어를 지원하므로, 루프 및 조건 같은 코드 논리를 자연스럽게 표현하여 모든 환경 또는 시나리오에 맞게 인프라를 사용자 지정할 수 있습니다. CDK 코드는 단지 코드이므로 인라인 설명서, 리팩토링 도구, 코드 탐색 및 단위 테스트 같은 기존 IDE 기능이 모두 예상대로 작동합니다. 다음 코드는 인프라 논리 및 환경 컨텍스트(예: 가용 영역 및 리전별 AMI ID)를 사용하여 단일 코드 기반에서 여러 리전에 대한 다양한 애플리케이션 스택을 생성하는 방법을 보여줍니다. 인프라 정의를 복사하고 붙여 넣는 작업은 필요하지 않습니다.

// get the list of AZs for the current region/account

const azs = new cdk.AvailabilityZoneProvider(this).availabilityZones;

 

// get the AMI ID for a specific Windows version in this region

const ami = new ec2.WindowsImage(ec2.WindowsVersion.WindowsServer2016EnglishNanoBase).getImage(this);

 

for (const az of azs) {

// render construct name based on it’s availability zone

const constructName = `InstanceFor${az.replace(/-/g, ).toUpperCase()}`;

 

new ec2.cloudformation.InstanceResource(this, constructName, {

imageId: ami.imageId,

availabilityZone: az,

});

}

세부 정보 추상화

개발자가 최신 프로그래밍 언어 및 객체 지향 기술을 사용하여 CloudFormation 템플릿을 생성할 수 있도록 하는 솔루션은 CDK가 처음이 아닙니다. CDK가 특별한 이유는 AWS 서비스와 완벽하게 통합되어 IAM 정책, 보안 그룹 및 네트워크 구성 같은 주요 리소스를 자동으로 통합하는 유용한 API를 제공한다는 데 있습니다. 예를 들어 Amazon Virtual Private Cloud(VPC)를 인프라에 추가하려면 다음 코드 행을 CDK 애플리케이션에 추가하기만 하면 됩니다.

new ec2.VpcNetwork(this, ‘MyVPC’);

CDK 애플리케이션이 컴파일되면 긴 CloudFormation 템플릿이 생성됩니다. 이 템플릿은 대상 리전의 각 가용 영역에 대한 서브넷과 라우트, 라우트 테이블, 서브넷 라우트 테이블 연결, NAT 게이트웨이, 인터넷 게이트웨이 및 탄력적 IP를 정의하여 작동을 보장합니다. 기본값이 요구 사항을 충족하지 않는 경우에는 고유한 값으로 VPC 파라미터를 손쉽게 재정의할 수 있습니다.

확장성 제공

AWS가 작성하는 CDK Constructs로 제공되는 유용한 API를 활용하는 것에 더해 고유한 모범 사례를 예측 가능하고 재사용 가능한 코드로 정의할 수 있습니다. 예를 들어 항상 암호화가 활성화된 S3 버킷을 생성하는 CDK 애플리케이션을 작성하여 팀이 기본적으로 이 작업을 자연스럽게 수행하도록 할 수 있습니다.

new s3.Bucket(this, ‘EncryptedBucket’, {

encryption: s3.BucketEncryption.KmsManaged

});

특정 사용 사례에 중점을 두고 독특한 클라우드 네이티브 설계 패턴을 인코딩하는 상위 수준의 CDK 애플리케이션을 정의하고 내부에서 공유하거나 전 세계의 모든 사용자와 공유할 수 있습니다. CDK를 사용하여 멋진 애플리케이션이 구축될 것이라 기대합니다.

오픈 소스 지향

CDK는 성당처럼 폐쇄된 공간이 아니라 시장처럼 열린 공간으로 구축되고 있으며 아직 완성되지 않았습니다. Eric S. Raymond는 성당과 시장이라는 에세이에서 두 가지 기본적인 소프트웨어 개발 스타일을 비교하면서 오픈 소스에서는 “보는 눈이 충분하면 모든 버그를 찾을 수 있다”고 이야기하였습니다.

그래서, CDK 역시 오픈 소스로 제공합니다. CDK를 AWS 기반 클라우드 애플리케이션 개발을 위한 최고의 엔드 투 엔드 환경으로 만들려면 여러분의 도움이 필요합니다. aws-cdk GitHub을 방문하여 CDK 시작 방법 및 공헌 방식에 대한 자세한 내용을 살펴봐 주시기 바랍니다. Gitter에 게시물을 올려 대화를 시작하거나, 문제를 제기하여 개발자들과 의견을 나누거나, Pull Request을 제출하여 알고 있는 정보를 제공하거나, 프로젝트를 평가하여 관심을 표해 주시면 감사하겠습니다.

AWS는 언제나 여러분과 협업하기를 바랍니다.

이 글은 AWS Developers Blog의 AWS CDK Developer Preview의 한국어 번역입니다.