Lambda未出现在用户迁移及Pre-Token generation触发器下拉列表中
AWS Cognito User Migration/Pre-Token Generation触发器无法找到对应Lambda函数的问题排查与解决
问题诱因
- Lambda架构兼容性问题:User Migration和Pre-Token Generation两类触发器暂不兼容ARM64(Graviton2)架构的Lambda函数,其余大部分Cognito触发器已完成ARM架构适配,所以会出现其余触发器可选、仅这两类找不到的情况。
- Lambda运行时版本限制:这两类触发器对Lambda运行时的版本要求比其余触发器更严格,例如低于Node.js 14.x、Python 3.8的已废弃运行时版本,以及自定义运行时(Custom Runtime)的部分版本,会被这两类触发器的检索逻辑直接过滤。
- Lambda资源权限前置校验:其余Cognito触发器仅在绑定完成后才校验Lambda调用权限,而这两类触发器会在下拉列表加载阶段就提前校验Lambda的资源策略是否允许Cognito服务调用,若未配置对应权限则不会展示。
- 旧版Cognito用户池兼容问题:2021年之前创建且未升级功能版本的Cognito用户池,存在部分触发器兼容缺陷,也会导致符合要求的Lambda无法展示。
解决方案
- 切换Lambda架构为x86_64:进入Lambda函数配置页,在「运行时设置」中修改架构为
x86_64,保存后等待1-2分钟再刷新Cognito触发器页面即可看到对应Lambda。 - 升级Lambda运行时到官方推荐稳定版:例如将Node.js升级到16.x/18.x,Python升级到3.9/3.10,避免使用已标记为废弃的运行时版本。
- 给Lambda配置Cognito调用权限:在Lambda函数的「权限」-「基于资源的策略」中添加如下权限配置,替换占位符为你的实际资源参数即可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<区域ID>:<账号ID>:function:<Lambda函数名>", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cognito-idp:<区域ID>:<账号ID>:userpool/<用户池ID>" } } } ] }
- 升级Cognito用户池到最新功能版本:进入Cognito用户池的「属性」页面,找到功能版本选项升级到最新版后重试即可。
- 控制台仍无法展示时可通过CLI直接绑定:执行如下命令即可跳过控制台下拉选择步骤直接完成触发器绑定,替换对应占位符即可:
aws cognito-idp update-user-pool --region <区域ID> --user-pool-id <用户池ID> --lambda-config UserMigration=<LambdaARN>,PreTokenGeneration=<LambdaARN>
内容的提问来源于stack exchange,提问作者Kurnal saini
相关产品推荐
相关产品推荐

