v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CDK 스택은 가장 작은 단일 배포 단위입니다. CDK 구문을 사용하여 정의하는 AWS 리소스 모음을 나타냅니다. CDK 앱을 배포하면 CDK 스택 내의 리소스가 AWS CloudFormation 스택으로 함께 배포됩니다. AWS CloudFormation 스택에 대한 자세한 내용은 AWS CloudFormation 사용 설명서의 AWS CloudFormation 스택을 사용하여 AWS 리소스를 단일 단위로 관리를 참조하세요.
Stack
구문을 확장하거나 이 구문에서 상속하여 스택을 정의합니다. 다음 예에서는 스택 파일이라고 하는 별도의 파일에 CDK 스택을 정의하기 위한 일반적인 패턴입니다. 여기서 Stack
클래스를 확장하거나 상속하고 scope
, id
, props
를 수락하는 생성자를 정의합니다. 그런 다음 수신된 scope
, id
, props
와 함께 super
를 사용하여 기본 Stack
클래스 생성자를 간접적으로 호출합니다.
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class MyCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define your constructs here
}
}
이전 예에서는 스택만 정의했습니다. 스택을 생성하려면 CDK 앱의 컨텍스트 내에서 스택을 인스턴스화해야 합니다. 일반적인 패턴은 CDK 앱을 정의하고 애플리케이션 파일이라고 하는 별도의 파일에서 스택을 초기화하는 것입니다.
다음은 MyCdkStack
이라는 CDK 스택을 생성하는 예입니다. 여기서 CDK 앱이 생성되고 앱의 컨텍스트에서 MyCdkStack
이 인스턴스화됩니다.
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { MyCdkStack } from '../lib/my-cdk-stack';
const app = new cdk.App();
new MyCdkStack(app, 'MyCdkStack', {
});
다음 예에서는 2개의 스택이 들어 있는 CDK 앱을 생성합니다.
const app = new App();
new MyFirstStack(app, 'stack1');
new MySecondStack(app, 'stack2');
app.synth();
스택 API 정보
Stack
객체는 다음을 포함한 풍부한 API를 제공합니다.
-
Stack.of(construct)
- 구문이 정의된 스택을 반환하는 정적 메서드입니다. 이는 재사용 가능한 구문 내에서 스택과 상호 작용해야 하는 경우에 유용합니다. 범위에서 스택을 찾을 수 없는 경우 직접 호출이 실패합니다. -
stack.stackName
(Python:stack_name
) - 스택의 물리적 이름을 반환합니다. 앞서 언급한 것처럼 모든 AWS CDK 스택에는 합성 중에가 확인할 AWS CDK 수 있는 물리적 이름이 있습니다. -
stack.region
및stack.account
-이 스택이 배포될 AWS 리전과 계정을 각각 반환합니다. 이들 속성은 다음 중 하나를 반환합니다.-
스택이 정의될 때 명시적으로 지정된 계정 또는 리전
-
이 스택이 환경에 구애받지 않음을 나타내기 위해 계정 및 리전에 대한 AWS CloudFormation 의사 파라미터로 확인되는 문자열 인코딩 토큰
스택에 대한 환경이 결정되는 방법에 대한 자세한 내용은 의 환경 AWS CDK 섹션을 참조하세요.
-
-
stack.addDependency(stack)
(Python:stack.add_dependency(stack)
) – 2개의 스택 간의 종속성 순서를 명시적으로 정의하는 데 사용할 수 있습니다. cdk deploy 명령은 여러 스택을 한 번에 배포할 때 이 순서를 따릅니다. -
stack.tags
- 스택 수준 태그를 추가하거나 제거하는 데 사용할 수 있는 TagManager를 반환합니다. 이 태그 관리자는 스택 내의 모든 리소스에 태그를 지정하고 스택이 생성될 때 스택 자체에도 태그를 지정합니다 AWS CloudFormation. -
stack.partition
,stack.urlSuffix
(Python:url_suffix
),stack.stackId
(Python:stack_id
) 및stack.notificationArn
(Python:notification_arn
) AWS CloudFormation -와 같은 각 의사 파라미터로 확인되는 토큰을 반환합니다{ "Ref": "AWS::Partition" }
. 이러한 토큰은 AWS CDK 프레임워크가 크로스 스택 참조를 식별할 수 있도록 특정 스택 객체와 연결됩니다. -
stack.availabilityZones
(Python:availability_zones
) - 이 스택이 배포된 환경에서 사용 가능한 가용 영역 세트를 반환합니다. 환경에 관계없는 스택의 경우 이는 항상 가용 영역이 2개 있는 배열을 반환합니다. 환경별 스택의 경우는 환경을 AWS CDK 쿼리하고 지정한 리전에서 사용 가능한 정확한 가용 영역 세트를 반환합니다. -
stack.parseArn(arn)
및stack.formatArn(comps)
(Python:parse_arn
,format_arn
) - Amazon 리소스 이름(ARN)으로 작업하는 데 사용할 수 있습니다. -
stack.toJsonString(obj)
(Python:to_json_string
) - 템플릿에 포함할 수 있는 JSON 문자열로 임의 객체를 포맷하는 데 사용할 수 있습니다 AWS CloudFormation . 배포 중에만 확인되는 토큰, 속성 및 참조가 객체에 포함될 수 있습니다. -
stack.templateOptions
(Python:template_options
) - 스택에 대한 변환, 설명 및 메타데이터와 같은 AWS CloudFormation 템플릿 옵션을 지정하는 데 사용합니다.
스택 작업
스택은 AWS 환경으로 AWS CloudFormation 스택으로 배포됩니다. 환경은 특정 AWS 계정 및를 다룹니다 AWS 리전.
여러 스택이 있는 앱에 대해 cdk synth
명령을 실행하면 클라우드 어셈블리에 각 스택 인스턴스에 대한 별도의 템플릿이 포함됩니다. 두 스택이 동일한 클래스의 인스턴스인 경우에도는 스택을 두 개의 개별 템플릿으로 AWS CDK 내보냅니다.
cdk synth
명령에서 스택 이름을 지정하여 각 템플릿을 합성할 수 있습니다. 다음 예에서는 stack1
에 대한 템플릿을 합성합니다.
$
cdk synthstack1
이 접근 방식은 AWS CloudFormation 템플릿을 여러 번 배포하고 AWS CloudFormation 파라미터를 통해 파라미터를 지정할 수 있는 템플릿이 일반적으로 사용되는 방식과 개념적으로 다릅니다. AWS CloudFormation 파라미터는에서 정의할 수 있지만 AWS CDK배포 중에만 확인되므로 일반적으로 권장되지 AWS CloudFormation 않습니다. 즉, 코드에서 해당 값을 확인할 수 없습니다.
예를 들어 파라미터 값을 기반으로 앱에 리소스를 조건부로 포함하려면 AWS CloudFormation 조건을 설정하고 해당 조건으로 리소스에 태그를 지정해야 합니다. 는 합성 시 구체적인 템플릿이 확인되는 접근 방식을 AWS CDK 취합니다. 따라서 if
문으로 값을 확인하여 리소스를 정의해야 하는지 아니면 일부 동작을 적용해야 하는지 결정할 수 있습니다.
참고
AWS CDK 는 합성 시간 동안 가능한 한 많은 해상도를 제공하여 프로그래밍 언어를 이상적이고 자연스럽게 사용할 수 있도록 합니다.
다른 구문과 마찬가지로 스택을 그룹으로 구성할 수 있습니다. 다음 코드는 컨트롤 플레인, 데이터 플레인 및 모니터링 스택의 세 가지 스택으로 구성된 서비스의 예를 보여줍니다. 서비스 구문은 베타 환경용으로 한 번, 프로덕션 환경용으로 한 번, 총 두 번 정의됩니다.
import { App, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
interface EnvProps {
prod: boolean;
}
// imagine these stacks declare a bunch of related resources
class ControlPlane extends Stack {}
class DataPlane extends Stack {}
class Monitoring extends Stack {}
class MyService extends Construct {
constructor(scope: Construct, id: string, props?: EnvProps) {
super(scope, id);
// we might use the prod argument to change how the service is configured
new ControlPlane(this, "cp");
new DataPlane(this, "data");
new Monitoring(this, "mon"); }
}
const app = new App();
new MyService(app, "beta");
new MyService(app, "prod", { prod: true });
app.synth();
이 AWS CDK 앱은 결국 6개의 스택으로 구성되며, 각 환경에 대해 3개입니다.
$
cdk ls
betacpDA8372D3 betadataE23DB2BA betamon632BD457 prodcp187264CE proddataF7378CE5 prodmon631A1083
AWS CloudFormation 스택의 물리적 이름은 트리에서 스택의 구문 경로를 AWS CDK 기반으로에 의해 자동으로 결정됩니다. 기본적으로 스택의 이름은 Stack
객체의 구문 ID에서 파생됩니다. 그러나 다음과 같이 stackName
prop(Python: stack_name
)을 사용하여 명시적 이름을 지정할 수 있습니다.
new MyStack(this, 'not:a:stack:name', { stackName: 'this-is-stack-name' });
중첩된 스택 작업
중첩된 스택은 부모 스택이라고 하는 다른 스택 내에 생성하는 CDK 스택입니다. NestedStack
구문을 사용하여 중첩된 스택을 생성합니다.
중첩된 스택을 사용하면 여러 스택에 걸쳐 리소스를 구성할 수 있습니다. 중첩 스택은 스택에 대한 AWS CloudFormation 500개 리소스 제한을 우회하는 방법도 제공합니다. 중첩된 스택은 해당 스택을 포함하는 스택에서 하나의 리소스로만 계산됩니다. 그러나 추가 중첩된 스택을 포함하여 최대 500개의 리소스를 포함할 수 있습니다.
중첩된 스택의 범위는 Stack
또는 NestedStack
구문이어야 합니다. 중첩된 스택은 부모 스택 내부에서 어휘적으로 선언될 필요가 없습니다. 중첩된 스택을 인스턴스화할 때 부모 스택을 첫 번째 파라미터(scope
)로 전달하기만 하면 됩니다. 이러한 제한을 제외하면 중첩된 스택에서 구문을 정의하는 것은 일반 스택에서와 똑같습니다.
합성 시 중첩 스택은 배포 시 스테이징 버킷에 업로드되는 자체 AWS CloudFormation 템플릿으로 AWS CDK 합성됩니다. 중첩된 스택은 부모 스택에 바인딩되며 독립적인 배포 아티팩트로 처리되지 않습니다. cdk list
에 의해 나열되지 않으며 cdk
deploy
에 의해 배포될 수 없습니다.
상위 스택과 중첩 스택 간의 참조는 교차 스택 참조와 마찬가지로 생성된 AWS CloudFormation 템플릿의 스택 파라미터 및 출력으로 자동 변환됩니다.
주의
중첩된 스택에 대한 배포 전에는 보안 태세의 변경 사항이 표시되지 않습니다. 이 정보는 최상위 스택에 대해서만 표시됩니다.