측면 및 AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔고 2023년 6월 1일에 지원을 종료했습니다.

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

측면 및 AWS CDK

Aspect는 주어진 범위 내의 모든 구문에 연산을 적용하는 방법입니다. 애스펙트는 태그를 추가하는 등의 방법으로 구문을 수정할 수 있습니다. 또는 모든 버킷이 암호화되었는지 확인하는 등 구문의 상태를 확인할 수도 있습니다.

한 구문과 동일한 범위에 있는 모든 구문에 애스펙트를 적용하려면 다음 Aspects.of(SCOPE).add()예제와 같이 새 어스펙트를 호출해야 합니다.

TypeScript
Aspects.of(myConstruct).add(new SomeAspect(...));
JavaScript
Aspects.of(myConstruct).add(new SomeAspect(...));
Python
Aspects.of(my_construct).add(SomeAspect(...))
Java
Aspects.of(myConstruct).add(new SomeAspect(...));
C#
Aspects.Of(myConstruct).add(new SomeAspect(...));
Go
awscdk.Aspects_Of(stack).Add(awscdk.NewTag(...))

AWS CDK 에서는 속성을 사용하여 리소스에 태그를 지정하지만 프레임워크는 다른 용도로도 사용될 수 있습니다. 예를 들어, 이를 사용하여 상위 수준 구성으로 정의된 AWS CloudFormation 리소스를 확인하거나 변경할 수 있습니다.

특징 세부 정보

어스펙트는 방문자 패턴을 사용합니다. 애스펙트는 다음 인터페이스를 구현하는 클래스입니다.

TypeScript
interface IAspect { visit(node: IConstruct): void;}
JavaScript

JavaScript 언어 기능으로는 인터페이스가 없습니다. 따라서 애스펙트는 단순히 조작할 노드를 받아들이는 visit 메서드가 있는 클래스의 인스턴스일 뿐입니다.

Python

Python에는 언어 기능으로서의 인터페이스가 없습니다. 따라서 애스펙트는 단순히 조작할 노드를 받아들이는 visit 메서드가 있는 클래스의 인스턴스일 뿐입니다.

Java
public interface IAspect { public void visit(Construct node); }
C#
public interface IAspect { void Visit(IConstruct node); }
Go
type IAspect interface { Visit(node constructs.IConstruct) }

Aspects.of(SCOPE).add(...) 호출하면 구문이 내부 애스펙트 목록에 애스펙트를 추가합니다. 를 사용하여 목록을 얻을 수 Aspects.of(SCOPE) 있습니다.

준비 단계에서 는 구문과 각 하위 구성요소의 객체 visit 메서드를 하향식 순서로 AWS CDK 호출합니다.

visit메서드는 구문의 모든 내용을 자유롭게 변경할 수 있습니다. 강력한 형식의 언어에서는 구조별 속성이나 메서드에 액세스하기 전에 수신된 구문을 보다 구체적인 형식으로 캐스팅하십시오.

어스펙트는 독립적이고 정의 후에는 변경할 수 없기 때문에 Stage 구문 경계를 넘어 Stages 전파되지 않습니다. Stage구성 자체 (또는 더 낮은 구문) 에 애스펙트를 적용하여 내부 구문을 방문하도록 하려면 해당 구문 자체 (또는 그 이하) 에 애스펙트를 적용하세요. Stage

다음 예제는 스택에서 생성된 모든 버킷에 버전 관리가 활성화되어 있는지 확인합니다. 이 애스펙트는 검증에 실패한 구문에 오류 주석을 추가합니다. 이로 인해 synth 작업이 실패하고 생성된 클라우드 어셈블리를 배포할 수 없게 됩니다.

TypeScript
class BucketVersioningChecker implements IAspect { public visit(node: IConstruct): void { // See that we're dealing with a CfnBucket if (node instanceof s3.CfnBucket) { // Check for versioning property, exclude the case where the property // can be a token (IResolvable). if (!node.versioningConfiguration || (!Tokenization.isResolvable(node.versioningConfiguration) && node.versioningConfiguration.status !== 'Enabled')) { Annotations.of(node).addError('Bucket versioning is not enabled'); } } } } // Later, apply to the stack Aspects.of(stack).add(new BucketVersioningChecker());
JavaScript
class BucketVersioningChecker { visit(node) { // See that we're dealing with a CfnBucket if ( node instanceof s3.CfnBucket) { // Check for versioning property, exclude the case where the property // can be a token (IResolvable). if (!node.versioningConfiguration || !Tokenization.isResolvable(node.versioningConfiguration) && node.versioningConfiguration.status !== 'Enabled')) { Annotations.of(node).addError('Bucket versioning is not enabled'); } } } } // Later, apply to the stack Aspects.of(stack).add(new BucketVersioningChecker());
Python
@jsii.implements(cdk.IAspect) class BucketVersioningChecker: def visit(self, node): # See that we're dealing with a CfnBucket if isinstance(node, s3.CfnBucket): # Check for versioning property, exclude the case where the property # can be a token (IResolvable). if (not node.versioning_configuration or not Tokenization.is_resolvable(node.versioning_configuration) and node.versioning_configuration.status != "Enabled"): Annotations.of(node).add_error('Bucket versioning is not enabled') # Later, apply to the stack Aspects.of(stack).add(BucketVersioningChecker())
Java
public class BucketVersioningChecker implements IAspect { @Override public void visit(Construct node) { // See that we're dealing with a CfnBucket if (node instanceof CfnBucket) { CfnBucket bucket = (CfnBucket)node; Object versioningConfiguration = bucket.getVersioningConfiguration(); if (versioningConfiguration == null || !Tokenization.isResolvable(versioningConfiguration.toString()) && !versioningConfiguration.toString().contains("Enabled")) Annotations.of(bucket.getNode()).addError("Bucket versioning is not enabled"); } } } // Later, apply to the stack Aspects.of(stack).add(new BucketVersioningChecker());
C#
class BucketVersioningChecker : Amazon.Jsii.Runtime.Deputy.DeputyBase, IAspect { public void Visit(IConstruct node) { // See that we're dealing with a CfnBucket if (node is CfnBucket) { var bucket = (CfnBucket)node; if (bucket.VersioningConfiguration is null || !Tokenization.IsResolvable(bucket.VersioningConfiguration) && !bucket.VersioningConfiguration.ToString().Contains("Enabled")) Annotations.Of(bucket.Node).AddError("Bucket versioning is not enabled"); } } } // Later, apply to the stack Aspects.Of(stack).add(new BucketVersioningChecker());