如何在AWS Serverless中移除重复创建的Cognito User Pool?
解决Serverless框架下重复创建Cognito用户池的问题
1. 定位要删除的用户池
两个同名用户池可通过以下方式区分:
- 登录AWS Cognito控制台,找到两个
MyUserPool实例,查看ARN和关联触发器:自动创建的池会绑定post_sign_upLambda触发器,而resources字段定义的池无此关联 - 进入CloudFormation控制台,找到服务对应的栈,在资源列表中识别:自动生成的用户池命名通常带触发器标识(如
PostConfirmationMyUserPoolUsersPool),自定义的为你在resources里定义的UserPool
2. 手动移除目标用户池及关联资源(无需重新部署)
步骤1:移除Lambda触发器关联
- 打开目标用户池的触发器页面,找到绑定的
post_sign_upLambda,点击移除 - 进入Lambda控制台的
post_sign_up函数页面,在触发器标签页删除该用户池的触发配置
步骤2:删除用户池
- 回到Cognito用户池页面,选中目标池(自动创建的那个),点击删除
注意:若池内存在用户,需先批量删除所有用户才能执行池删除操作
步骤3:清理CloudFormation残留(可选)
如果自动创建的用户池由CloudFormation管理,手动删除后可能在栈中留下残留资源,可通过以下方式清理:
- 使用AWS CLI命令:
aws cloudformation delete-stack-resources --stack-name <你的服务栈名> --logical-resource-id <自动创建的用户池逻辑ID> - 或在CloudFormation控制台的栈资源列表中,选中目标资源执行删除操作
3. 修正Serverless配置避免重复创建
修改你的serverless.yml配置,取消注释existing: true选项,确保触发器关联到自定义的用户池:
functions: post_sign_up: ... events: - cognitoUserPool: pool: MyUserPool trigger: PostConfirmation existing: true # 启用该选项,关联已有用户池 ... resources: UserPool: ... Properties: UserPoolName: MyUserPool
后续部署时,框架会自动将触发器绑定到你在resources中定义的用户池,不会再创建新池。
内容的提问来源于stack exchange,提问作者Александр М
相关产品推荐
相关产品推荐

