AWS CDK란 무엇인가요?

AWS CDK (Cloud Development Kit)는 2018년 8월 개발자 프리뷰로 출시되었으며, TypeScript, JavaScript, Java, .NET, Python을 사용해 AWS 인프라를 생성할 수 있게 해줍니다.

예를 들어, DynamoDB 테이블을 생성하는 CloudFormation 템플릿은 이제 다음과 같이 작성할 수 있습니다.

- Resources:
-   NotesTable:
-     Type: AWS::DynamoDB::Table
-     Properties:
-       TableName: ${self:custom.tableName}
-       AttributeDefinitions:
-         - AttributeName: userId
-           AttributeType: S
-         - AttributeName: noteId
-           AttributeType: S
-       KeySchema:
-         - AttributeName: userId
-           KeyType: HASH
-         - AttributeName: noteId
-           KeyType: RANGE
-       BillingMode: PAY_PER_REQUEST


+ const table = new dynamodb.Table(this, "notes", {
+   partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING },
+   sortKey: { name: "noteId", type: dynamodb.AttributeType.STRING },
+   billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
+ });

첫 번째로 눈에 띄는 점은 리소스가 JavaScript의 클래스 인스턴스로 정의된다는 것입니다. 이는 프로그래밍 언어에서 객체를 다루는 방식과 동일하므로 매우 편리합니다. 이제 인프라도 같은 방식으로 다룰 수 있습니다. 두 번째로, 이러한 객체를 재사용할 수 있습니다. 객체를 결합하거나 합성할 수 있습니다. 따라서 항상 동일한 리소스 세트를 생성하는 경우, 이를 새로운 클래스로 만들어 재사용할 수 있습니다!

CDK는 진정한 코드로서의 인프라입니다.

CDK 작동 방식

CDK는 내부적으로 CloudFormation을 사용합니다. 여러분이 작성한 코드를 CloudFormation 템플릿으로 변환합니다. 위 예제에서 보듯, 아래쪽에 코드를 작성하면 위쪽에 CloudFormation 템플릿이 생성됩니다.

CDK 작동 방식

CDK 앱은 여러 개의 스택으로 구성됩니다. 더 정확히 말하면, cdk.Stack 클래스의 여러 인스턴스로 이루어집니다. 이들은 결국 CloudFormation 스택으로 변환되지만, 코드로 표현된 CloudFormation 스택이라고 생각하는 것이 더 적절합니다.

cdk synth를 실행하면 이 스택들이 CloudFormation 템플릿으로 변환됩니다. 그리고 cdk deploy를 실행하면 이 템플릿들을 CloudFormation에 제출합니다. CloudFormation은 이 스택들과 그 안에 정의된 모든 리소스를 생성합니다.

과정은 상당히 직관적입니다. 중요한 점은 내부적으로 CloudFormation을 사용하지만, 더 이상 YAML이나 JSON 템플릿을 직접 다루지 않는다는 것입니다.