如何基于Serverless错误信息定位对应的CloudWatch错误日志
报错背景
你遇到的是CloudFormation部署Cognito预注册触发器关联的自定义资源时报错,报错信息如下:
ServerlessError: An error occurred: PreSignUpTriggerCustomCognitoUserPool1 - Received response status [FAILED] from custom resource. Message returned: Cannot read property 'Id' of null See details in CloudWatch Log: 2021/09/27/[$LATEST]730e87607dda45b9addb72bf7d78a60d (RequestId: b44d00d0-9c24-43b8-b694-f3f709320db4).
找不到对应日志流的核心原因是日志组归属判断错误,该日志不属于普通业务Lambda的日志组,属于CloudFormation调用的自定义资源Lambda的日志组,按以下步骤可快速定位:
定位步骤
- 第一步:找到对应自定义资源关联的Lambda函数
进入AWS CloudFormation控制台,找到本次部署失败的栈,切换到「事件」标签,过滤出PreSignUpTriggerCustomCognitoUserPool1资源对应的CREATE_FAILED事件,从事件详情中提取关联的Lambda函数ARN,得到函数名称。 - 第二步:直接跳转对应日志组
进入Lambda控制台搜索上述函数名称,进入函数详情页后点击「监控」标签,选择「查看CloudWatch日志」,即可直接进入对应日志组,无需遍历所有日志组。 - 第三步:快速定位目标日志流
在日志组的搜索框中直接粘贴报错给出的日志流标识730e87607dda45b9addb72bf7d78a60d,即可直接匹配到目标日志流。
异常场景补救方案
如果按上述步骤仍找不到日志,可通过以下两种方式排查:
- 检查自定义资源Lambda的执行角色权限,确认是否附加了
AWSLambdaBasicExecutionRole托管策略,缺少该权限会导致Lambda无法生成CloudWatch日志,自然搜索不到对应日志流。- 使用CloudWatch Logs Insights全量检索,选择所有
/aws/lambda/前缀的日志组,执行如下查询语句,直接通过报错给出的RequestId拉取对应日志:fields @timestamp, @message | filter @requestId = "b44d00d0-9c24-43b8-b694-f3f709320db4" | sort @timestamp desc
内容的提问来源于stack exchange,提问作者7MIMIRA
相关产品推荐
相关产品推荐

