BLOG

AWS CDK를 통해 인프라 향상
작성일: 2018-12-27

Voiced by Amazon Polly

(원문에서 다운로드받으세요)

 

이 글은 AWS Container Hero Philipp Garbe가 작성하였습니다. Philipp은 독일 스카우트24에서 플랫폼 엔지니어 리더로 일합니다. 그는 더 빠르고 더 자주 출시할 수 있도록 기술과 툴에 의해 추진됩니다. 그는 모든 책무가 자동적으로 생산될 것으로 기대합니다. 여러분은 트위터에서 @pgarbe를 찾을 수 있습니다.

 

인프라 코드(IaC)는 지난 몇 년 동안 많은 팀에 의해 채택되었습니다. 인프라를 쉽게 프로비저닝하고 일관된 환경을 유지하는 데 도움이 됩니다.

 

그러나 선언 템플릿을 사용하면 “일반” 코드에 익숙해진 많은 관례를 여전히 놓칠 수 있습니다. 각 AWS CloudFormation 템플릿이 단지 마지막 프로젝트 또는 StackOverflow의 복사 및 붙여넣기일 뿐이라는 고통을 이미 느끼셨을 겁니다. 하지만 여러분은 이 단편들을 믿으실 수 있습니까? 코드 기반을 통해 개선 사항 또는 보안 수정 사항을 어떻게 조정하십니까? 회사 또는 커뮤니티 내에서 모범 사례를 어떻게 공유할 수 있습니까?

 

다행히도 AWS는 AWS CDK(AWS Cloud Development Kit)에 중요한 AWS CloudFormation을 추가하기 위해 베타 버전을 발행했습니다.

 

AWS CDK의 큰 장점은 무엇인가요?

훌륭한 AWS CloudFormation 템플릿을 작성하는 방법에 대한 모든 모범 사례를 이제 회사 또는 개발자 커뮤니티에서 쉽게 공유할 수 있습니다. 동시에, 여러분은 같은 일을 하는 다른 사람들로부터 이익을 얻을 수 있습니다.

 

예를 들어, Amazon DynamoDB에 대해 생각해봅시다. AWS CloudFormation에서 쉽게 설정할 수 있어야겠죠? 템플릿의 몇 줄만 표시하십시오. 하지만 기다리십시오. 이미 운영 중인 경우 자동 확장, 정기 백업, 가장 중요한 것은 모든 관련 메트릭스에 대한 경보를 설정해야 한다는 겁니다. 이것은 수백줄에 이를 수 있습니다.

 

미리 생각해 보십시오. DynamoDB 데이터베이스도 필요한 또 다른 애플리케이션을 만들어야 할 겁니다. YAML 코드를 모두 복사하여 붙여 넣으십니까? 템플릿에서 일부 버그를 발견하면 나중에 어떻게 되나요? 두 코드 베이스에 모두 수정 사항을 적용하시겠습니까?

 

AWS CDK를 사용하면 모범 사례에 맞는 프로덕션에 준비된 DynamoDB 데이터베이스를 작성할 수 있습니다. npm 패키지로 회사나 다른 사람과 공유하십시오!

 

AWS CDK란?

한 단계를 백업하여 AWS CDK의 모양을 확인하십시오. YAML(또는 JSON)의 선언적 접근법과 비교하여 CDK는 여러분이 인프라를 강제로 선언할 수 있도록 합니다. 주요 언어는 TypeScript이지만 여러 다른 언어도 지원됩니다.

 

Hello, AWS CDK!의 Hello World 예시는 다음과 같습니다.

 

import cdk = require(‘@aws-cdk/cdk’);

import s3 = require(‘@aws-cdk/aws-s3’);

 

class MyStack extends cdk.Stack {

constructor(parent: cdk.App, id: string, props?: cdk.StackProps) {

super(parent, id, props);

 

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

versioned: true

});

}

}

 

class MyApp extends cdk.App {

constructor(argv: string[]) {

super(argv);

 

new MyStack(this, ‘hello-cdk’);

}

}

 

new MyApp().run();

 

은 루트 구조로서 CDK CLI에서 직접 사용하여 AWS CloudFormation 템플릿을 렌더링하고 배포할 수 있습니다.

 

앱은 배포할 수 있는 유닛이고 리전 및 계정에 대한 정보가 포함된 하나 이상의 스택으로 구성됩니다. 여러 리전에 여러 스택을 동시에 배치하는 앱을 만들 수 있습니다.

 

스택에는 DynamoDB 테이블 또는 AWS Lambda 기능과 같은 AWS 리소스를 나타내는 구조가 포함됩니다.

lib는 일반적으로 추가 구조를 캡슐화하는 구성입니다. 이를 통해, 상위 등급의 구조물을 제작하고 재사용할 수 있습니다. 구조는 단지 TypeScript(또는 지원되는 다른 언어)일 뿐이므로, 패키지는 모든 패키지 관리자가 작성하고 공유할 수 있습니다.

 

구성

CDK는 건축에 관한 것이기 때문에 그것들을 이해하는 것이 중요합니다. 이것은 구성 나무라고 불리는 계층 구조 입니다. 구조를 세 가지 수준으로 생각할 수 있습니다.

 

레벨 1: AWS CloudFormation 리소스

이것은 기존 자원에 대한 일대일 매핑이며 자동으로 생성됩니다. 현재 YAML에서 사용하고 있는 자원과 같은 겁니다. 이상적으로는 이런 구조들을 직접 다룰 필요가 없습니다.

 

레벨 2: AWS 구성 라이브러리

이 구조들은 AWS 서비스 수준에 있습니다. 그들은 AWS에 의해 독단적이고, 잘 설계되고, 손으로 쓰여졌습니다. 그들은 제대로 된 디폴트를 가지고 있고, 세부 사항들에 대해 너무 많이 걱정하지 않고 AWS 자원을 쉽게 만들 수 있도록 해야 합니다.

 

예를 들어, 다음은 사용 가능한 모든 가용성 영역에서 개인 및 공용 서브넷을 사용하여 전체 VPC를 생성하는 방법입니다.

 

import ec2 = require(‘@aws-cdk/aws-ec2’);

 

const vpc = new ec2.VpcNetwork(this, ‘VPC’);

 

AWS Construct Library에는 최소 권한 IAM 정책, 이벤트 기반 API 작업, 보안 그룹 및 메트릭에 대한 몇 가지 좋은 개념이 있습니다. 예를 들어, IAM 정책은 사용자의 의도에 따라 자동으로 생성됩니다. Lambda 함수가 SNS 토픽에 가입하면 해당 항목이 해당 기능을 호출할 수 있는 정책이 생성됩니다.

 

Amazon CloudWatch 메트릭을 제공하는 AWS 서비스는 metricXxx()와 return metric object와 같은 기능을 가지고 있으며, 이를 통해 쉽게 경보를 생성할 수 있습니다.

 

new Alarm(this, ‘Alarm’, {

metric: fn.metricErrors(),

threshold: 100,

evaluationPeriods: 2,

});

 

자세한 내용은 AWS Construct Library를 참조하십시오.

 

레벨 3: 여러분의 멋진 물건

여기 흥미로워지는 곳이 있습니다. 앞에서 언급했듯이, 구조는 계층적입니다. 그것들은 다른 구조들에 기초한 더 높은 수준의 추상화일 수 있습니다. 예를 들어 이 수준에서는 자동 노드 배출, 자동 확장 및 모든 올바른 경보를 포함하는 사용자 고유의 Amazon ECS 클러스터 구조를 작성할 수 있습니다. 또는 Amazon RDS 데이터베이스가 모니터링해야 하는 모든 필요한 경보에 대한 구성을 작성할 수 있습니다. 건축을 만들고 공유하는 것은 여러분에게 달려있습니다.

 

결론

AWS가 초기에 공개되서 다행입니다. 그 서류는 이미 훌륭하지만, 아직 모든 것이 다 가려진 것은 아닙니다. 모든 AWS 서비스에 AWS Construct Library Module(레벨 2)이 정의되어 있는 것은 아닙니다. 많은 기업이 순수 AWS CloudFormation 구조(레벨 1)만 가지고 있습니다.

 

개인적으로, 저는 AWS CDK가 여러분이 AWS CloudFormation 코드를 재사용하고 그것을 다른 사람들과 공유할 수 있도록 하기 때문에 큰 진전이라고 생각합니다. 그것은 회사 표준을 쉽게 적용할 수 있게 해주며 사람들이 멋진 기능들을 연구할 수 있게 해주며 “지루한” 코드를 쓰는 데 시간을 덜 쓰게 해 줍니다.

 

원문 URL : https://aws.amazon.com/ko/blogs/aws/boost-your-infrastructure-with-cdk/

** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.