CDK v2中使用CfnInclude报错:资源引用不存在的Condition
解决CDK引入外部模板时条件不存在的问题
问题原因
用CfnInclude引入的外部CloudFormation模板会被独立解析,默认不会自动关联主CDK栈中创建的条件,因此外部模板里引用的IsBucketEmpty条件会被判定为不存在。
解决方案
在CfnInclude的配置中,通过conditions属性将外部模板里的条件名称映射到主栈中已创建的CfnCondition对象,具体代码示例如下:
主栈中创建条件的代码
// 主模板中创建条件的示例代码 const isBucketEmptyCondition = new CfnCondition(this, 'IsBucketEmpty', { expression: Fn.conditionEquals(Fn.ref('YourParameterName'), 'true'), // 替换为你的实际条件表达式 });
修改后的CfnInclude代码
new CfnInclude(this, 'customResources', { templateFile: '/path/to/below/customresource.json', preserveLogicalIds: false, // 映射外部模板的条件到主栈的条件对象 conditions: { IsBucketEmpty: isBucketEmptyCondition, }, });
注意事项
- 确保外部模板中引用的条件名称(此处为
IsBucketEmpty)和conditions配置中的key完全一致 - 主栈中的
CfnCondition对象必须在CfnInclude之前创建,保证引用时已存在
内容的提问来源于stack exchange,提问作者Mandar
相关产品推荐
相关产品推荐

