CloudFormation回滚更新报错:指定AppSync函数ID不匹配
解决CloudFormation回滚时AppSync函数ID不匹配的报错
1. 定位模板里的硬编码函数ID
先查CloudFormation模板中所有AWS::AppSync::Resolver资源,看是否在FunctionId属性或者映射模板(RequestMappingTemplate/ResponseMappingTemplate)里硬编码了报错里的klgmrt6o3zf7fcrdlnptvfi3su这类固定ID。这些硬编码就是问题根源——实际创建的函数ID是动态生成的,和模板里写死的对不上。
2. 改用动态引用函数ID
把硬编码的ID替换成CloudFormation的动态引用方式:
- 如果函数是同模板里定义的(比如资源名是
MyAppSyncFunction),解析器里直接用:FunctionId: !Ref MyAppSyncFunction - 如果函数来自其他堆栈,用
!ImportValue导入该函数的ID输出值。 - 映射模板里不要直接写ID,改用上下文变量,比如
$context.function.id或$context.function.name来引用。
3. 解决回滚卡住的问题
如果当前堆栈回滚卡着动不了:
- 先去AppSync控制台,找到引用报错里那两个函数ID的解析器,手动删除它们。
- 回到CloudFormation控制台,重新触发回滚操作。
4. 排查ID不匹配的深层原因
- 查看CloudFormation的事件日志,找到之前创建AppSync函数的记录,确认函数的实际物理ID,对比模板里的引用逻辑是否正确。
- 检查是否修改过函数的
Name、DataSourceName等会触发资源重建的属性——这类修改会导致旧函数被删除、新函数生成新ID,但解析器还在引用旧ID,就会报错。
内容的提问来源于stack exchange,提问作者Ilijanovic
相关产品推荐
相关产品推荐

