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
相关产品推荐
相关产品推荐

