AWS Lambda别名仅记录INIT_START事件至CloudWatch的原因排查
Lambda别名调用无业务日志输出排查方案
问题现象
- 基础Lambda函数($LATEST版本)通过API Gateway触发时,可正常将日志写入CloudWatch的
/aws/lambda/my-function日志组 - 为启用预配置并发,将API Gateway配置为调用Lambda别名后:
- 函数可正常返回预期响应,且生成了包含版本号的日志流(而非
[$LATEST]) - 仅在预配置实例启动时记录
INIT_START事件,后续调用无任何业务日志输出
- 函数可正常返回预期响应,且生成了包含版本号的日志流(而非
- 控制台直接调用别名:返回正常响应,但无日志;直接调用$LATEST版本则日志正常
- 已放宽Lambda执行角色的CloudWatch权限(授予
arn:aws:logs:*:*:*的logs:CreateLogGroup/CreateLogStream/PutEvents权限),且重新发布函数版本更新别名,问题依旧 - 确认别名调用上下文正确:
functionVersion为指定版本,invokedFunctionArn带别名后缀,日志组和流名称配置无误(上下文信息如下):{ "context": { "callbackWaitsForEmptyEventLoop": true, "functionVersion": "6", "functionName": "my-function", "memoryLimitInMB": "128", "logGroupName": "/aws/lambda/my-function", "logStreamName": "2023/03/08/[6]541834ec8f884588ba63e209f0be0789", "invokedFunctionArn": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:my-function:my-function", "awsRequestId": "e0812992-cf58-4a8b-b4a6-1ac0a91445b1" } }
排查与解决步骤
1. 检查别名的日志排除规则
Lambda别名可单独配置日志排除规则,若规则误配置会过滤所有调用日志:
- 进入Lambda控制台→目标函数→选择对应别名→配置→监控和操作工具→日志记录
- 确认“日志排除”列表中无匹配业务日志或全局排除(如
*)的规则,如有则删除后重试
2. 验证日志流的延迟与异常日志组
预配置并发实例的日志写入可能存在延迟,或出现异常日志组:
- 等待5-10分钟后再次查看对应日志流,避免因延迟导致日志未及时显示
- 检查CloudWatch中是否存在带别名后缀的日志组(如
/aws/lambda/my-function:my-alias),确认日志是否被写入错误位置
3. 确认代码日志输出方式
确保函数代码的日志输出符合运行时要求:
- Node.js:使用
console.log/console.error输出到标准流 - Python:使用
print或logging模块输出 - 自定义运行时:确保日志被正确转发至Lambda的日志收集机制
4. 排查IAM权限的隐性限制
即使已放宽权限,需确认角色信任关系无限制:
- 检查Lambda执行角色的信任策略,确保包含
lambda.amazonaws.com作为信任实体,且未限制特定函数ARN - 测试环境可临时添加
AdministratorAccess权限,验证是否为权限问题导致
5. 重新创建Lambda别名
别名配置异常可能导致日志收集故障,重新创建可解决:
- 删除现有别名,基于目标版本重新创建新别名
- 更新API Gateway集成配置至新别名,再次测试调用
6. 联系AWS支持
若以上步骤无效,需提交AWS支持工单,提供以下信息:
- 函数ARN、别名ARN
- 调用对应的
awsRequestId - 日志流名称及预期日志的时间范围
内容的提问来源于stack exchange,提问作者davecardwell
相关产品推荐
相关产品推荐

