식별자 - AWS Cloud Development Kit (AWS CDK) v2

AWS CDK v2 개발자 안내서입니다. 구형 CDK v1은 2022년 6월 1일에 유지 보수에 들어갔고 2023년 6월 1일에 지원이 종료되었습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

식별자

AWS Cloud Development Kit (AWS CDK) 앱을 빌드할 때는 다양한 유형의 식별자와 이름을 사용합니다. AWS CDK 효과적으로 사용하고 오류를 방지하려면 식별자의 유형을 이해하는 것이 중요합니다.

식별자는 생성되는 범위 내에서 고유해야 하며 애플리케이션에서 전체적으로 고유할 필요는 없습니다. AWS CDK

동일한 범위 내에서 값이 같은 식별자를 만들려고 하면 에서 AWS CDK 예외가 발생합니다.

구성 ID

가장 일반적인 식별자는 구성 id 객체를 인스턴스화할 때 두 번째 인수로 전달되는 식별자입니다. 모든 식별자와 마찬가지로 이 식별자는 생성된 범위 내에서만 고유해야 합니다. 이 식별자는 구성 객체를 인스턴스화할 때 첫 번째 인수입니다.

참고

스택은 에서 해당 스택을 참조할 때 사용하는 식별자이기도 합니다. id AWS CDK 툴킷 (cdk명령)

앱에 식별자를 MyBucket 포함하는 구문이 두 개 있는 예를 살펴보겠습니다. 첫 번째는 식별자를 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, 'MyBucket'); } } 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, 'MyBucket'); } } 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, "MyBucket") 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, "MyBucket"); } } // 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, "MyBucket"); } } class Program { static void Main(string[] args) { var app = new App(); new MyStack(app, "Stack1"); new MyStack(app, "Stack2"); } }

경로

AWS CDK 애플리케이션의 구문은 클래스를 기반으로 하는 계층 구조를 형성합니다. App 주어진 구문, 부모 구문, 최상위 구문 등에서 구문 트리의 루트까지 이어지는 ID 모음을 경로라고 합니다.

는 AWS CDK 일반적으로 템플릿의 경로를 문자열로 표시합니다. 레벨의 ID는 일반적으로 스택인 루트 App 인스턴스 바로 아래의 노드에서 시작하여 슬래시로 구분됩니다. 예를 들어, 이전 코드 예제에서 두 Amazon S3 버킷 리소스의 경로는 Stack1/MyBucketStack2/MyBucket 입니다.

다음 예제와 같이 프로그래밍 방식으로 모든 구문의 경로에 액세스할 수 있습니다. 이것은 myConstruct (또는 my_construct Python 개발자가 작성한 것처럼) 의 경로를 가져옵니다. ID는 생성되는 범위 내에서 고유해야 하므로 ID의 경로는 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;

고유 ID

AWS CloudFormation 템플릿의 모든 논리적 ID가 고유해야 합니다. 따라서 는 응용 프로그램의 각 구문에 대해 고유한 식별자를 생성할 수 AWS CDK 있어야 합니다. 리소스에는 전체적으로 고유한 경로 (스택에서 특정 리소스까지의 모든 범위 이름) 가 있습니다. 따라서 는 경로의 요소를 연결하고 8자리 해시를 추가하여 필요한 고유 식별자를 AWS CDK 생성합니다. (해시는 A/B/CA/BC 와 같이 서로 다른 경로를 구분하는 데 필요합니다. 그러면 동일한 식별자가 됩니다. AWS CloudFormation AWS CloudFormation 식별자는 영숫자이며 슬래시나 기타 구분 문자를 포함할 수 없습니다. 는 이 문자열을 AWS CDK 구문의 고유 ID를 호출합니다.

일반적으로 AWS CDK 앱은 고유 ID에 대해 알 필요가 없습니다. 하지만 다음 예제와 같이 프로그래밍 방식으로 모든 구문의 고유 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;

논리적 ID

고유 ID는 리소스를 나타내는 AWS 구성에 대해 생성된 AWS CloudFormation 템플릿에서 리소스의 논리적 식별자 (또는 논리적 이름) 역할을 합니다.

예를 들어, 이전 예제에서 Amazon S3 버킷이 내에 Stack2 생성되어 AWS::S3::Bucket 리소스가 생성됩니다. 리소스의 논리적 ID는 결과 Stack2MyBucket4DD88B4F AWS CloudFormation 템플릿에 있습니다. (이 식별자 생성 방법에 대한 자세한 내용은 을 참조하십시오고유 ID.)

논리적 ID 안정성

리소스가 생성된 후에는 리소스의 논리적 ID를 변경하지 마십시오. AWS CloudFormation 논리적 ID로 리소스를 식별합니다. 따라서 리소스의 논리 ID를 변경하면 새 논리 ID로 AWS CloudFormation 새 리소스가 생성된 다음 기존 리소스가 삭제됩니다. 리소스 유형에 따라 이로 인해 서비스가 중단되거나 데이터가 손실되거나 둘 다 발생할 수 있습니다.