Amplify执行remove auth提示资源存在依赖无法移除如何处理
Amplify移除导入Auth资源报依赖错误的排查解决方法
核心原因是项目内其他Amplify托管资源(API、存储、函数等)和当前导入的外部Cognito用户池存在硬绑定,必须先全量解除关联才能正常移除,按以下步骤操作即可:
- 第一步:定位所有依赖项
执行amplify status列出项目内所有已部署的资源,重点排查以下几类常见的Auth依赖资源:- 配置了Cognito授权的GraphQL/REST API
- 绑定了Cognito访问权限规则的S3存储资源
- 配置为Cognito用户池触发器的Lambda函数
- 自定义资源中硬编码旧用户池ID、身份池ID、客户端ID的配置
- 第二步:逐个解除依赖绑定
- 针对GraphQL API:执行
amplify update api选择对应GraphQL实例,临时将默认授权模式切换为API Key,同时打开amplify/backend/api/<你的API名称>/schema.graphql,删除所有@auth指令中关联旧用户池的自定义规则,同步删除transform.conf.json中引用旧Auth资源的配置项 - 针对REST API:执行
amplify update api选择对应REST实例,删除绑定的Cognito授权器,临时将授权方式切换为IAM或无授权 - 针对S3存储:执行
amplify update storage选择对应存储实例,清空所有关联Cognito用户池的访问权限规则,临时配置为公共访问模式 - 针对Lambda函数:执行
amplify update function选中所有绑定为Cognito触发器的函数,删除对应的触发器配置,同时检查函数环境变量,删除所有硬编码的旧用户池、身份池相关参数
- 针对GraphQL API:执行
- 第三步:清理本地配置残留
打开项目本地的amplify/backend/backend-config.json,找到所有资源dependsOn字段中引用旧Auth资源的条目全部删除;再打开amplify/team-provider-info.json,删除对应环境下所有旧Cognito用户池、身份池、客户端ID的配置字段。 - 第四步:同步变更后移除旧Auth
先执行amplify push把上述解除依赖的变更同步到云端,等CloudFormation部署完成后,再执行amplify remove auth,此时就不会再触发依赖报错。 - 第五步:替换为全新用户池
旧导入Auth移除成功后,执行amplify add auth按需求配置全新的原生用户池,配置完成后回到之前临时调整过授权规则的API、存储、函数资源,重新绑定新的Auth实例,最后执行amplify push完成全量部署即可。
如果完成上述操作后仍然报依赖错误,可以直接打开对应环境的CloudFormation控制台,找到Amplify维护的根堆栈,在资源列表中搜索旧用户池ID,即可精准定位到还存在引用的残留资源,回到本地对应资源目录删除关联配置即可。
内容的提问来源于stack exchange,提问作者adcanis
相关产品推荐
相关产品推荐

