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 명령줄 인터페이스 (AWS CDK CLI) cdk init 명령을 사용하여 만들 수 있습니다. 이 주제에서는 AWS CDK CLI로 생성된 파일 및 폴더의 프로젝트 구조와 명명 규칙을 참조합니다. 필요에 맞게 CDK 프로젝트를 사용자 지정하고 구성할 수 있습니다.

참고

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

범용 파일 및 폴더

.git

git 설치한 경우 는 프로젝트의 Git 저장소를 AWS CDK CLI 자동으로 초기화합니다. .git디렉토리에는 저장소에 대한 정보가 들어 있습니다.

.gitignore

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

README.md

AWS CDK 프로젝트 관리를 위한 기본 지침과 중요한 정보를 제공하는 텍스트 파일입니다. 필요에 따라 이 파일을 수정하여 CDK 프로젝트에 관한 중요한 정보를 기록하십시오.

cdk.json

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

언어별 파일 및 폴더

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

TypeScript

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

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/ .ts my-cdk-ts-project

애플리케이션 파일은 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.js프로젝트에 대한 종속성을 포함하는 프로젝트의 공통 폴더입니다.

package-lock.json

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

package.json

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

테스트/ my-cdk-ts-project .test.ts

테스트 폴더는 CDK 프로젝트의 테스트를 정리하기 위해 생성됩니다. 샘플 테스트 파일도 생성됩니다.

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

tsconfig.json

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

JavaScript

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

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/ .js my-cdk-js-project

애플리케이션 파일은 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/ -stack.js my-cdk-js-project

스택 파일은 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.js프로젝트에 대한 종속성을 포함하는 프로젝트의 공통 폴더입니다.

package-lock.json

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

package.json

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

테스트/ my-cdk-js-project .test.js

테스트 폴더는 CDK 프로젝트의 테스트를 정리하기 위해 생성됩니다. 샘플 테스트 파일도 생성됩니다.

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

Python

다음은 cdk init --language python 명령어를 사용하여 my-cdk-py-project 디렉터리에 만든 예제 프로젝트입니다.

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

스택 파일이 들어 있는 디렉터리 CLICDK는 여기에 다음을 생성합니다.

  • __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

Windows이를 위한 Batch 파일은 Python 가상 환경을 설정하는 데 사용됩니다.

테스트

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

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

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#

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

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 기반 파일입니다.

MyCdkCsharpProjectsrc/ .sln

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

Go

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

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, }) }