쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

기존 AWS CloudFormation 템플릿 가져오기

포커스 모드
기존 AWS CloudFormation 템플릿 가져오기 - AWS Cloud Development Kit (AWS CDK) v2

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

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

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

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

cloudformation-include.CfnInclude 구문을 사용하여 리소스를 L1 구문으로 변환하여 AWS CloudFormation 템플릿에서 AWS Cloud Development Kit (AWS CDK) 애플리케이션으로 리소스를 가져옵니다.

가져온 후에는 원래 AWS CDK 코드에 정의된 것과 동일한 방식으로 앱에서 이러한 리소스를 사용할 수 있습니다. 상위 수준 구문 내에서 이러한 L1 AWS CDK 구문을 사용할 수도 있습니다. 예를 들어 이렇게 하면 L2 권한 grant 메서드를 정의된 리소스와 함께 사용할 수 있습니다.

cloudformation-include.CfnInclude 구성은 기본적으로 AWS CloudFormation 템플릿의 모든 리소스에 AWS CDK API 래퍼를 추가합니다. 이 기능을 사용하여 기존 AWS CloudFormation 템플릿을 한 번에 AWS CDK 조각으로 가져옵니다. 이렇게 하면 AWS CDK 구문을 사용하여 기존 리소스를 관리하여 상위 수준 추상화의 이점을 활용할 수 있습니다. 또한이 기능을 사용하여 AWS CDK 구문 API를 제공하여 AWS CloudFormation 템플릿을 AWS CDK 개발자에게 제공할 수 있습니다.

참고

AWS CDK v1에는 이전에 동일한 범용으로 사용된 도 포함되어 aws-cdk-lib.CfnInclude있습니다. 하지만 cloudformation-include.CfnInclude의 기능이 부족합니다.

AWS CloudFormation 템플릿 가져오기

다음은이 주제의 예제를 제공하는 데 사용할 샘플 AWS CloudFormation 템플릿입니다. 따라하려면 템플릿을 복사하고 my-template.json으로 저장하세요. 이러한 예제를 살펴본 후 기존에 배포된 AWS CloudFormation 템플릿을 사용하여 자세히 살펴볼 수 있습니다. AWS CloudFormation 콘솔에서 템플릿을 얻을 수 있습니다.

{ "Resources": { "amzn-s3-demo-bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "amzn-s3-demo-bucket", } } } }

JSON 또는 YAML 템플릿으로 작업할 수 있습니다. YAML 파서가 수락하는 내용에 약간 다를 수 있으므로 사용 가능한 경우 JSON을 사용하는 것이 좋습니다.

다음은를 사용하여 샘플 템플릿을 AWS CDK 앱으로 가져오는 방법의 예입니다cloudformation-include. 템플릿은 CDK 스택의 컨텍스트 내에서 가져옵니다.

TypeScript
import * as cdk from 'aws-cdk-lib'; import * as cfninc from 'aws-cdk-lib/cloudformation-include'; import { Construct } from 'constructs'; export class MyStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', }); } }
JavaScript
const cdk = require('aws-cdk-lib'); const cfninc = require('aws-cdk-lib/cloudformation-include'); class MyStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', }); } } module.exports = { MyStack }
Python
import aws_cdk as cdk from aws_cdk import cloudformation_include as cfn_inc from constructs import Construct class MyStack(cdk.Stack): def __init__(self, scope: Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) template = cfn_inc.CfnInclude(self, "Template", template_file="my-template.json")
Java
import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.cloudformation.include.CfnInclude; import software.constructs.Construct; 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); CfnInclude template = CfnInclude.Builder.create(this, "Template") .templateFile("my-template.json") .build(); } }
C#
using Amazon.CDK; using Constructs; using cfnInc = Amazon.CDK.CloudFormation.Include; namespace MyApp { public class MyStack : Stack { internal MyStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { var template = new cfnInc.CfnInclude(this, "Template", new cfnInc.CfnIncludeProps { TemplateFile = "my-template.json" }); } } }
import * as cdk from 'aws-cdk-lib'; import * as cfninc from 'aws-cdk-lib/cloudformation-include'; import { Construct } from 'constructs'; export class MyStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', }); } }

기본적으로 리소스를 가져오면 템플릿에서 리소스의 원래 논리적 ID가 유지됩니다. 이 동작은 논리적 IDs를 보존해야 AWS CDK하는 템플릿을 AWS CloudFormation 로 가져오는 데 적합합니다.는 가져온 리소스를 AWS CloudFormation 템플릿에서 동일한 리소스로 인식하기 위해이 정보가 AWS CloudFormation 필요합니다.

다른 AWS CDK 개발자가 사용할 수 있도록 템플릿용 AWS CDK 구문 래퍼를 개발하는 경우 대신에서 새 리소스 ID를 AWS CDK 생성하도록 하세요. IDs 이렇게 하면 이름 충돌 없이 스택에서 구문을 여러 번 사용할 수 있습니다. 이렇게 하려면 템플릿을 가져올 때 preserveLogicalIds 속성을 false로 설정합니다. 다음은 예제입니다.

TypeScript
const template = new cfninc.CfnInclude(this, 'MyConstruct', { templateFile: 'my-template.json', preserveLogicalIds: false });
JavaScript
const template = new cfninc.CfnInclude(this, 'MyConstruct', { templateFile: 'my-template.json', preserveLogicalIds: false });
Python
template = cfn_inc.CfnInclude(self, "Template", template_file="my-template.json", preserve_logical_ids=False)
Java
CfnInclude template = CfnInclude.Builder.create(this, "Template") .templateFile("my-template.json") .preserveLogicalIds(false) .build();
C#
var template = new cfnInc.CfnInclude(this, "Template", new cfn_inc.CfnIncludeProps { TemplateFile = "my-template.json", PreserveLogicalIds = false });
const template = new cfninc.CfnInclude(this, 'MyConstruct', { templateFile: 'my-template.json', preserveLogicalIds: false });

가져온 리소스를 AWS CDK 앱의 제어 하에 두려면 스택을에 추가합니다App.

TypeScript
import * as cdk from 'aws-cdk-lib'; import { MyStack } from '../lib/my-stack'; const app = new cdk.App(); new MyStack(app, 'MyStack');
JavaScript
const cdk = require('aws-cdk-lib'); const { MyStack } = require('../lib/my-stack'); const app = new cdk.App(); new MyStack(app, 'MyStack');
Python
import aws_cdk as cdk from mystack.my_stack import MyStack app = cdk.App() MyStack(app, "MyStack")
Java
import software.amazon.awscdk.App; public class MyApp { public static void main(final String[] args) { App app = new App(); new MyStack(app, "MyStack"); } }
C#
using Amazon.CDK; namespace CdkApp { sealed class Program { public static void Main(string[] args) { var app = new App(); new MyStack(app, "MyStack"); } } }
import * as cdk from 'aws-cdk-lib'; import { MyStack } from '../lib/my-stack'; const app = new cdk.App(); new MyStack(app, 'MyStack');

스택의 AWS 리소스에 의도하지 않은 변경 사항이 없는지 확인하려면 diff를 수행할 수 있습니다. cdk diff 명령을 사용하고 AWS CDK특정 메타데이터를 AWS CDK CLI 생략합니다. 다음은 예제입니다.

cdk diff --no-version-reporting --no-path-metadata --no-asset-metadata

AWS CloudFormation 템플릿을 가져온 후에는 AWS CDK 앱이 가져온 리소스의 정확한 소스가 되어야 합니다. 리소스를 변경하려면 AWS CDK 앱에서 리소스를 수정하고 cdk deploy 명령을 사용하여 AWS CDK CLI 배포합니다.

가져온 리소스에 액세스

예제 코드template의 이름은 가져온 AWS CloudFormation 템플릿을 나타냅니다. 리소스에서 리소스에 액세스하려면 객체의 getResource() 메서드를 사용합니다. 반환된 리소스에 특정 유형의 리소스로 액세스하려면 결과를 원하는 유형으로 캐스팅합니다. 이는 Python 또는 JavaScript에서는 필요하지 않습니다. 다음은 예제입니다.

TypeScript
const cfnBucket = template.getResource('amzn-s3-demo-bucket') as s3.CfnBucket;
JavaScript
const cfnBucket = template.getResource('amzn-s3-demo-bucket');
Python
cfn_bucket = template.get_resource("amzn-s3-demo-bucket")
Java
CfnBucket cfnBucket = (CfnBucket)template.getResource("amzn-s3-demo-bucket");
C#
var cfnBucket = (CfnBucket)template.GetResource("amzn-s3-demo-bucket");
const cfnBucket = template.getResource('amzn-s3-demo-bucket') as s3.CfnBucket;

이 예에서 cfnBucket는 이제 aws-s3.CfnBucket 클래스의 인스턴스입니다. 이는 해당 AWS CloudFormation 리소스를 나타내는 L1 구문입니다. 다른 유형의 리소스처럼 처리할 수 있습니다. 예를 들어 bucket.attrArn 속성으로 해당 ARN 값을 가져올 수 있습니다.

대신 L1 CfnBucket 리소스를 L2 aws-s3.Bucket 인스턴스로 래핑하려면 정적 메서드 fromBucketArn(), fromBucketAttributes() 또는 fromBucketName()을 사용합니다. 일반적으로 fromBucketName() 메서드가 가장 편리합니다. 다음은 예제입니다.

TypeScript
const bucket = s3.Bucket.fromBucketName(this, 'Bucket', cfnBucket.ref);
JavaScript
const bucket = s3.Bucket.fromBucketName(this, 'Bucket', cfnBucket.ref);
Python
bucket = s3.Bucket.from_bucket_name(self, "Bucket", cfn_bucket.ref)
Java
Bucket bucket = (Bucket)Bucket.fromBucketName(this, "Bucket", cfnBucket.getRef());
C#
var bucket = (Bucket)Bucket.FromBucketName(this, "Bucket", cfnBucket.Ref);
const bucket = s3.Bucket.fromBucketName(this, 'Bucket', cfnBucket.ref);

다른 L2 구문에는 기존 리소스에서 구문을 생성하는 유사한 메서드가 있습니다.

L1 구문을 L2 구문으로 래핑하면 새 리소스가 생성되지 않습니다. 이 예에서는 두 번째 S3, 버킷을 생성하지 않습니다. 대신 새 Bucket 인스턴스는 기존 CfnBucket을 캡슐화합니다.

예제에서 bucket은 이제 다른 L2 구문과 같이 작동하는 L2 Bucket 구문입니다. 예를 들어 버킷의 편리한 grantWrite() 방법을 사용하여 AWS Lambda 함수 쓰기 액세스 권한을 버킷에 부여할 수 있습니다. 필요한 AWS Identity and Access Management (IAM) 정책을 수동으로 정의할 필요가 없습니다. 다음은 예제입니다.

TypeScript
bucket.grantWrite(lambdaFunc);
JavaScript
bucket.grantWrite(lambdaFunc);
Python
bucket.grant_write(lambda_func)
Java
bucket.grantWrite(lambdaFunc);
C#
bucket.GrantWrite(lambdaFunc);
bucket.grantWrite(lambdaFunc);

파라미터 바꾸기

AWS CloudFormation 템플릿에 파라미터가 포함된 경우 parameters 속성을 사용하여 가져올 때 빌드 시간 값으로 바꿀 수 있습니다. 다음 예제에서는 UploadBucket 파라미터를 AWS CDK 코드의 다른 곳에서 정의된 버킷의 ARN으로 바꿉니다.

TypeScript
const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', parameters: { 'UploadBucket': bucket.bucketArn, }, });
JavaScript
const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', parameters: { 'UploadBucket': bucket.bucketArn, }, });
Python
template = cfn_inc.CfnInclude(self, "Template", template_file="my-template.json", parameters=dict(UploadBucket=bucket.bucket_arn) )
Java
CfnInclude template = CfnInclude.Builder.create(this, "Template") .templateFile("my-template.json") .parameters(java.util.Map.of( // Map.of requires Java 9+ "UploadBucket", bucket.getBucketArn())) .build();
C#
var template = new cfnInc.CfnInclude(this, "Template", new cfnInc.CfnIncludeProps { TemplateFile = "my-template.json", Parameters = new Dictionary<string, string> { { "UploadBucket", bucket.BucketArn } } });
const template = new cfninc.CfnInclude(this, 'Template', { templateFile: 'my-template.json', parameters: { 'UploadBucket': bucket.bucketArn, }, });

다른 템플릿 요소 가져오기

리소스뿐만 아니라 모든 AWS CloudFormation 템플릿 요소를 가져올 수 있습니다. 가져온 요소는 AWS CDK 스택의 일부가 됩니다. 이러한 요소를 가져오려면 CfnInclude 객체의 다음 방법을 사용합니다.

이러한 각 메서드는 특정 유형의 AWS CloudFormation 요소를 나타내는 클래스의 인스턴스를 반환합니다. 이러한 객체는 변경할 수 있습니다. 변경 사항은 AWS CDK 스택에서 생성된 템플릿에 표시됩니다. 다음은 템플릿에서 파라미터를 가져오고 기본값을 수정하는 예입니다.

TypeScript
const param = template.getParameter('MyParameter'); param.default = "AWS CDK"
JavaScript
const param = template.getParameter('MyParameter'); param.default = "AWS CDK"
Python
param = template.get_parameter("MyParameter") param.default = "AWS CDK"
Java
CfnParameter param = template.getParameter("MyParameter"); param.setDefaultValue("AWS CDK")
C#
var cfnBucket = (CfnBucket)template.GetResource("amzn-s3-demo-bucket"); var param = template.GetParameter("MyParameter"); param.Default = "AWS CDK";
const param = template.getParameter('MyParameter'); param.default = "AWS CDK"

중첩된 스택 가져오기

기본 템플릿을 가져올 때 또는 나중 중첩된 스택을 지정하여 중첩된 스택을 가져올 수 있습니다. 중첩된 템플릿은 로컬 파일에 저장되어야 하지만 기본 템플릿에서 NestedStack 리소스로 참조되어야 합니다. 또한 AWS CDK 코드에 사용되는 리소스 이름은 기본 템플릿의 중첩 스택에 사용되는 이름과 일치해야 합니다.

기본 템플릿의 이 리소스 정의를 고려할 때 다음 코드는 참조된 중첩된 스택을 두 가지 방법으로 가져오는 방법을 보여줍니다.

"NestedStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": "https://my-s3-template-source.s3.amazonaws.com/nested-stack.json" }
TypeScript
// include nested stack when importing main stack const mainTemplate = new cfninc.CfnInclude(this, 'MainStack', { templateFile: 'main-template.json', loadNestedStacks: { 'NestedStack': { templateFile: 'nested-template.json', }, }, }); // or add it some time after importing the main stack const nestedTemplate = mainTemplate.loadNestedStack('NestedTemplate', { templateFile: 'nested-template.json', });
JavaScript
// include nested stack when importing main stack const mainTemplate = new cfninc.CfnInclude(this, 'MainStack', { templateFile: 'main-template.json', loadNestedStacks: { 'NestedStack': { templateFile: 'nested-template.json', }, }, }); // or add it some time after importing the main stack const nestedTemplate = mainTemplate.loadNestedStack('NestedStack', { templateFile: 'my-nested-template.json', });
Python
# include nested stack when importing main stack main_template = cfn_inc.CfnInclude(self, "MainStack", template_file="main-template.json", load_nested_stacks=dict(NestedStack= cfn_inc.CfnIncludeProps(template_file="nested-template.json"))) # or add it some time after importing the main stack nested_template = main_template.load_nested_stack("NestedStack", template_file="nested-template.json")
Java
CfnInclude mainTemplate = CfnInclude.Builder.create(this, "MainStack") .templateFile("main-template.json") .loadNestedStacks(java.util.Map.of( // Map.of requires Java 9+ "NestedStack", CfnIncludeProps.builder() .templateFile("nested-template.json").build())) .build(); // or add it some time after importing the main stack IncludedNestedStack nestedTemplate = mainTemplate.loadNestedStack("NestedTemplate", CfnIncludeProps.builder() .templateFile("nested-template.json") .build());
C#
// include nested stack when importing main stack var mainTemplate = new cfnInc.CfnInclude(this, "MainStack", new cfnInc.CfnIncludeProps { TemplateFile = "main-template.json", LoadNestedStacks = new Dictionary<string, cfnInc.ICfnIncludeProps> { { "NestedStack", new cfnInc.CfnIncludeProps { TemplateFile = "nested-template.json" } } } }); // or add it some time after importing the main stack var nestedTemplate = mainTemplate.LoadNestedStack("NestedTemplate", new cfnInc.CfnIncludeProps { TemplateFile = 'nested-template.json' });
// include nested stack when importing main stack const mainTemplate = new cfninc.CfnInclude(this, 'MainStack', { templateFile: 'main-template.json', loadNestedStacks: { 'NestedStack': { templateFile: 'nested-template.json', }, }, }); // or add it some time after importing the main stack const nestedTemplate = mainTemplate.loadNestedStack('NestedTemplate', { templateFile: 'nested-template.json', });

두 메서드 중 하나로 여러 중첩된 스택을 가져올 수 있습니다. 기본 템플릿을 가져올 때 각 중첩된 스택의 리소스 이름과 해당 템플릿 파일 간에 매핑을 제공합니다. 이 매핑에는 원하는 수의 항목이 포함될 수 있습니다. 초기 가져오기 후 이 작업을 수행하려면 각 중첩된 스택에 대해 loadNestedStack()를 한 번 직접적으로 호출합니다.

중첩된 스택을 가져온 후 기본 템플릿의 getNestedStack() 메서드를 사용하여 스택에 액세스할 수 있습니다.

TypeScript
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;
JavaScript
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;
Python
nested_stack = main_template.get_nested_stack("NestedStack").stack
Java
NestedStack nestedStack = mainTemplate.getNestedStack("NestedStack").getStack();
C#
var nestedStack = mainTemplate.GetNestedStack("NestedStack").Stack;
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;

getNestedStack() 메서드는 IncludedNestedStack 인스턴스를 반환합니다. 이 인스턴스에서 예제와 AWS CDK NestedStack 같이 stack 속성을 통해 인스턴스에 액세스할 수 있습니다. 를 통해 원본 AWS CloudFormation 템플릿 객체에 액세스할 수도 있습니다.이 객체includedTemplate에서 리소스 및 기타 AWS CloudFormation 요소를 로드할 수 있습니다.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.