anpanman
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 操作:

  1. 進入 EC2 ConsoleSecurity Groups
  2. 找到 EFS 使用的 Security Group(通常 Description 會寫 "allow efs mount" 或包含 "efs" 字樣)
  3. 點選該 SG → Inbound rulesEdit inbound rules
  4. 新增以下規則:

方法 A:使用 Security Group(推薦)

類型協定Port 範圍來源說明
NFSTCP2049sg-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 範圍來源說明
NFSTCP20490.0.0.0/0允許所有來源(測試用)
NFSTCP204910.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 沒有正確設定

解決方法

  1. 檢查 EFS 的 SG 是否有開放 TCP 2049
  2. 確認來源包含你的 EC2 SG 或 IP 範圍
  3. 檢查 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 的三個關鍵步驟:

  1. 設定安全群組:EFS SG 開放 TCP 2049 給 EC2 SG
  2. 建立掛載目錄mkdir -p /efs/mnt/efs_staging
  3. 執行掛載指令sudo mount -t efs -o tls <EFS-ID>:/ <掛載點>

只要安全群組設定正確,AWS 會自動處理其他細節(如選擇最近的 Mount Target),整個過程非常簡單!


📚 參考資源