如何在AWS CDK中从Stack A跨区域引用自动创建的Stack B?
从Stack A引用CDK自动创建的跨区域Stack B
要在us-east-2的Stack A中引用CDK自动创建的us-east-1区域Stack B,核心是通过目标区域资源的stack属性获取Stack B的引用,而非依赖仅指向当前Stack A的this。
具体实现步骤
- 当你在Stack A中配置跨区域资源(比如S3跨区域复制的目标Bucket)时,CDK会自动在目标区域生成Stack B。此时直接捕获目标资源的引用,通过它的
stack属性即可拿到Stack B的实例。 - 使用Stack B的
stackName属性替代this.stackName,就能正确引用目标栈的资源路径。
示例代码(以S3跨区域复制为例)
import { Bucket } from 'aws-cdk-lib/aws-s3'; import { NagSuppressions } from 'cdk-nag'; // Stack A(us-east-2)中的代码 const sourceBucket = new Bucket(this, 'SourceBucket', { region: 'us-east-2', // 源Bucket配置 }); // 创建跨区域复制的目标Bucket,CDK会自动在us-east-1创建Stack B const targetBucket = new Bucket(this, 'TargetBucket', { region: 'us-east-1', // 目标Bucket配置,包含复制规则等 }); // 获取Stack B的引用 const stackB = targetBucket.stack; // 针对Stack B中的资源添加Nag抑制规则 NagSuppressions.addResourceSuppressionsByPath(stackB, `/${stackB.stackName}/SharedInfra/...`, [ { id: "AwsSolutions-S1", reason: "lorem ipsum", }, ]);
关键说明
- 所有CDK资源都绑定到所属的栈,通过资源的
stack属性可直接获取其所在栈的实例,无论该栈是手动创建还是CDK自动生成的跨区域栈。 - 避免硬编码Stack B的名称,CDK生成的栈名可能随配置变化,通过
stackB.stackName动态获取更可靠。
内容的提问来源于stack exchange,提问作者msaavedra91
相关产品推荐
相关产品推荐

