Javascript Lambda函数无法访问EFS中复制的依赖包
问题分析与解决步骤
核心问题排查与修复
1. 修复EFS目录权限问题
你通过sudo复制模块到EFS,导致目录/文件所有者为root,而Lambda执行角色默认使用非root用户运行,无权限读取这些文件。在EC2上执行以下命令修正权限:
# 递归修改所有者为EC2默认用户 sudo chown -R ec2-user:ec2-user /mnt/efs/@aws-sdk sudo chown -R ec2-user:ec2-user /mnt/efs/node-fhir-server-core # 或设置宽松权限(测试场景可用) sudo chmod -R 755 /mnt/efs/
2. 验证Lambda的EFS挂载配置
- 确认Lambda挂载的EFS文件系统ID和EC2上挂载的完全一致
- 检查Lambda的挂载点路径:需与你复制模块的目录对应(比如EC2上是
/mnt/efs/,Lambda挂载时本地路径也要设为/mnt/efs) - 核对VPC安全组:EFS安全组要允许Lambda所在安全组的NFS端口2049入站访问
3. 配置Node.js模块查找路径
Lambda的Node.js默认不会自动将EFS挂载目录加入模块搜索路径,需手动添加环境变量:
- 在Lambda控制台「配置>环境变量」中新增:
- 键:
NODE_PATH - 值:
/mnt/efs(对应你的EFS挂载路径)
此配置会让Node.js自动在EFS目录下查找依赖模块
- 键:
4. 排查EFS控制台无目录显示的问题
EFS控制台文件浏览存在延迟,或可能挂载了错误的文件系统:
- 在EC2执行
df -h,查看/mnt/efs对应的EFS ID,与控制台显示的ID对比 - 等待数分钟后刷新控制台,或用AWS CLI确认:
aws efs describe-file-systems --file-system-id <你的EFS ID>
测试验证
完成上述配置后重新部署Lambda,再执行测试事件:
{ "body": "{\"base_version\":\"R4\",\"resource\":{\"given\":\"John\",\"family\":\"Doe\",\"gender\":\"male\",\"birthDate\":\"1990-01-15\"}}" }
内容的提问来源于stack exchange,提问作者Kendall Boone
相关产品推荐
相关产品推荐

