v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이스케이프 해치, 원시 재정의 및 사용자 지정 리소스를 통해 AWS Construct Library에서 구문을 사용자 지정합니다.
이스케이프 해치 사용
AWS Construct Library는 AWS CDK 구성 다양한 수준의 추상화를 제공합니다.
가장 높은 수준에서 AWS CDK 애플리케이션과 애플리케이션 스택은 전체 클라우드 인프라의 추상화 또는 중요한 청크입니다. 다양한 환경 또는 다양한 요구 사항에 맞게 배포하도록 이들을 파라미터화할 수 있습니다.
추상화는 클라우드 애플리케이션을 설계하고 구현하기 위한 강력한 도구입니다. 는 추상화로 빌드할 뿐만 아니라 새 추상화를 생성할 수 있는 권한을 AWS CDK 제공합니다. 기존 오픈 소스 L2 및 L3 구문을 지침으로 사용하여 조직의 모범 사례와 의견을 반영하도록 자체 L2 및 L3 구문을 빌드할 수 있습니다.
추상화는 완벽하지 않으며, 좋은 추상화도 가능한 모든 사용 사례를 다룰 수는 없습니다. 개발 중 필요에 거의 맞는 구문을 찾아 조금 또는 많이 사용자 지정해야 할 수 있습니다.
이러한 이유로는 구문 모델을 분리하는 방법을 AWS CDK 제공합니다. 여기에는 하위 수준의 추상화나 완전히 다른 모델로 이동하는 것이 포함됩니다. 이스케이프 해치를 사용하면 AWS CDK 패러다임을 이스케이프하고 필요에 맞게 사용자 지정할 수 있습니다. 그런 다음 변경 사항을 새로운 구문으로 래핑하여 기본 복잡성을 추상화하고 다른 개발자에게 깔끔한 API를 제공할 수 있습니다.
다음은 이스케이프 해치를 사용할 수 있는 상황의 예입니다.
-
AWS 서비스 기능은를 통해 사용할 수 AWS CloudFormation있지만 이에 대한 L2 구문은 없습니다.
-
AWS 서비스 기능은를 통해 사용할 수 AWS CloudFormation있으며 서비스에 대한 L2 구문이 있지만 아직이 기능은 노출되지 않습니다. CDK 팀에서 L2 구문을 큐레이션하므로 새 기능에 L2 구문을 즉시 사용하지 못할 수 있습니다.
-
이 기능은 아직 AWS CloudFormation 를 통해 사용할 수 없습니다.
를 통해 기능을 사용할 수 있는지 확인하려면 리소스 및 속성 유형 참조를 AWS CloudFormation참조하세요. AWS
L1 구문에 대한 이스케이프 해치 개발
서비스에 L2 구문을 사용할 수 없는 경우 자동으로 생성된 L1 구문을 사용할 수 있습니다. 이러한 리소스는 CfnBucket
또는 CfnRole
과 같이 Cfn
으로 시작하는 이름으로 인식할 수 있습니다. 동등한 AWS CloudFormation 리소스를 사용하는 것과 정확히 동일하게 인스턴스화합니다.
예를 들어 분석이 활성화된 하위 수준 Amazon S3 버킷 L1을 인스턴스화하려면 다음과 같이 작성합니다.
new s3.CfnBucket(this, 'amzn-s3-demo-bucket', {
analyticsConfigurations: [
{
id: 'Config',
// ...
}
]
});
드물지만 CfnXxx
클래스가 없는 리소스를 정의하려는 경우가 있을 수 있습니다. 리소스 사양에 아직 게시되지 않은 새 AWS CloudFormation 리소스 유형일 수 있습니다. 이와 같은 경우 cdk.CfnResource
를 직접 인스턴스화하고 리소스 유형과 속성을 지정할 수 있습니다. 방법은 다음 예제와 같습니다.
new cdk.CfnResource(this, 'amzn-s3-demo-bucket', {
type: 'AWS::S3::Bucket',
properties: {
// Note the PascalCase here! These are CloudFormation identifiers.
AnalyticsConfigurations: [
{
Id: 'Config',
// ...
}
]
}
});
L2 구문에 대한 이스케이프 해치 개발
L2 구문에 기능이 누락되었거나 문제를 해결하려는 경우 L2 구문으로 캡슐화된 L1 구문을 수정할 수 있습니다.
모든 L2 구문은 그 안에 해당 L1 구문을 포함하고 있습니다. 예를 들어, 상위 수준 Bucket
구문은 하위 수준 CfnBucket
구문을 래핑합니다. 는 AWS CloudFormation 리소스에 직접 CfnBucket
해당하므로를 통해 사용할 수 있는 모든 기능을 노출합니다 AWS CloudFormation.
L1 구문에 액세스하는 기본 접근 방식은 construct.node.defaultChild
(Python: default_child
)를 사용하고, 필요한 경우 올바른 유형으로 캐스팅한 다음 해당 속성을 수정하는 것입니다. 다시 Bucket
의 예를 들어보겠습니다.
// Get the CloudFormation resource
const cfnBucket = bucket.node.defaultChild as s3.CfnBucket;
// Change its properties
cfnBucket.analyticsConfiguration = [
{
id: 'Config',
// ...
}
];
이 객체를 사용하여 Metadata
및와 같은 AWS CloudFormation 옵션을 변경할 수도 있습니다UpdatePolicy
.
cfnBucket.cfnOptions.metadata = {
MetadataKey: 'MetadataValue'
};
이스케이프 해제 해치 사용
AWS CDK 또한는 추상화 수준을 높일 수 있는 기능을 제공하며, 이를 "비이스케이프" 해치라고 할 수 있습니다. CfnBucket
과 같은 L1 구문이 있는 경우 L1 구문을 래핑하기 위해 새로운 L2 구문(이 경우 Bucket
)을 생성할 수 있습니다.
이는 L1 리소스를 생성하지만 L2 리소스가 필요한 구문과 함께 사용하려는 경우에 편리합니다. 이는 L1 구문에 사용할 수 없는 .grantXxxxx()
와 같은 편의 메서드를 사용하려는 경우에도 유용합니다.
2 클래스에서 .fromCfnXxxxx()
라는 정적 메서드를 사용하여 더 높은 추상화 수준으로 이동합니다(예: Amazon S3 버킷의 경우 Bucket.fromCfnBucket()
). L1 리소스가 유일한 파라미터입니다.
b1 = new s3.CfnBucket(this, "buck09", { ... });
b2 = s3.Bucket.fromCfnBucket(b1);
L1 구문에서 생성된 L2 구문은 리소스 이름, ARN 또는 조회에서 생성된 것과 유사하게 L1 리소스를 참조하는 프록시 객체입니다. 이러한 구문을 수정해도 최종 합성된 AWS CloudFormation 템플릿에는 영향이 없습니다. 그러나 L1 리소스가 있으므로 대신 이를 수정할 수는 있습니다. 프록시 객체에 대한 자세한 내용은 AWS 계정의 리소스 참조 섹션을 참조하세요.
혼동을 피하려면 동일한 L1 구문을 참조하는 L2 구문을 여러 개 생성하지 마세요. 예를 들어, 이전 섹션의 기술을 사용하여 Bucket
에서 CfnBucket
을 추출하는 경우 해당 CfnBucket
으로 Bucket.fromCfnBucket()
을 직접적으로 호출하여 두 번째 Bucket
인스턴스를 생성해서는 안 됩니다. 실제로는 예상대로 작동하지만(하나의 AWS::S3::Bucket
만 합성됨) 코드를 유지 관리하기가 더 어려워집니다.
원시 재정의 사용
L1 구문에서 누락된 속성이 있으면 원시 재정의를 사용하여 모든 입력을 우회할 수 있습니다. 이를 통해 합성된 속성을 삭제할 수도 있습니다.
다음 예와 같이 addOverride
메서드(Python: add_override
) 중 하나를 사용합니다.
// Get the CloudFormation resource
const cfnBucket = bucket.node.defaultChild as s3.CfnBucket;
// Use dot notation to address inside the resource template fragment
cfnBucket.addOverride('Properties.VersioningConfiguration.Status', 'NewStatus');
cfnBucket.addDeletionOverride('Properties.VersioningConfiguration.Status');
// use index (0 here) to address an element of a list
cfnBucket.addOverride('Properties.Tags.0.Value', 'NewValue');
cfnBucket.addDeletionOverride('Properties.Tags.0');
// addPropertyOverride is a convenience function for paths starting with "Properties."
cfnBucket.addPropertyOverride('VersioningConfiguration.Status', 'NewStatus');
cfnBucket.addPropertyDeletionOverride('VersioningConfiguration.Status');
cfnBucket.addPropertyOverride('Tags.0.Value', 'NewValue');
cfnBucket.addPropertyDeletionOverride('Tags.0');
사용자 지정 리소스 사용
기능을를 통해 사용할 수 AWS CloudFormation없고 직접 API 호출을 통해서만 사용할 수 있는 경우 필요한 API 호출을 하려면 AWS CloudFormation 사용자 지정 리소스를 작성해야 합니다. AWS CDK 를 사용하여 사용자 지정 리소스를 작성하고 일반 구성 인터페이스로 래핑할 수 있습니다. 구문 소비자의 입장에서는 이러한 경험이 자연스럽게 느껴질 것입니다.
사용자 지정 리소스를 빌드하려면 리소스의 CREATE
, UPDATE
및 DELETE
수명 주기 이벤트에 응답하는 Lambda 함수를 작성해야 합니다. 사용자 지정 리소스가 단일 API 직접 호출만 수행해야 하는 경우 AwsCustomResource
주제가 너무 광범위하여 여기에서 모두 다룰 수는 없지만 다음 링크를 통해 시작할 수 있습니다.
-
더 자세한 예는 CDK 표준 라이브러리의 DnsValidatedCertificate
클래스를 참조하세요. 이는 사용자 지정 리소스로 구현됩니다.