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 앱이라고 합니다.

앱 정의

프로젝트의 애플리케이션 파일에서 앱 인스턴스를 정의하여 앱을 생성합니다. 이렇게 하려면 App AWS 구성 라이브러리에서 구문을 가져와 사용합니다. 이 App 구문에는 초기화 인수가 필요하지 않습니다. 루트로 사용할 수 있는 유일한 구문입니다.

AWS 구성 라이브러리의 AppStack 클래스는 고유한 구조입니다. 다른 구문에 비해 자체적으로 AWS 리소스를 구성하지는 않습니다. 대신 다른 구문에 컨텍스트를 제공하는 데 사용됩니다. AWS 리소스를 나타내는 모든 구문은 구문 범위 내에서 직접 또는 간접적으로 정의되어야 합니다. Stack Stack구문은 구문 범위 내에서 정의됩니다. App

그런 다음 앱을 합성하여 스택용 AWS CloudFormation 템플릿을 만듭니다. 다음은 그 예제입니다.

TypeScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
JavaScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
Python
app = App() MyFirstStack(app, "hello-cdk") app.synth()
Java
App app = new App(); new MyFirstStack(app, "hello-cdk"); app.synth();
C#
var app = new App(); new MyFirstStack(app, "hello-cdk"); app.Synth();
Go
app := awscdk.NewApp(nil) MyFirstStack(app, "MyFirstStack", &MyFirstStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil)

단일 앱 내의 스택은 서로의 리소스 및 속성을 쉽게 참조할 수 있습니다. 스택을 올바른 순서로 배포할 수 있도록 스택 간의 AWS CDK 종속성을 유추합니다. 단일 명령으로 앱 내에 스택 일부 또는 전체를 배포할 수 있습니다. cdk deploy

구성 트리

구문은 App 클래스를 루트로 하여 모든 구문에 전달되는 scope 인수를 사용하여 다른 구문 내에서 정의됩니다. 이런 방식으로 AWS CDK 앱은 구성 트리라고 하는 구문의 계층 구조를 정의합니다.

이 트리의 루트는 App 클래스의 인스턴스인 앱입니다. 앱 내에서 하나 이상의 스택을 인스턴스화합니다. 스택 내에서 구문을 인스턴스화합니다. 구문은 자체적으로 리소스 또는 기타 구문을 인스턴스화하는 식입니다.

구문은 항상 다른 구문의 범위 내에서 명시적으로 정의되므로 구문 간에 관계가 생성됩니다. 거의 항상 this (Python에서는self) 를 범위로 전달해야 합니다. 이는 새 구문이 현재 구문의 자식임을 나타냅니다. 의도한 패턴은 구문을 파생한 다음 생성자에서 사용하는 구문을 인스턴스화하는 것입니다. Construct

범위를 명시적으로 전달하면 각 구문이 트리에 자신을 추가할 수 있으며, 이 동작은 기본 클래스 내에 완전히 포함됩니다. Construct 이 방법은 에서 지원하는 모든 언어에서 동일한 방식으로 AWS CDK 작동하며 추가 사용자 지정이 필요하지 않습니다.

중요

엄밀히 따지자면 구문을 인스턴스화할 this 때 이외에 다른 범위를 전달할 수 있습니다. 트리의 아무 곳에나, 심지어는 같은 앱의 다른 스택에도 구문을 추가할 수 있습니다. 예를 들어 인수로 전달된 범위에 구문을 추가하는 믹스인 스타일 함수를 작성할 수 있습니다. 여기서 현실적으로 어려운 점은 구문에 대해 선택한 ID가 다른 사람의 범위 내에서 고유한지 쉽게 확인할 수 없다는 것입니다. 또한 이렇게 하면 코드를 이해하고 유지 관리하고 재사용하기가 더 어려워집니다. 논증을 악용하지 않고 의도를 표현할 방법을 찾는 것이 거의 항상 더 좋습니다. scope

AWS CDK 는 트리의 루트에서 각 하위 구문까지의 경로에 있는 모든 구문의 ID를 사용하여 에서 요구하는 고유한 ID를 생성합니다. AWS CloudFormation이 접근 방식은 구성 ID가 AWS CloudFormation네이티브처럼 전체 스택 내에서 고유하지 않고 해당 범위 내에서만 고유해야 한다는 것을 의미합니다. 하지만 구문을 다른 범위로 이동하면 생성된 스택 고유 ID가 변경되고 동일한 리소스로 AWS CloudFormation 간주되지 않습니다.

구문 트리는 코드에 정의한 구문과는 별개입니다. AWS CDK 하지만 모든 구문의 node 속성, 즉 트리에서 해당 구문을 나타내는 노드에 대한 참조를 통해 액세스할 수 있습니다. 각 노드는 Node인스턴스이며, 각 노드의 속성을 통해 트리의 루트와 노드의 부모 범위 및 자식에 액세스할 수 있습니다.

  1. node.children— 구문의 직계 하위입니다.

  2. node.id— 해당 범위 내 구문의 식별자.

  3. node.path— 모든 상위의 ID를 포함한 구문의 전체 경로.

  4. node.root— 구성 트리의 루트 (앱).

  5. node.scope— 구문의 범위 (부모) 이며, 노드가 루트인 경우 정의되지 않습니다.

  6. node.scopes— 구조체의 모든 부모 (루트까지)

  7. node.uniqueId— 트리 내 이 구문의 고유한 영숫자 식별자 (기본적으로 node.path 및 해시에서 생성됨).

구성 트리는 구문이 최종 템플릿의 리소스에 합성되는 암시적 순서를 정의합니다. AWS CloudFormation 한 리소스가 다른 리소스보다 먼저 생성되어야 하는 경우, AWS CloudFormation 그렇지 않으면 일반적으로 AWS 구성 라이브러리가 종속성을 유추합니다. 그런 다음 리소스가 올바른 순서로 생성되었는지 확인합니다.

를 사용하여 두 노드 사이에 명시적 종속성을 추가할 수도 있습니다. node.addDependency() 자세한 내용은 API 참조의 AWS CDK 종속성을 참조하십시오.

는 구성 트리의 모든 노드를 방문하여 각 노드에 대해 작업을 수행할 수 있는 간단한 방법을 AWS CDK 제공합니다. 자세한 설명은 속성 섹션을 참조하세요.

앱 라이프사이클

CDK 앱을 배포하면 다음 단계가 수행됩니다. 이를 라이프사이클이라고 합니다.

AWS CDK 앱은 수명 주기에서 다음 단계를 거칩니다.

  • 구성 (또는 초기화) — 코드는 정의된 모든 구문을 인스턴스화한 다음 함께 연결합니다. 이 단계에서는 모든 구문 (앱, 스택, 하위 구문) 이 인스턴스화되고 생성자 체인이 실행됩니다. 대부분의 앱 코드는 이 단계에서 실행됩니다.

  • 준비prepare 메서드를 구현한 모든 구문은 최종 수정 단계에 참여하여 최종 상태를 설정합니다. 준비 단계는 자동으로 진행됩니다. 사용자는 이 단계에서 어떤 피드백도 볼 수 없습니다. “준비” 후크를 사용할 필요는 거의 없으며 일반적으로 권장되지 않습니다. 이 단계에서 구성 트리를 변경할 때는 작업 순서가 동작에 영향을 줄 수 있으므로 매우 주의해야 합니다.

  • 유효성 검사validate 메서드를 구현한 모든 구문은 올바르게 배포될 수 있는 상태인지 확인하기 위해 자체 유효성을 검사할 수 있습니다. 이 단계에서 발생하는 모든 검증 실패에 대한 알림을 받게 됩니다. 일반적으로 가능한 한 빨리 (보통 입력이 들어오는 즉시) 검증을 수행하고 가능한 한 빨리 예외를 발생시키는 것이 좋습니다. 검증을 조기에 수행하면 스택 추적이 더 정확해지기 때문에 안정성이 향상되고 코드가 안전하게 계속 실행될 수 있습니다.

  • 합성 — AWS CDK 앱 실행의 마지막 단계입니다. 호출에 의해 트리거되며app.synth(), 구성 트리를 탐색하고 모든 구문에서 synthesize 메서드를 호출합니다. 구현하는 구문은 합성에 참여하고 결과 클라우드 어셈블리에 배포 아티팩트를 내보낼 synthesize 수 있습니다. 이러한 아티팩트에는 AWS CloudFormation 템플릿, AWS Lambda 애플리케이션 번들, 파일 및 Docker 이미지 자산, 기타 배포 아티팩트가 포함됩니다. 클라우드 어셈블리이 단계의 출력을 설명합니다. 대부분의 경우 synthesize 메서드를 구현하지 않아도 됩니다.

  • 배포 — 이 단계에서는 합성 단계에서 생성된 배포 아티팩트 클라우드 어셈블리를 AWS CDK CLI 가져와 환경에 배포합니다. AWS Amazon S3와 Amazon ECR 또는 필요한 곳 어디에나 자산을 업로드합니다. 그런 다음 AWS CloudFormation 배포를 시작하여 애플리케이션을 배포하고 리소스를 생성합니다.

AWS CloudFormation 배포 단계가 시작될 무렵에는 AWS CDK 앱이 이미 완료되고 종료된 상태입니다. 이는 다음과 같은 의미를 가집니다.

  • AWS CDK 앱은 배포 중에 발생하는 이벤트 (예: 리소스 생성 또는 전체 배포 완료) 에 응답할 수 없습니다. 배포 단계에서 코드를 실행하려면 코드를 AWS CloudFormation 템플릿에 사용자 지정 리소스로 삽입해야 합니다. 앱에 사용자 지정 리소스를 추가하는 방법에 대한 자세한 내용은 AWS CloudFormation 모듈 또는 사용자 지정 리소스 예제를 참조하십시오.

  • AWS CDK 앱이 실행 당시에는 알 수 없는 값으로 작동해야 할 수도 있습니다. 예를 들어 AWS CDK 앱이 자동으로 생성된 이름으로 Amazon S3 버킷을 정의하고 사용자가 bucket.bucketName (Python:bucket_name) 속성을 검색하는 경우 해당 값은 배포된 버킷의 이름이 아닙니다. 대신 Token 값을 얻게 됩니다. 특정 값을 사용할 수 있는지 확인하려면 cdk.isUnresolved(value) (Python:is_unresolved) 를 호출하십시오. 세부 정보는 토큰를 참조하세요.

클라우드 어셈블리

app.synth() 호출하면 앱에서 클라우드 어셈블리를 AWS CDK 합성하도록 지시합니다. 일반적으로 클라우드 어셈블리와 직접 상호 작용하지 않습니다. 앱을 클라우드 환경에 배포하는 데 필요한 모든 것이 포함된 파일입니다. 예를 들어 앱의 각 스택에 대한 AWS CloudFormation 템플릿이 포함되어 있습니다. 또한 앱에서 참조하는 모든 파일 자산 또는 Docker 이미지의 사본도 포함됩니다.

클라우드 어셈블리 형식 지정 방법에 대한 자세한 내용은 클라우드 어셈블리 사양을 참조하십시오.

AWS CDK 앱에서 생성하는 클라우드 어셈블리와 상호 작용하려면 일반적으로 를 사용합니다. AWS CDK CLI 하지만 클라우드 어셈블리 형식을 읽을 수 있는 모든 도구를 사용하여 앱을 배포할 수 있습니다.

앱 실행

CDK는 AWS CDK 앱 실행 방법을 CLI 알아야 합니다. cdk init명령어를 사용하여 템플릿에서 프로젝트를 만든 경우 앱 cdk.json 파일에 app 키가 포함됩니다. 이 키는 앱이 작성된 언어에 필요한 명령을 지정합니다. 언어에 컴파일이 필요한 경우 앱을 실행하기 전에 명령줄에서 이 단계를 수행하므로 잊지 말고 실행해야 합니다.

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }
Go
{ "app": "go mod download && go run my-app.go" }

CLICDK를 사용하여 프로젝트를 만들지 않았거나 에서 cdk.json 지정한 명령줄을 재정의하려는 경우 명령을 실행할 때 --app 옵션을 사용할 수 있습니다. cdk

$ cdk --app 'executable' cdk-command ...

명령의 실행 가능한 부분은 CDK 애플리케이션을 실행하기 위해 실행해야 하는 명령을 나타냅니다. 이러한 명령에는 공백이 포함되므로 표시된 대로 따옴표를 사용하십시오. cdk-명령은 앱으로 수행하려는 작업을 CLI CDK에 deploy 알려주는 synth OR와 같은 하위 명령입니다. 이 뒤에 해당 하위 명령에 필요한 추가 옵션을 모두 포함하세요.

또한 이미 AWS CDK CLI 합성된 클라우드 어셈블리와 직접 상호 작용할 수도 있습니다. 이렇게 하려면 클라우드 어셈블리가 저장된 디렉터리를 전달해야 합니다. --app 다음 예제는 저장되어 있는 클라우드 어셈블리에 정의된 스택을 나열합니다. ./my-cloud-assembly

$ cdk --app ./my-cloud-assembly ls