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

Node.js中fs.statSync()在EFS+Lambda环境无法获取真实文件创建时间

问题描述

本地环境使用Node.js的fs模块管理文件时,可正常获取文件的创建时间(birthtime),但将代码部署为挂载AWS EFS的Node.js Lambda函数后,获取到的创建时间始终为1970-01-01T00:00:00.000Z,并非文件实际创建时间。

代码示例:

var efsDirectory = "/mnt/data/";
var filePath = path.join(efsDirectory, file);
console.log("This file is going to be executed :", file);
var response = fs.statSync(filePath);
let fileBirthTime = response.birthtime;
console.log("File path is : ", filePath);

拼接后的实际文件路径为/mnt/data/172.807056.json,CloudWatch日志显示时间异常,本地运行则能得到正确结果。

原因分析
  • EFS的NFS协议限制:AWS EFS默认使用NFS v3协议,而NFS v3本身不支持存储文件的创建时间(birthtime)元数据。Lambda通过fs模块访问EFS文件时,无法获取真实的创建时间,只能返回Unix纪元初始时间(1970-01-01)作为替代值。
  • Node.js的 fallback 机制:当底层文件系统无法提供birthtime数据时,Node.js的fs.stat()/fs.statSync()方法不会抛出错误,而是默认返回纪元初始时间,这就导致了日志中显示的异常时间。
  • NFS版本与权限配置问题:即使升级到支持birthtime的NFS v4.1,如果Lambda执行角色没有足够权限读取EFS文件的元数据,或者挂载EFS时未正确指定NFS v4.1版本,仍然无法获取真实的创建时间。

内容的提问来源于stack exchange,提问作者Rehan CH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:15:32