v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔고 2023년 6월 1일에 지원을 종료했습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
식별자 및 AWS CDK
AWS Cloud Development Kit (AWS CDK) 앱을 구축할 때 다양한 유형의 식별자와 이름을 사용합니다. 를 AWS CDK 효과적으로 사용하고 오류를 방지하려면 식별자 유형을 이해하는 것이 중요합니다.
식별자는 생성된 범위 내에서 고유해야 합니다. AWS CDK 애플리케이션에서 전역적으로 고유할 필요는 없습니다.
동일한 범위 내에서 동일한 값의 식별자를 생성하려고 하면 에서 예외가 AWS CDK 발생합니다.
구성 IDs
가장 일반적인 식별자인 id
는 구성 객체를 인스턴스화할 때 두 번째 인수로 전달되는 식별자입니다. 이 식별자는 모든 식별자와 마찬가지로 생성 범위 내에서만 고유해야 하며, 이는 구성 객체를 인스턴스화할 때 첫 번째 인수입니다.
앱amzn-s3-demo-bucket
에 식별자가 있는 두 개의 구성 요소가 있는 예를 살펴보겠습니다. 첫 번째는 식별자 를 사용하여 스택의 범위에 정의됩니다Stack1
. 두 번째는 식별자가 인 스택의 범위에 정의됩니다Stack2
. 서로 다른 범위에 정의되어 있으므로 충돌이 발생하지 않으며 문제 없이 동일한 앱에서 공존할 수 있습니다.
- TypeScript
-
import { App, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
class MyStack extends Stack {
constructor(scope: Construct, id: string, props: StackProps = {}) {
super(scope, id, props);
new s3.Bucket(this, 'amzn-s3-demo-bucket');
}
}
const app = new App();
new MyStack(app, 'Stack1');
new MyStack(app, 'Stack2');
- JavaScript
-
const { App , Stack } = require('aws-cdk-lib');
const s3 = require('aws-cdk-lib/aws-s3');
class MyStack extends Stack {
constructor(scope, id, props = {}) {
super(scope, id, props);
new s3.Bucket(this, 'amzn-s3-demo-bucket');
}
}
const app = new App();
new MyStack(app, 'Stack1');
new MyStack(app, 'Stack2');
- Python
-
from aws_cdk import App, Construct, Stack, StackProps
from constructs import Construct
from aws_cdk import aws_s3 as s3
class MyStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
s3.Bucket(self, "amzn-s3-demo-bucket")
app = App()
MyStack(app, 'Stack1')
MyStack(app, 'Stack2')
- Java
-
// MyStack.java
package com.myorg;
import software.amazon.awscdk.App;
import software.amazon.awscdk.Stack;
import software.amazon.awscdk.StackProps;
import software.constructs.Construct;
import software.amazon.awscdk.services.s3.Bucket;
public class MyStack extends Stack {
public MyStack(final Construct scope, final String id) {
this(scope, id, null);
}
public MyStack(final Construct scope, final String id, final StackProps props) {
super(scope, id, props);
new Bucket(this, "amzn-s3-demo-bucket");
}
}
// Main.java
package com.myorg;
import software.amazon.awscdk.App;
public class Main {
public static void main(String[] args) {
App app = new App();
new MyStack(app, "Stack1");
new MyStack(app, "Stack2");
}
}
- C#
-
using Amazon.CDK;
using constructs;
using Amazon.CDK.AWS.S3;
public class MyStack : Stack
{
public MyStack(Construct scope, string id, IStackProps props) : base(scope, id, props)
{
new Bucket(this, "amzn-s3-demo-bucket");
}
}
class Program
{
static void Main(string[] args)
{
var app = new App();
new MyStack(app, "Stack1");
new MyStack(app, "Stack2");
}
}
경로
AWS CDK 애플리케이션의 구성은 App
클래스에 뿌리를 둔 계층을 형성합니다. 지정된 구성 요소IDs, 상위 구성 요소, 조부모 등의 를 구성 요소 트리의 루트에 대한 의 모음을 경로 로 지칭합니다.
는 AWS CDK 일반적으로 템플릿의 경로를 문자열로 표시합니다. IDs 수준에서 는 일반적으로 스택인 루트 App
인스턴스 바로 아래의 노드에서 시작하는 슬래시로 구분됩니다. 예를 들어 이전 코드 예제에서 두 Amazon S3 버킷 리소스의 경로는 Stack1/amzn-s3-demo-bucket
및 입니다Stack2/amzn-s3-demo-bucket
.
다음 예제와 같이 모든 구성 요소의 경로에 프로그래밍 방식으로 액세스할 수 있습니다. 이렇게 하면 myConstruct
(또는 Python 개발자가 쓸 my_construct
)의 경로가 얻어집니다. 는 생성된 범위 내에서 IDs 고유해야 하므로 AWS CDK 애플리케이션 내에서 경로는 항상 고유합니다.
- TypeScript
-
const path: string = myConstruct.node.path;
- JavaScript
-
const path = myConstruct.node.path;
- Python
-
path = my_construct.node.path
- Java
-
String path = myConstruct.getNode().getPath();
- C#
-
string path = myConstruct.Node.Path;
고유 IDs
AWS CloudFormation 에서는 템플릿IDs의 모든 논리적이 고유해야 합니다. 이로 인해 는 애플리케이션의 각 구성 요소에 대한 고유 식별자를 생성할 수 있어야 AWS CDK 합니다. 리소스에는 전역적으로 고유한 경로(스택에서 특정 리소스까지의 모든 범위 이름)가 있습니다. 따라서 는 경로의 요소를 연결하고 8자리 해시를 추가하여 필요한 고유 식별자를 AWS CDK 생성합니다. (해시는 A/B/C
및 와 같이 AWS CloudFormation 식별자가 동일한 고유한 경로를 구분A/BC
하는 데 필요합니다. AWS CloudFormation 식별자는 영숫자이며 슬래시 또는 기타 구분 문자를 포함할 수 없습니다.) 는 이 문자열을 구성 요소의 고유 ID로 AWS CDK 호출합니다.
일반적으로 AWS CDK 앱은 고유한 에 대해 알 필요가 없습니다IDs. 그러나 다음 예제와 같이 모든 구성 요소의 고유 ID에 프로그래밍 방식으로 액세스할 수 있습니다.
- TypeScript
-
const uid: string = Names.uniqueId(myConstruct);
- JavaScript
-
const uid = Names.uniqueId(myConstruct);
- Python
-
uid = Names.unique_id(my_construct)
- Java
-
String uid = Names.uniqueId(myConstruct);
- C#
-
string uid = Names.Uniqueid(myConstruct);
주소는 CDK 리소스를 고유하게 구분하는 또 다른 종류의 고유 식별자입니다. 경로의 SHA-1 해시에서 파생되어 사람이 읽을 수 없습니다. 그러나 길이가 일정하고 비교적 짧기 때문에(항상 42개의 16진수 문자) '전통적' 고유 ID가 너무 길 수 있는 상황에서 유용합니다. 일부 구성은 고유한 ID 대신 합성된 AWS CloudFormation 템플릿의 주소를 사용할 수 있습니다. 다시 말씀드리지만, 앱은 일반적으로 해당 구성 요소의 주소에 대해 알 필요가 없지만 다음과 같이 구성 요소의 주소를 검색할 수 있습니다.
- TypeScript
-
const addr: string = myConstruct.node.addr;
- JavaScript
-
const addr = myConstruct.node.addr;
- Python
-
addr = my_construct.node.addr
- Java
-
String addr = myConstruct.getNode().getAddr();
- C#
-
string addr = myConstruct.Node.Addr;
논리적 IDs
고유한 IDs 는 리소스를 나타내는 구성에 대해 생성된 AWS CloudFormation 템플릿에서 AWS 리소스의 논리적 식별자(또는 논리적 이름 ) 역할을 합니다.
예를 들어 이전 예제에서 생성되어 AWS::S3::Bucket
리소스가 생성되는 Amazon S3 버킷이 Stack2
있습니다. 리소스의 논리적 ID가 결과 AWS CloudFormation 템플릿Stack2amzn-s3-demo-bucket4DD88B4F
에 있습니다. (이 식별자가 생성되는 방법에 대한 자세한 내용은 섹션을 참조하세요고유 IDs.)
논리적 ID 안정성
리소스가 생성된 후에는 리소스의 논리적 ID를 변경하지 마세요. 는 논리적 ID로 리소스를 AWS CloudFormation 식별합니다. 따라서 리소스의 논리적 ID를 변경하면 는 새 논리적 ID를 사용하여 새 리소스를 AWS CloudFormation 생성한 다음 기존 리소스를 삭제합니다. 리소스 유형에 따라 이로 인해 서비스 중단, 데이터 손실 또는 둘 다 발생할 수 있습니다.