You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Serverless为现有Cognito用户池添加触发器时部署失败求助

解决Serverless关联已有Cognito用户池触发器时的Lambda重复创建错误

问题分析

给已有Cognito用户池添加PostConfirmation触发器,设置existing: true后部署失败,报错Function creation failed because the function already exists。这是因为Serverless框架处理existing: true的Cognito触发器时,会自动创建一个自定义资源Lambda用于关联已有用户池和业务触发器Lambda,但这个自定义资源Lambda的命名可能和之前部署残留的函数重复,导致冲突。

解决方案

方案1:指定自定义资源Lambda的唯一名称

修改Serverless配置,给自动创建的自定义资源Lambda设置唯一名称,避免命名冲突:

  1. 在custom区块添加自定义资源名称配置:
custom:
  userPoolName: your-existing-pool-name
  # 给关联用的自定义资源Lambda设置唯一名称,带上环境区分
  existingCupLambdaName: my-unique-existing-cup-lambda-${self:provider.stage}
  1. 在触发器事件中添加resourceName参数引用这个名称:
postConfirmation:
  handler: triggers.postConfirmation
  events:
    - cognitoUserPool:
        pool: ${self:custom.userPoolName}
        trigger: PostConfirmation
        existing: true
        resourceName: ${self:custom.existingCupLambdaName}

重新部署即可,框架会使用你指定的名称创建自定义资源Lambda,避免重复。

方案2:手动关联触发器

如果不想依赖框架的自动关联逻辑,可以手动完成触发器绑定:

  1. 先去掉Serverless配置中的cognitoUserPool事件,部署你的业务Lambda函数:
postConfirmation:
  handler: triggers.postConfirmation
  # 暂时移除cognitoUserPool事件
  1. 部署完成后,登录AWS Cognito控制台:
    • 找到目标用户池,进入「触发器」标签页
    • 在PostConfirmation触发器下拉菜单中选择你刚部署的Lambda函数,保存配置。

方案3:清理残留的自定义资源Lambda

如果之前部署已经创建过同名的自定义资源Lambda,可以直接删除它:

  • 登录AWS Lambda控制台,搜索CustomDashresourceDashexistingDashcupLambdaFunction(或类似命名的函数)
  • 确认该函数是之前部署残留的无用资源后,删除它,再重新执行Serverless部署。

内容的提问来源于stack exchange,提问作者3rdSenna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:42:22