Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

既存の AWS CloudFormation テンプレートをインポートする

フォーカスモード
既存の AWS CloudFormation テンプレートをインポートする - AWS Cloud Development Kit (AWS CDK) v2

これは v2 AWS CDK デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

これは v2 AWS CDK デベロッパーガイドです。旧版の 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 許可の付与メソッドが定義するリソースと使用できます。

cloudformation-include.CfnInclude コンストラクトは基本的に、 AWS CloudFormation テンプレート内の任意のリソースに AWS CDK API ラッパーを追加します。この機能を使用して、既存の AWS CloudFormation テンプレートを一度に 1 つの 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 がテンプレートから保持されます。この動作は AWS CDK、論理 IDs を保持する必要がある AWS CloudFormation テンプレートを にインポートするのに適しています。 は、インポートされたリソースを AWS CloudFormation テンプレートから同じリソースとして認識するためにこの情報 AWS CloudFormation を必要とします。

テンプレートの AWS CDK コンストラクトラッパーを開発して他の AWS CDK デベロッパーが使用できるようにする場合は、代わりに に新しいリソース IDs AWS CDK を生成してもらいます。これにより、名前が競合ぜずにコンストラクトをスタックで複数回使用できます。これを行うには、テンプレートをインポートするときに 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 リソースに意図しない変更がないことを確認するには、差分を実行します。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;

この例では、cfnBucketaws-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 コンストラクトにラップしても、新しいリソースは作成されません。この例では、2 番目の 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パラメータをコードの他の場所で定義されたバケットの ARN に置き換えます AWS CDK 。

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() を 1 回呼び出します。

ネストされたスタックをインポートしたら、メインテンプレートの 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 インスタンスを返します。このインスタンスから、例に示すように、 stackプロパティを介してインスタンスにアクセスできます AWS CDK NestedStack。経由で元の AWS CloudFormation テンプレートオブジェクトにアクセスすることもできます。includedTemplateそこからリソースやその他の AWS CloudFormation 要素をロードできます。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.