升级AWS Amplify CLI后执行amplify push报[unauthRoleName, authRoleName]缺失错误咨询
报错提及的「template」具体指向
这里的template指的是Amplify项目体系下,与你的Cognito资源绑定的CloudFormation部署模板:
- 存储路径为项目本地
amplify/backend/auth/<你的Cognito资源名>/目录下的cloudformation-template.json/cloudformation-template.yaml - 该模板是Amplify CLI初始化项目时自动生成的,负责定义Cognito用户池、用户组,以及配套的已认证(auth)、未认证(unauth)两个IAM角色资源
- 模板顶层的
Parameters块,原本预留了authRoleName、unauthRoleName两个入参,用来在部署时把CLI自动生成的角色名称传递给资源配置,完成角色的关联绑定。
报错的根因
你遇到的参数缺失问题,本质是Amplify CLI 4.50.0版本引入的逻辑bug:
这个版本为了解决IAM角色策略过大的问题,新增了相似内联策略自动合并的迁移逻辑,在执行本地模板扫描、合并策略的过程中,会意外删除cloudformation-template.json顶层Parameters块下的authRoleName、unauthRoleName参数定义。后续执行amplify push时,CLI仍会按照固定逻辑向模板传入这两个参数,自然就会抛出“参数在模板中不存在”的报错。
这个问题和你之前遇到的角色策略过大报错留下的云端/本地残留无关,从CloudFormation控制台查看你对应auth资源栈的导出值就能发现,云端实际的auth、unauth角色资源是完整存在的,只是本地的模板文件因为版本bug丢了字段。
对应解决方法
临时修复(适合快速解锁当前操作)
- 打开本地对应路径下的
cloudformation-template.json - 检查文件顶层的
Parameters字段,如果整个字段丢失就新建一个;如果字段存在但缺了两个参数,直接补全缺失的内容,参考格式如下:
"Parameters": { "authRoleName": { "Type": "String" }, "unauthRoleName": { "Type": "String" } }
- 保存文件后重新执行
amplify push即可正常完成推送。
注意临时修复的局限性:后续每次CLI触发策略合并逻辑时,都可能再次删除这两个参数定义,需要重复执行补写操作才能继续推送。
永久修复(无需反复手动调整)
- 先把本地
amplify/backend/auth/目录的所有文件备份到项目外,避免操作过程中配置丢失 - 在项目根目录执行
amplify override auth命令,进入Amplify的自定义资源覆盖编辑模式,该模式生成的自定义配置不会被后续的CLI自动升级、策略合并操作覆盖 - 在自动生成的
override.ts配置文件中,通过模板覆盖逻辑强制把authRoleName、unauthRoleName两个参数固定写入模板的Parameters块 - 保存配置后执行一次全量
amplify push完成同步,后续所有的端点新增、策略合并操作都不会再触发参数缺失的报错。
内容的提问来源于stack exchange,提问作者Keydose
相关产品推荐
相关产品推荐

