AWS CDK 프로젝트 - AWS Cloud Development Kit (AWS CDK) v2

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

AWS CDK 프로젝트

AWS Cloud Development Kit (AWS CDK) 프로젝트는 CDK 코드가 있는 파일과 폴더를 나타냅니다. 콘텐츠는 프로그래밍 언어에 따라 달라집니다.

AWS CDK 프로젝트는 수동으로 생성하거나 AWS CDK Command Line Interface(AWS CDK CLI) cdk init 명령을 사용하여 생성할 수 있습니다. 이 주제에서는 AWS CDK CLI에서 생성된 파일 및 폴더의 프로젝트 구조와 이름 지정 규칙에 대해 알아보겠습니다. 필요에 맞게 CDK 프로젝트를 사용자 지정하고 구성할 수 있습니다.

참고

AWS CDK CLI로 생성된 프로젝트 구조는 시간이 지남에 따라 버전마다 다를 수 있습니다.

범용 파일 및 폴더

.git

git이 설치되어 있으면 AWS CDK CLI가 자동으로 프로젝트의 Git 리포지토리를 초기화합니다. .git 디렉터리에는 리포지토리에 대한 정보가 들어 있습니다.

.gitignore

Git에서 무시할 파일과 폴더를 지정하는 데 사용하는 텍스트 파일입니다.

README.md

AWS CDK 프로젝트 관리를 위한 기본 지침과 중요한 정보를 제공하는 텍스트 파일입니다. 필요에 따라 이 파일을 수정하여 CDK 프로젝트와 관련된 중요한 정보를 문서화하세요.

cdk.json

AWS CDK에 대한 구성 파일입니다. 이 파일은 AWS CDK CLI에 앱을 실행하는 방법에 대한 지침을 제공합니다.

언어별 파일 및 폴더

다음 파일과 폴더는 지원되는 각 프로그래밍 언어에 고유합니다.

TypeScript

다음은 my-cdk-ts-project 명령을 사용하여 cdk init --language typescript 디렉터리에 생성된 예제 프로젝트입니다.

my-cdk-ts-project ├── .git ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── my-cdk-ts-project.ts ├── cdk.json ├── jest.config.js ├── lib │ └── my-cdk-ts-project-stack.ts ├── node_modules ├── package-lock.json ├── package.json ├── test │ └── my-cdk-ts-project.test.ts └── tsconfig.json
.npmignore

npm 레지스트리에 패키지를 게시할 때 무시할 파일과 폴더를 지정하는 파일입니다. 이 파일은 .gitignore와 비슷하지만 npm 패키지에만 해당합니다.

bin/my-cdk-ts-project.ts

애플리케이션 파일이 CDK 앱을 정의합니다. CDK 프로젝트는 하나 이상의 애플리케이션 파일을 포함할 수 있습니다. 애플리케이션 파일은 bin 폴더에 저장됩니다.

다음은 CDK 앱을 정의하는 기본 애플리케이션 파일의 예입니다.

#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { MyCdkTsProjectStack } from '../lib/my-cdk-ts-project-stack'; const app = new cdk.App(); new MyCdkTsProjectStack(app, 'MyCdkTsProjectStack');
jest.config.js

Jest의 구성 파일입니다. Jest는 인기 있는 JavaScript 테스트 프레임워크입니다.

lib/my-cdk-ts-project-stack.ts

스택 파일이 CDK 스택을 정의합니다. 스택 내에서 구문을 사용하여 AWS 리소스와 속성을 정의합니다.

다음은 CDK 스택을 정의하는 기본 스택 파일의 예입니다.

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class MyCdkTsProjectStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // code that defines your resources and properties go here } }
node_modules

Node.js 프로젝트의 종속성이 있는 프로젝트의 공통 폴더입니다.

package-lock.json

종속성의 버전을 관리하기 위해 package.json 파일과 함께 작동하는 메타데이터 파일입니다.

package.json

Node.js 프로젝트에 일반적으로 사용되는 메타데이터 파일입니다. 이 파일에는 프로젝트 이름, 스크립트 정의, 종속성 및 기타 가져오기 프로젝트 수준 정보와 같은 CDK 프로젝트에 대한 정보가 포함되어 있습니다.

test/my-cdk-ts-project.test.ts

CDK 프로젝트에 대한 테스트를 구성하기 위해 테스트 폴더가 생성됩니다. 샘플 테스트 파일도 생성됩니다.

TypeScript로 테스트를 작성하고, 테스트를 실행하기 전에 Jest를 사용하여 TypeScript 코드를 컴파일할 수 있습니다.

tsconfig.json

컴파일러 옵션과 프로젝트 설정을 지정하는 TypeScript 프로젝트에 사용되는 구성 파일입니다.

JavaScript

다음은 my-cdk-js-project 명령을 사용하여 cdk init --language javascript 디렉터리에 생성된 예제 프로젝트입니다.

my-cdk-js-project ├── .git ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── my-cdk-js-project.js ├── cdk.json ├── jest.config.js ├── lib │ └── my-cdk-js-project-stack.js ├── node_modules ├── package-lock.json ├── package.json └── test └── my-cdk-js-project.test.js
.npmignore

npm 레지스트리에 패키지를 게시할 때 무시할 파일과 폴더를 지정하는 파일입니다. 이 파일은 .gitignore와 비슷하지만 npm 패키지에만 해당합니다.

bin/my-cdk-js-project.js

애플리케이션 파일이 CDK 앱을 정의합니다. CDK 프로젝트는 하나 이상의 애플리케이션 파일을 포함할 수 있습니다. 애플리케이션 파일은 bin 폴더에 저장됩니다.

다음은 CDK 앱을 정의하는 기본 애플리케이션 파일의 예입니다.

#!/usr/bin/env node const cdk = require('aws-cdk-lib'); const { MyCdkJsProjectStack } = require('../lib/my-cdk-js-project-stack'); const app = new cdk.App(); new MyCdkJsProjectStack(app, 'MyCdkJsProjectStack');
jest.config.js

Jest의 구성 파일입니다. Jest는 인기 있는 JavaScript 테스트 프레임워크입니다.

lib/my-cdk-js-project-stack.js

스택 파일이 CDK 스택을 정의합니다. 스택 내에서 구문을 사용하여 AWS 리소스와 속성을 정의합니다.

다음은 CDK 스택을 정의하는 기본 스택 파일의 예입니다.

const { Stack, Duration } = require('aws-cdk-lib'); class MyCdkJsProjectStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // code that defines your resources and properties go here } } module.exports = { MyCdkJsProjectStack }
node_modules

Node.js 프로젝트의 종속성이 있는 프로젝트의 공통 폴더입니다.

package-lock.json

종속성의 버전을 관리하기 위해 package.json 파일과 함께 작동하는 메타데이터 파일입니다.

package.json

Node.js 프로젝트에 일반적으로 사용되는 메타데이터 파일입니다. 이 파일에는 프로젝트 이름, 스크립트 정의, 종속성 및 기타 가져오기 프로젝트 수준 정보와 같은 CDK 프로젝트에 대한 정보가 포함되어 있습니다.

test/my-cdk-js-project.test.js

CDK 프로젝트에 대한 테스트를 구성하기 위해 테스트 폴더가 생성됩니다. 샘플 테스트 파일도 생성됩니다.

JavaScript로 테스트를 작성하고, 테스트를 실행하기 전에 Jest를 사용하여 JavaScript 코드를 컴파일할 수 있습니다.

Python

다음은 my-cdk-py-project 명령을 사용하여 cdk init --language python 디렉터리에 생성된 예제 프로젝트입니다.

my-cdk-py-project ├── .git ├── .gitignore ├── .venv ├── README.md ├── app.py ├── cdk.json ├── my_cdk_py_project │ ├── __init__.py │ └── my_cdk_py_project_stack.py ├── requirements-dev.txt ├── requirements.txt ├── source.bat └── tests ├── __init__.py └── unit
.venv

CDK CLI는 프로젝트에 대한 가상 환경을 자동으로 생성합니다. .venv 디렉터리는 이 가상 환경을 나타냅니다.

app.py

애플리케이션 파일이 CDK 앱을 정의합니다. CDK 프로젝트는 하나 이상의 애플리케이션 파일을 포함할 수 있습니다.

다음은 CDK 앱을 정의하는 기본 애플리케이션 파일의 예입니다.

#!/usr/bin/env python3 import os import aws_cdk as cdk from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack app = cdk.App() MyCdkPyProjectStack(app, "MyCdkPyProjectStack") app.synth()
my_cdk_py_project

스택 파일이 있는 디렉터리입니다. CDK CLI는 여기에 다음을 생성합니다.

  • __init__.py – 빈 Python 패키지 정의 파일입니다.

  • my_cdk_py_project – CDK 스택을 정의하는 파일입니다. 그런 다음 구문을 사용하여 스택 내에서 AWS 리소스와 속성을 정의합니다.

다음은 스택 파일의 예입니다.

from aws_cdk import Stack from constructs import Construct class MyCdkPyProjectStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # code that defines your resources and properties go here
requirements-dev.txt

requirements.txt와 비슷하지만 프로덕션보다는 개발 목적으로 종속성을 관리하는 데 사용되는 파일입니다.

requirements.txt

Python 프로젝트에서 프로젝트 종속성을 지정하고 관리하는 데 사용되는 공용 파일입니다.

source.bat

Python 가상 환경을 설정하는 데 사용되는 Windows용 배치 파일입니다.

tests

CDK 프로젝트에 대한 테스트가 있는 디렉터리입니다.

다음은 유닛 테스트의 예입니다.

import aws_cdk as core import aws_cdk.assertions as assertions from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack def test_sqs_queue_created(): app = core.App() stack = MyCdkPyProjectStack(app, "my-cdk-py-project") template = assertions.Template.from_stack(stack) template.has_resource_properties("AWS::SQS::Queue", { "VisibilityTimeout": 300 })
Java

다음은 my-cdk-java-project 명령을 사용하여 cdk init --language java 디렉터리에 생성된 예제 프로젝트입니다.

my-cdk-java-project ├── .git ├── .gitignore ├── README.md ├── cdk.json ├── pom.xml └── src ├── main └── test
pom.xml

CDK 프로젝트에 대한 구성 정보와 메타데이터가 들어 있는 파일입니다. 이 파일은 Maven의 일부입니다.

src/main

애플리케이션스택 파일이 있는 디렉터리입니다.

다음은 예제 애플리케이션 파일입니다.

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Environment; import software.amazon.awscdk.StackProps; import java.util.Arrays; public class MyCdkJavaProjectApp { public static void main(final String[] args) { App app = new App(); new MyCdkJavaProjectStack(app, "MyCdkJavaProjectStack", StackProps.builder() .build()); app.synth(); } }

다음은 예제 스택 파일입니다.

package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; public class MyCdkJavaProjectStack extends Stack { public MyCdkJavaProjectStack(final Construct scope, final String id) { this(scope, id, null); } public MyCdkJavaProjectStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // code that defines your resources and properties go here } }
src/test

테스트 파일이 있는 디렉터리입니다. 다음은 그 예제입니다.

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.assertions.Template; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Test; public class MyCdkJavaProjectTest { @Test public void testStack() throws IOException { App app = new App(); MyCdkJavaProjectStack stack = new MyCdkJavaProjectStack(app, "test"); Template template = Template.fromStack(stack); template.hasResourceProperties("AWS::SQS::Queue", new HashMap<String, Number>() {{ put("VisibilityTimeout", 300); }}); } }
C#

다음은 my-cdk-csharp-project 명령을 사용하여 cdk init --language csharp 디렉터리에 생성된 예제 프로젝트입니다.

my-cdk-csharp-project ├── .git ├── .gitignore ├── README.md ├── cdk.json └── src ├── MyCdkCsharpProject └── MyCdkCsharpProject.sln
src/MyCdkCsharpProject

애플리케이션스택 파일이 있는 디렉터리입니다.

다음은 예제 애플리케이션 파일입니다.

using Amazon.CDK; using System; using System.Collections.Generic; using System.Linq; namespace MyCdkCsharpProject { sealed class Program { public static void Main(string[] args) { var app = new App(); new MyCdkCsharpProjectStack(app, "MyCdkCsharpProjectStack", new StackProps{}); app.Synth(); } } }

다음은 예제 스택 파일입니다.

using Amazon.CDK; using Constructs; namespace MyCdkCsharpProject { public class MyCdkCsharpProjectStack : Stack { internal MyCdkCsharpProjectStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // code that defines your resources and properties go here } } }

이 디렉터리에는 다음 항목도 있습니다.

  • GlobalSuppressions.cs – 프로젝트 전체에서 특정 컴파일러 경고 또는 오류를 억제하는 데 사용되는 파일입니다.

  • .csproj – 프로젝트 설정, 종속성 및 빌드 구성을 정의하는 데 사용되는 XML 기반 파일입니다.

src/MyCdkCsharpProject.sln

관련 프로젝트를 구성하고 관리하는 데 사용되는 Microsoft Visual Studio Solution File입니다.

Go

다음은 my-cdk-go-project 명령을 사용하여 cdk init --language go 디렉터리에 생성된 예제 프로젝트입니다.

my-cdk-go-project ├── .git ├── .gitignore ├── README.md ├── cdk.json ├── go.mod ├── my-cdk-go-project.go └── my-cdk-go-project_test.go
go.mod

모듈 정보가 들어 있고 Go 프로젝트의 종속성과 버전 관리를 관리하는 데 사용되는 파일입니다.

my-cdk-go-project.go

CDK 애플리케이션과 스택을 정의하는 파일입니다.

다음은 그 예제입니다.

package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) type MyCdkGoProjectStackProps struct { awscdk.StackProps } func NewMyCdkGoProjectStack(scope constructs.Construct, id string, props *MyCdkGoProjectStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // The code that defines your resources and properties go here return stack } func main() { defer jsii.Close() app := awscdk.NewApp(nil) NewMyCdkGoProjectStack(app, "MyCdkGoProjectStack", &MyCdkGoProjectStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil) } func env() *awscdk.Environment { return nil }
my-cdk-go-project_test.go

샘플 테스트를 정의하는 파일입니다.

다음은 그 예제입니다.

package main import ( "testing" "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/aws-cdk-go/awscdk/v2/assertions" "github.com/aws/jsii-runtime-go" ) func TestMyCdkGoProjectStack(t *testing.T) { // GIVEN app := awscdk.NewApp(nil) // WHEN stack := NewMyCdkGoProjectStack(app, "MyStack", nil) // THEN template := assertions.Template_FromStack(stack, nil) template.HasResourceProperties(jsii.String("AWS::SQS::Queue"), map[string]interface{}{ "VisibilityTimeout": 300, }) }