CloudWatch Events触发Lambda异常:Cognito Identity事件无响应求助
我之前踩过Cognito Identity事件触发Lambda的坑,给你梳理几个实打实的排查方向,应该能帮你定位问题:
排查Cognito Identity事件未触发Lambda的核心要点
1. 先确认CloudTrail是否在正常记录Cognito Identity事件
Cognito Identity的API事件是通过CloudTrail转发给CloudWatch Events的,这是最容易被忽略的前提!你需要:
- 检查CloudTrail是否已经启用,并且包含了
cognito-identity.amazonaws.com这个服务的日志记录 - 去CloudTrail的事件历史里搜索关键词
cognito-identity,看看你执行的登录、属性更新等操作有没有对应的API调用记录(比如GetId、UpdateIdentity这类)
如果CloudTrail里完全找不到这些事件,那CloudWatch Events根本收不到触发信号,先把CloudTrail的配置搞定。
2. 核对事件模式的匹配规则是否精准
CloudWatch Events的事件模式必须严格匹配事件格式,很多时候问题就出在这里。给你一个覆盖常见读写操作的事件模式示例,你可以对比自己的配置:
{ "source": ["aws.cognito-identity"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["cognito-identity.amazonaws.com"], "eventName": [ "GetId", // 对应登录获取身份ID "GetCredentialsForIdentity", // 获取身份凭证 "UpdateIdentity", // 更新身份属性 "DeleteIdentities", // 删除身份(类似登出清理) "CreateIdentityPool", "UpdateIdentityPool", "DeleteIdentityPool" ] }
注意:如果你的操作是Cognito用户池的登录、属性更新(不是Identity池),那事件源应该是aws.cognito-idp,eventName要换成AdminInitiateAuth、UpdateUserAttributes这类,别把用户池和身份池的事件搞混了!
3. 检查Lambda的触发权限和执行角色
- 确认Lambda的触发器列表里已经添加了对应的CloudWatch Events规则,并且状态是已启用
- 检查Lambda的执行角色的信任策略,是否允许CloudWatch Events调用它:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "lambda:InvokeFunction" } ] }
另外,确保Lambda的执行角色有读取CloudWatch Logs的权限,方便后续查日志。
4. 验证规则是否能触发Lambda
你可以在CloudWatch Events规则页面点击测试事件,用CloudTrail里找到的真实Cognito Identity事件样例来测试,看看Lambda是否会被触发。如果测试能触发,说明你的事件模式没问题,可能是实际操作对应的事件Name不在你的模式里;如果测试也触发不了,那就是事件模式或者权限的问题。
5. 查看Lambda的执行日志
去CloudWatch Logs里找到Lambda对应的日志组,看看有没有执行记录:
- 如果有日志但报错,根据错误信息修复Lambda代码或者权限
- 如果完全没有日志,说明Lambda根本没被触发,回到前面的CloudTrail和事件模式排查
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

