AWS CDK v2嵌套栈无法指定静态名称的格式优化问询
关于AWS CDK v2嵌套栈自定义名称的问题
问题背景
AWS CDK v2无法直接为嵌套栈指定静态名称,因此通过重写getLogicalId方法自定义嵌套栈的CloudFormation逻辑ID,但实际生成的名称不符合预期:
- 自定义逻辑前的嵌套栈名称:
DevConnectBackendStack-DevConnectNestedStackDevConnectNestedStackResourceAB8916B0-IBLMSGR9L2IO - 自定义逻辑后的嵌套栈名称:
DevConnectBackendStack-NestedLambdaCommonStackNestedStackNestedLambdaCommonStackNested-1X8VVCE0WRW10 - 期望的目标格式:
DevConnectBackendStack-NestedLambdaCommonStack-1X8VVCE0WRW10
现有实现代码
嵌套栈类代码(my-nested-stack.ts)
export class NestedLambdaCommonStack extends cdk.NestedStack { getLogicalId(element: CfnElement): string { if (element.node.id.includes('NestedStackResource')) { return /([a-zA-Z0-9]+)\.NestedStackResource/.exec(element.node.id)![1] } return super.getLogicalId(element) } constructor(scope: Construct, id: string, props: NestedLambdaCommonStackProps){} }
父栈中实例化嵌套栈的代码
const nestedLambdaCommonStack = new NestedLambdaCommonStack(this, 'NestedLambdaCommonStack', {})
问题原因
原代码中的正则表达式/([a-zA-Z0-9]+)\.NestedStackResource/假设element.node.id的格式是[栈ID].NestedStackResource,但实际CDK生成的node.id会包含重复的栈标识和NestedStack后缀(比如实际值可能是NestedLambdaCommonStackNestedStack.NestedStackResource)。此时正则提取出的内容是NestedLambdaCommonStackNestedStack,拼接到父栈名称后出现冗余重复部分,导致最终名称不符合预期。
解决方案
调整getLogicalId中的逻辑,精准提取嵌套栈实例化时传入的原始ID(即NestedLambdaCommonStack):
方案一:精准正则匹配
getLogicalId(element: CfnElement): string { if (element.node.id.includes('NestedStackResource')) { // 匹配原始栈ID,去除后续的NestedStack后缀 const matchResult = element.node.id.match(/^([a-zA-Z0-9]+)NestedStack\.NestedStackResource$/); return matchResult ? matchResult[1] : super.getLogicalId(element); } return super.getLogicalId(element); }
方案二:字符串分割提取
getLogicalId(element: CfnElement): string { if (element.node.id.includes('NestedStackResource')) { // 以NestedStack为分隔符,取第一部分作为原始栈ID const originalStackId = element.node.id.split('NestedStack')[0]; return originalStackId || super.getLogicalId(element); } return super.getLogicalId(element); }
通过以上两种方式,提取出的逻辑ID为NestedLambdaCommonStack,最终生成的嵌套栈名称会符合DevConnectBackendStack-NestedLambdaCommonStack-1X8VVCE0WRW10的预期格式。
内容的提问来源于stack exchange,提问作者Ke_Sandaru
相关产品推荐
相关产品推荐

