EFS: พื้นที่จัดเก็บไฟล์ร่วมสำหรับ Linux
เมานต์ระบบไฟล์ EFS ข้ามอินสแตนซ์ EC2 และฟังก์ชัน Lambda หลายรายการ กำหนดค่าโหมดประสิทธิภาพและปริมาณงาน และควบคุมการเข้าถึงด้วยกลุ่มความปลอดภัย
EFS: พื้นที่จัดเก็บไฟล์ร่วมสำหรับ Linux เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
Amazon EFS คืออะไร
Amazon Elastic File System (EFS) คือระบบไฟล์ POSIX แบบใช้ร่วมกันที่ยืดหยุ่นและมีการจัดการเต็มรูปแบบ สามารถเมานต์พร้อมกันโดยอินสแตนซ์ EC2 หลายพันรายการ ฟังก์ชัน Lambda และคอนเทนเนอร์ ECS/EKS แตกต่างจาก EBS (ซึ่งเชื่อมต่อกับอินสแตนซ์เดียว) ตรงที่ EFS มีระบบไฟล์ที่ใช้ร่วมกัน โดยไคลเอ็นต์ที่เชื่อมต่อทั้งหมดจะเห็นไฟล์เดียวกันแบบเรียลไทม์ ความจุจะเพิ่มและลดโดยอัตโนมัติ คุณจึงไม่ต้องจัดสรรพื้นที่จัดเก็บล่วงหน้า EFS เหมาะสำหรับการจัดการเนื้อหา คลังเก็บโค้ดที่ใช้ร่วมกัน ไดเรกทอรีหลัก และการวิเคราะห์ข้อมูล
คลาสพื้นที่จัดเก็บของ EFS
EFS มีคลาสพื้นที่จัดเก็บสองแบบ: EFS Standard (หลาย AZ มีความพร้อมใช้งานสูงสุด และมีเวลาแฝงต่ำกว่าหนึ่งมิลลิวินาที) และ EFS One Zone (AZ เดียว ค่าใช้จ่ายต่ำลง 47% และทนทานน้อยกว่าเล็กน้อย) ภายในแต่ละระดับยังมีรูปแบบการเข้าถึงไม่บ่อย (IA) ซึ่งจัดเก็บข้อมูลด้วยค่าใช้จ่ายต่ำกว่า Standard 92% สำหรับไฟล์ที่ไม่ได้เข้าถึงเป็นประจำ ความแตกต่างจาก S3 คือ EFS เป็นระบบไฟล์ POSIX แบบเต็มรูปแบบที่แอปพลิเคชันของคุณสามารถเมานต์ได้ ไม่ใช่พื้นที่จัดเก็บออบเจ็กต์
# Create an EFS file system in Standard storage class
aws efs create-file-system \
--performance-mode generalPurpose \
--throughput-mode elastic \
--encrypted \
--tags Key=Name,Value=SharedFileSystem
# One Zone (cheaper, single-AZ):
aws efs create-file-system \
--performance-mode generalPurpose \
--throughput-mode elastic \
--encrypted \
--availability-zone-name us-east-1a \
--tags Key=Name,Value=SharedFileSystemOneZoneโหมดประสิทธิภาพของ EFS
EFS มีโหมดประสิทธิภาพสองแบบ ได้แก่ General Purpose (ค่าเริ่มต้น แนะนำสำหรับงานส่วนใหญ่ — มีเวลาแฝงต่ำที่สุด เหมาะสำหรับการให้บริการเว็บ การจัดการเนื้อหา และไดเรกทอรีส่วนบุคคล) และ Max I/O (ออกแบบมาสำหรับงานที่ทำงานแบบขนานจำนวนมาก โดยมีการเชื่อมต่อพร้อมกันหลายพันรายการ แลกกับเวลาแฝงที่สูงขึ้นเล็กน้อย เหมาะสำหรับการประมวลผลข้อมูลขนาดใหญ่และสื่อ) ระบบจะกำหนดโหมดประสิทธิภาพขณะสร้าง และไม่สามารถเปลี่ยนแปลงได้หลังจากสร้างระบบไฟล์แล้ว สำหรับการสอบ SAA-C03 ให้เลือก Max I/O เฉพาะเมื่อจำเป็นต้องรองรับการเชื่อมต่อแบบขนานหลายพันรายการอย่างชัดเจน
# Create EFS with Max I/O for highly parallel workloads
aws efs create-file-system \
--performance-mode maxIO \
--throughput-mode provisioned \
--provisioned-throughput-in-mibps 1024 \
--encrypted
# Note: Max I/O mode is NOT compatible with Elastic throughput mode
# It must use Provisioned or Bursting throughputโหมดอัตราการรับส่งข้อมูลของ EFS
EFS รองรับโหมดอัตราการรับส่งข้อมูลสามแบบ ได้แก่ Elastic (ปรับอัตราการรับส่งข้อมูลขึ้นลงโดยอัตโนมัติตามภาระงาน — แนะนำสำหรับกรณีใช้งานส่วนใหญ่ คิดค่าบริการตามปริมาณข้อมูลที่ถ่ายโอน) Bursting (อัตราการรับส่งข้อมูลเพิ่มตามขนาดพื้นที่จัดเก็บ สะสมและใช้เครดิตการเร่งความเร็วเช่นเดียวกับ EC2 ซีรีส์ T — มีอัตราพื้นฐานให้ใช้ฟรี) และ Provisioned (คุณระบุอัตราการรับส่งข้อมูลคงที่โดยไม่ขึ้นกับขนาดพื้นที่จัดเก็บ — มีประโยชน์เมื่อต้องการอัตราการรับส่งข้อมูลที่สม่ำเสมอเกินกว่าที่ Bursting รองรับ) โหมด Elastic เป็นค่าเริ่มต้นสมัยใหม่และไม่จำเป็นต้องวางแผนความจุอัตราการรับส่งข้อมูล
# Migrate an existing EFS from Bursting to Elastic throughput
aws efs update-file-system \
--file-system-id fs-0abc1234def567890 \
--throughput-mode elastic
# Check current throughput mode and performance mode
aws efs describe-file-systems \
--file-system-id fs-0abc1234def567890 \
--query 'FileSystems[].{ThroughputMode:ThroughputMode,PerfMode:PerformanceMode,SizeBytes:SizeInBytes.Value}'Mount เป้าหมายและกลุ่มความปลอดภัย
หากต้องการเข้าถึงระบบไฟล์ EFS จากอินสแตนซ์ EC2 ให้สร้าง Mount เป้าหมาย ในแต่ละซับเน็ต (AZ) ที่อินสแตนซ์ของคุณทำงานอยู่ สำหรับ EFS Standard คุณควรสร้าง Mount เป้าหมายในทุก AZ ภายใน VPC — อินสแตนซ์ EC2 จะเชื่อมต่อกับ Mount เป้าหมายใน AZ เดียวกันเพื่อให้มีเวลาแฝงต่ำที่สุด Mount เป้าหมายมีกลุ่มความปลอดภัยที่ต้องอนุญาตการรับส่งข้อมูล NFS (พอร์ต 2049 ผ่าน TCP) จากกลุ่มความปลอดภัยของอินสแตนซ์ หากไม่มีกฎขาเข้านี้ การดำเนินการ mount จะหมดเวลา
# Create a mount target in each AZ
aws efs create-mount-target \
--file-system-id fs-0abc1234def567890 \
--subnet-id subnet-aaa111 \
--security-groups sg-efsnfs
aws efs create-mount-target \
--file-system-id fs-0abc1234def567890 \
--subnet-id subnet-bbb222 \
--security-groups sg-efsnfs
# The EFS security group needs: Inbound TCP 2049 from instance SGการ Mount EFS บน EC2 Linux
วิธีที่แนะนำสำหรับการ mount EFS บน EC2 คือใช้ Amazon EFS Mount Helper (แพ็กเกจ amazon-efs-utils) ซึ่งรองรับการเข้ารหัส TLS ระหว่างการส่งข้อมูลและการเชื่อมต่อใหม่โดยอัตโนมัติ คุณจะ mount โดยใช้ ID ของระบบไฟล์แทนที่อยู่ IP เพื่อให้ DNS แปลงไปยัง Mount เป้าหมายใน AZ ที่ใกล้ที่สุดโดยอัตโนมัติ สำหรับการ mount แบบถาวรที่ยังคงอยู่หลังการรีบูต ให้เพิ่มรายการ mount ลงใน /etc/fstab โดยใช้ตัวเลือก _netdev เพื่อให้แน่ใจว่าเครือข่ายพร้อมใช้งานก่อนทำการ mount
# Install the EFS mount helper
sudo yum install -y amazon-efs-utils
# Mount with TLS encryption in transit
sudo mkdir /mnt/efs
sudo mount -t efs -o tls fs-0abc1234def567890:/ /mnt/efs
# Persistent mount in /etc/fstab
# fs-0abc1234def567890:/ /mnt/efs efs defaults,_netdev,tls 0 0
# Verify mount
df -h /mnt/efsจุดเข้าถึง EFS
EFS Access Points คือจุดเข้าถึงเฉพาะแอปพลิเคชันสำหรับเข้าสู่ระบบไฟล์ EFS ซึ่งบังคับใช้ผู้ใช้ POSIX กลุ่ม และไดเรกทอรีรากที่กำหนดไว้กับการเชื่อมต่อทั้งหมดที่ใช้จุดเข้าถึงนั้น วิธีนี้ช่วยแยกแอปพลิเคชันหลายรายการบนระบบไฟล์เดียวกันออกจากกันได้ — แอปพลิเคชัน A mount ผ่าน Access Point A และมองเห็นเฉพาะ /data/app-a/ ขณะที่แอปพลิเคชัน B ซึ่งใช้ Access Point B จะมองเห็นเฉพาะ /data/app-b/ Access Points เป็นวิธีที่แนะนำสำหรับการให้ฟังก์ชัน Lambda งาน ECS และพ็อด EKS เข้าถึงระบบไฟล์ EFS ที่ใช้ร่วมกันแบบแยกจากกัน
# Create an EFS Access Point for an application
aws efs create-access-point \
--file-system-id fs-0abc1234def567890 \
--posix-user Uid=1001,Gid=1001 \
--root-directory Path=/data/app-a,CreationInfo={OwnerUid=1001,OwnerGid=1001,Permissions=755} \
--tags Key=App,Value=app-a
# Mount using the access point
sudo mount -t efs \
-o tls,accesspoint=fsap-0abc1234def567890 \
fs-0abc1234def567890:/ /mnt/app-aIntelligent-Tiering และวงจรชีวิตของ EFS
Intelligent-Tiering ของ EFS จะย้ายไฟล์ระหว่างคลาสพื้นที่จัดเก็บ Standard และ Standard-IA (Infrequent Access) โดยอัตโนมัติตามรูปแบบการเข้าถึง คุณกำหนดนโยบายวงจรชีวิตได้ เช่น ย้ายไฟล์ไปยัง IA หลังจากไม่มีการเข้าถึงเป็นเวลา 30 วัน เมื่อมีการเข้าถึงไฟล์ใน IA อีกครั้ง ระบบจะย้ายไฟล์กลับไปยัง Standard โดยอัตโนมัติ การดึงข้อมูลจาก IA มีค่าธรรมเนียมการดึงข้อมูลต่อ GB แต่มีค่าใช้จ่ายด้านพื้นที่จัดเก็บต่ำกว่ามาก แนวทางนี้คล้ายกับ S3 Intelligent-Tiering และไม่จำเป็นต้องจัดการตำแหน่งไฟล์ด้วยตนเอง
# Enable lifecycle management (move to IA after 14 days)
aws efs put-lifecycle-configuration \
--file-system-id fs-0abc1234def567890 \
--lifecycle-policies '[
{"TransitionToIA": "AFTER_14_DAYS"},
{"TransitionToPrimaryStorageClass": "AFTER_1_ACCESS"}
]'
# Check current lifecycle configuration
aws efs describe-lifecycle-configuration \
--file-system-id fs-0abc1234def567890EFS กับ Lambda และคอนเทนเนอร์
ฟังก์ชัน Lambda สามารถ mount ระบบไฟล์ EFS เพื่อใช้ไฟล์โมเดลขนาดใหญ่ ข้อมูลถาวร หรือการกำหนดค่าร่วมกันระหว่างการเรียกใช้แต่ละครั้งได้ — ช่วยแก้ข้อจำกัดของ /tmp ที่มีขนาด 512 MB-10 GB งาน ECS และ EKS จะ mount EFS ผ่านการอ้างสิทธิ์โวลุมถาวรโดยใช้ไดรเวอร์ EFS CSI ฟังก์ชัน Lambda หรือคอนเทนเนอร์ต้องอยู่ใน VPC ที่มี Mount เป้าหมาย และกลุ่มความปลอดภัยของ EFS ต้องอนุญาต NFS ขาเข้าจากกลุ่มความปลอดภัย VPC ของ Lambda หรือคอนเทนเนอร์ EFS + Lambda เป็นรูปแบบการใช้งานทั่วไปสำหรับแบ่งปันโมเดล ML ที่ฝึกแล้วระหว่างอินสแตนซ์ของฟังก์ชัน
# Lambda function with EFS mount (CloudFormation excerpt)
# Resources:
# MyFunction:
# Type: AWS::Lambda::Function
# Properties:
# VpcConfig:
# SubnetIds: [subnet-aaa]
# SecurityGroupIds: [sg-lambda]
# FileSystemConfigs:
# - Arn: arn:aws:elasticfilesystem:us-east-1:111122223333:access-point/fsap-0abc
# LocalMountPath: /mnt/models
# In function code:
# import os
# model_path = '/mnt/models/my-model.pkl'
# with open(model_path, 'rb') as f:
# model = pickle.load(f)ความแตกต่างสำคัญสำหรับการสอบระหว่าง EFS กับ EBS
การสอบ SAA-C03 มักให้คุณเลือกใช้ระหว่าง EFS และ EBS EFS: ระบบไฟล์ POSIX ที่ใช้ร่วมกันได้ mount บนอินสแตนซ์ EC2 หลายรายการพร้อมกัน ความจุยืดหยุ่น รองรับ Lambda และคอนเทนเนอร์ ใช้ได้กับ Linux เท่านั้น (NFS) และมีค่าใช้จ่ายต่อ GB สูงกว่า EBS: อุปกรณ์แบบบล็อก เชื่อมต่อกับอินสแตนซ์ EC2 เดียว (ยกเว้น io1/io2 Multi-Attach) มีขนาดที่จัดสรรไว้ตายตัว ใช้ได้ทั้ง Linux และ Windows ไม่สามารถเข้าถึงโดย Lambda ได้โดยตรง และมีค่าใช้จ่ายต่อ GB ต่ำกว่า หากสถานการณ์ระบุว่า “หลายอินสแตนซ์ต้องใช้ไฟล์ชุดเดียวกัน” คำตอบคือ EFS
การเข้ารหัส EFS
EFS รองรับการเข้ารหัสขณะจัดเก็บ (เปิดใช้ขณะสร้างระบบไฟล์โดยใช้คีย์ KMS — ไม่สามารถเปลี่ยนแปลงได้หลังการสร้าง) และการเข้ารหัสระหว่างการส่งข้อมูล (การเข้ารหัส TLS เมื่อใช้ EFS Mount Helper พร้อมตัวเลือก tls) AWS แนะนำให้เปิดใช้ทั้งสองแบบ คุณสามารถบังคับใช้การเข้ารหัสระหว่างการส่งข้อมูลด้วยนโยบายตามทรัพยากรของ EFS ซึ่งปฏิเสธการ mount หากไม่มี TLS โดยกำหนดให้มีเงื่อนไข elasticfilesystem:ClientRootAccess และ elasticfilesystem:ClientWrite
# Create an EFS file system with encryption at rest
aws efs create-file-system \
--encrypted \
--kms-key-id arn:aws:kms:us-east-1:111122223333:key/KEY_ID
# Mount with TLS to encrypt in transit
sudo mount -t efs -o tls fs-0abc1234def567890:/ /mnt/efs
# Deny unencrypted mounts via EFS resource policy (condition)
# Condition: elasticfilesystem:AccessedViaMountTarget = true
# and aws:SecureTransport = trueตรวจสอบความเข้าใจ
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า EFS คือระบบไฟล์ POSIX ที่ใช้ร่วมกันได้ ซึ่งสามารถ mount บนอินสแตนซ์หลายพันรายการและฟังก์ชัน Lambda พร้อมกันได้ด้วยความจุยืดหยุ่น Access Points ช่วยแยกการเข้าถึงของแต่ละแอปพลิเคชันด้วยการบังคับใช้ผู้ใช้ POSIX และไดเรกทอรีราก ส่วน Intelligent-Tiering จะย้ายไฟล์ที่ไม่ค่อยมีการเข้าถึงไปยังคลาสพื้นที่จัดเก็บ IA ที่มีค่าใช้จ่ายต่ำกว่าโดยอัตโนมัติ บทถัดไปเราจะศึกษา FSx for Windows File Server และ Lustre สำหรับงานเฉพาะทาง
คำถามที่พบบ่อย
บทเรียน “EFS: พื้นที่จัดเก็บไฟล์ร่วมสำหรับ Linux” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “EFS: พื้นที่จัดเก็บไฟล์ร่วมสำหรับ Linux” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “EFS: พื้นที่จัดเก็บไฟล์ร่วมสำหรับ Linux”
เมานต์ระบบไฟล์ EFS ข้ามอินสแตนซ์ EC2 และฟังก์ชัน Lambda หลายรายการ กำหนดค่าโหมดประสิทธิภาพและปริมาณงาน และควบคุมการเข้าถึงด้วยกลุ่มความปลอดภัย คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “EFS: พื้นที่จัดเก็บไฟล์ร่วมสำหรับ Linux” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม
ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ประเภทวอลุ่ม EBS: gp3, io2, st1, sc1
- สแนปช็อต EBS การเข้ารหัส และ RAID
- EFS: พื้นที่จัดเก็บไฟล์ร่วมสำหรับ Linux
- FSx: เซิร์ฟเวอร์ไฟล์ Windows และ Lustre