CloudFormation使用嵌套栈时出现"No Export Named"错误是什么原因?
问题根因
核心是导出的CloudFormation跨栈输出名和导入时使用的名称不匹配,具体原因如下:
- 参数传递不匹配
你在nested_template.yml中部署Kinesis流的OperationalData嵌套应用时,给模板传入的Domain参数值为OperationalData,因此template.yml中生成的导出名实际为${Environment}-OperationalData-KinesisStreamArn(以sandbox06环境为例,实际导出名是sandbox06-OperationalData-KinesisStreamArn)。
而报错显示你要导入的导出名为sandbox06-ODM-KinesisStreamArn,说明firehose.yml所在的栈拼接导入名时,中间段使用的是ODM,和实际导出的中间段OperationalData完全不一致,因此无法找到对应导出。 - 潜在的大小写敏感问题
CloudFormation的跨栈导出名是大小写敏感的,如果你后续调整为使用Application参数拼接导出名,需要注意OperationalData嵌套应用传入的Application参数值为小写odm,如果导入时使用大写ODM也会触发找不到的报错。
修复建议
你可以根据业务命名规则选择任意一种方案修复:
- 保持当前导出逻辑不变:修改firehose.yml所在栈的导入逻辑,拼接导出名时中间段使用
OperationalData,和实际导出名保持一致 - 调整导出逻辑匹配导入命名:修改
template.yml中的导出规则,将导出名的拼接参数从Domain改为Application,同时调整大小写匹配,导出名改为!Sub ${Environment}-ODM-KinesisStreamArn或者导入时使用小写odm
内容的提问来源于stack exchange,提问作者Antarr Byrd
相关产品推荐
相关产品推荐

