- Published on
在 EC2 掛載 EFS 完整指南
📋 前言
本文介紹如何在 AWS EC2 上掛載 EFS (Elastic File System),重點在於透過 AWS Console 設定安全群組規則,讓 EC2 能夠順利連接 EFS。
🎯 核心概念
- EFS 使用 NFS 協定:需要開放 TCP 2049 port
- 安全群組是關鍵:EFS 的 SG 必須允許 EC2 的 SG 連線
- 自動解析 Mount Target:AWS 會自動選擇同 AZ 的 mount target,不需手動建立
🔧 完整操作流程
1️⃣ 設定 EFS 的安全群組(SG)入站規則
在 AWS Console 操作:
- 進入 EC2 Console → Security Groups
- 找到 EFS 使用的 Security Group(通常 Description 會寫 "allow efs mount" 或包含 "efs" 字樣)
- 點選該 SG → Inbound rules → Edit inbound rules
- 新增以下規則:
方法 A:使用 Security Group(推薦)
| 類型 | 協定 | Port 範圍 | 來源 | 說明 |
|---|---|---|---|---|
| NFS | TCP | 2049 | sg-xxxxxxxxx | 選擇你的 EC2 使用的 Security Group(例如:launch-wizard-4) |
💡 操作重點:
- 先找到 EFS 的 SG(Description 有 "allow efs mount")
- 在這個 EFS SG 裡面,加入你 EC2 使用的 SG(例如:launch-wizard-4)作為來源
- 這樣所有使用 launch-wizard-4 SG 的 EC2 都能掛載 EFS
方法 B:使用 IP 範圍(較不彈性)
| 類型 | 協定 | Port 範圍 | 來源 | 說明 |
|---|---|---|---|---|
| NFS | TCP | 2049 | 0.0.0.0/0 | 允許所有來源(測試用) |
| NFS | TCP | 2049 | 10.10.0.0/16 | 允許特定 VPC CIDR |
💡 建議:使用 Security Group 作為來源,這樣當 EC2 IP 變動時不需要重新設定規則。
2️⃣ 在 EC2 建立掛載目錄
SSH 連線到你的 EC2 instance,執行以下指令:
sudo mkdir -p /efs/mnt/efs_staging
📝 說明:
-p參數會自動建立所有必要的父目錄。
3️⃣ 掛載 EFS
使用以下指令掛載 EFS(使用 TLS 加密):
sudo mount -t efs -o tls fs-0aadf2b60220c150a:/ /efs/mnt/efs_staging
指令說明:
-t efs:指定檔案系統類型為 EFS-o tls:使用 TLS 加密傳輸fs-0aadf2b60220c150a:你的 EFS File System ID/efs/mnt/efs_staging:EC2 上的掛載點
⚠️ 注意:請替換
fs-0aadf2b60220c150a為你實際的 EFS ID。
4️⃣ 驗證掛載
執行以下指令確認 EFS 是否成功掛載:
df -h | grep efs_staging
預期輸出:
127.0.0.1:/ 8.0E 0 8.0E 0% /efs/mnt/efs_staging
如果看到類似輸出,表示掛載成功!
🔍 常見問題排查
❌ 問題 1:掛載失敗,顯示 "Connection timed out"
原因:Security Group 沒有正確設定
解決方法:
- 檢查 EFS 的 SG 是否有開放 TCP 2049
- 確認來源包含你的 EC2 SG 或 IP 範圍
- 檢查 EC2 和 EFS 是否在同一個 VPC
❌ 問題 2:掛載後無法寫入
原因:權限設定問題
解決方法:
# 修改掛載點權限
sudo chmod 777 /efs/mnt/efs_staging
# 或設定特定使用者擁有權
sudo chown ec2-user:ec2-user /efs/mnt/efs_staging
❌ 問題 3:重開機後掛載消失
原因:沒有設定自動掛載
解決方法:編輯 /etc/fstab 加入自動掛載
sudo nano /etc/fstab
加入以下內容:
fs-0aadf2b60220c150a:/ /efs/mnt/efs_staging efs _netdev,tls 0 0
📊 AWS Console 設定截圖說明
如果你在 AWS Console 看到 EFS 的 Inbound Rules 像這樣:
10.10.160.0/20 → TCP 2049
10.10.144.0/20 → TCP 2049
10.10.128.0/20 → TCP 2049
sg-0280a2c3729b1defe → TCP 2049
這些是 AWS 根據你的 VPC Subnet 自動產生的規則。你可以:
- 保留這些規則:如果你的 EC2 IP 在這些範圍內
- 只保留 SG 規則:刪除 IP 規則,只用 Security Group 來源(更彈性)
💡 實用技巧
1. 測試 EFS 連線
在掛載前,先測試 2049 port 是否通:
telnet fs-0aadf2b60220c150a.efs.ap-northeast-1.amazonaws.com 2049
2. 查看已掛載的 EFS
mount | grep efs
3. 卸載 EFS
sudo umount /efs/mnt/efs_staging
🎓 總結
掛載 EFS 的三個關鍵步驟:
- ✅ 設定安全群組:EFS SG 開放 TCP 2049 給 EC2 SG
- ✅ 建立掛載目錄:
mkdir -p /efs/mnt/efs_staging - ✅ 執行掛載指令:
sudo mount -t efs -o tls <EFS-ID>:/ <掛載點>
只要安全群組設定正確,AWS 會自動處理其他細節(如選擇最近的 Mount Target),整個過程非常簡單!