如何通过Terraform将AWS EFS访问点挂载到EC2实例?
EFS访问点目录不存在、权限报错问题修复方案
1. 先验证挂载有效性
执行以下命令确认EFS是否正常挂载:
- 查看挂载文件系统列表:
df -h,确认输出中存在对应EFS的挂载条目 - 查看NFS挂载参数:
mount | grep nfs4,确认挂载目标路径匹配你配置的/home/ubuntu/mount-point
2. 最常见遗漏:未挂载指定访问点
你当前使用的默认mount -t nfs4命令是挂载EFS的根文件系统,而非你在Terraform中配置的aws_efs_access_point对应的逻辑路径,访问点的/access是逻辑映射路径,不会直接出现在EFS根目录下。
挂载访问点需要指定访问点ID参数,正确挂载命令格式如下:
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,accesspoint=<你的EFS访问点ID> <EFS文件系统DNS>:/ /home/ubuntu/mount-point
3. 访问点配置遗漏自动创建目录参数
如果已经挂载访问点还是报错,检查你的Terraformaws_efs_access_point资源是否缺失root_directory.creation_info配置。该配置用于告知EFS自动创建根目录并设置权限,没有该配置则不会自动生成/access目录,也不会分配对应权限,参考正确配置:
resource "aws_efs_access_point" "lambda_packages" { file_system_id = aws_efs_file_system.shared.id # 配置为和你EC2上操作的ubuntu用户一致的UID/GID,默认ubuntu用户UID/GID均为1000 posix_user { gid = 1000 uid = 1000 } root_directory { path = "/access" # 必须配置该块才会自动创建目录并设置权限 creation_info { owner_gid = 1000 owner_uid = 1000 permissions = "0755" } } }
4. 安全组规则校验
- 确认EC2实例的出站安全组开放了NFS协议的2049端口
- 确认EFS挂载目标的入站安全组开放了来自EC2所属安全组的2049端口入站规则
规则缺失会导致静默挂载失败,出现目录无内容、无权限的报错。
内容的提问来源于stack exchange,提问作者filiphagan
相关产品推荐
相关产品推荐

