Amazon EFS คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS再入門ブログリレー2022 Amazon EFS編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.07.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สวัสดีครับทุกคน Seo Eunu ครับ

รายการนี้จะเขียนเกี่ยวกับ AWS ปี 2022 ฉบับเบื้องต้น โดยฝ่าย Consulting ของบริษัทเราเอง นี่เป็นบทความที่จะมาเล่าเกี่ยวกับเนื้อหา AWS Service มาเล่าใหม่อีกครั้งว่ามีอะไรถูกอัพเดทอะไรบ้างแล้ว
แบบละเอียด/เจาะลึกตั้งแต่เบสิกพร้อมคำอธิบาย โดยเหล่าสมาชิกที่เคยเขียนบทความเหล่านี้มาแล้ว

เหมาะสำหรับผู้ที่ต้องการเริ่มเรียนเกี่ยวกับ AWS หรือผู้ที่ใช้งาน AWS อยู่แล้ว แต่ต้องการหาความรู้ใหม่ว่าปี 2022 มีการอัพเดทอะไรบ้าง หากคุณใช่บุคคลเหล่านี้
ทางผู้เขียนก็หวังว่าบทความนี้จะเป็นประโยชน์สำหรับคุณครับ

งั้นก็ไปเริ่มกันเลยครับ Theme ในวันนี้คือ "Amazon EFS" ครับ

Amazon EFS คืออะไร

Amazon EFS(Elastic File System) เป็น Managed service ที่สามารถสร้าง/ปรับแต่ง/ปรับขยายหดขนาดที่จัดเก็บอัตโนมัติ File System
สามารถใช้ได้ทั้ง AWS Cloud Service และ On-Premiere Resource ครับ
มีการจัดเตรียมระบบไฟล์ที่ใช้ร่วมกันบน NFS สามารถใช้ได้ใน WorkLoad Linux แต่ Windows-based client ไม่สามารถใช้ EFS ได้
(Windows จะใช้ File Storage Service ที่มีชื่อว่า Amazon FSx for Windows File Server แทน)

EFS Architecture



รูปด้านบนแสดงถึง One Zone storage classesEFS Architecture
รูปด้านล่างแสดงถึง Standard storage classesEFS Architecture

NFS Client หมายถึง Compute instance เช่น EC2, EKS, ECS ที่อยู่ด้านใน VPC ที่ทำการ Mount EFS
โดยจะเชื่อมต่อ EFS ผ่าน Mount Target ครับ

Mount Target ที่ถูกสร้างในแต่ละ AZ คือ Endpoint ของ NFSv4 ที่ NFS Client ต้องการเพื่อ Mount EFS และจัดเตรียม IP Address ครับ
ไม่ได้เขียนไว้ในแผนภาพด้านบน แต่เมื่อเรานำ User ID, Group ID มาใช้ จะทำให้สามารถสร้าง Access Point ที่จัดการการเชื่อมต่อของทั้ง Application ได้อย่างง่ายๆ
และก็สามารถใช้ Access Point กับ IAM Policy เพื่อป้องกันการเชื่อมต่อของข้อมูลบางชนิดที่เราต้องการได้

One Zone storage classes ที่เป็น Single-AZ EFS สามารถสร้าง 1 Mount target ใน AZ เดียวกันกับ EFS
ในกรณีที่เป็น NFS Client ที่เป็น AZ อื่น เช่น มี EC2 ที่อยู่ [AZ 2] แต่อยากเชื่อมต่อกับ EFS ที่อยู่ [AZ 3] จะจำเป็นต้องจ่ายค่า Data Access ครับ
Standard storage classes ที่เป็น Multi-AZ EFS จะสร้าง Mount target ในแต่ละ AZ และ NFS Client จะเป็นฝ่ายทำการ Access แทน

Use case

  • Big data และ Analysis
    • ปริมาณงานสูงและความสมบูรณ์ของข้อมูล, ให้ความสามารถในการปรับขนาดและประสิทธิภาพที่จำเป็นสำหรับแอปพลิเคชันข้อมูลขนาดใหญ่ เช่น Low Latency
  • Content management และ deployment
    • สามารถใช้ในการจัดเก็บและประมวลผลข้อมูลจากแอปพลิเคชันต่างๆ เช่น เว็บไซต์และไฟล์เก็บถาวร(Archive)
  • Home directory
    • สิ่งนี้จะมีประโยชน์เมื่อต้องการเข้าถึง(Access)หรือแบ่งปันข้อมูล(Share)กับชุดข้อมูลทั่วไป

จุดเด่นของ EFS

คุณสมบัติของEFS มีดังต่อไปนี้

  • Serverless
  • Automatic expansion of capacity และ performance
  • Full AWS Compute integration(EC2 Instance, Container, Serverless)
  • Storage Class 4 รูปแบบ
  • High availability

งั้นเราจะมาอธิบายจุดเด่นของ EFS ไปทีละข้อๆ นะครับ

Scalability

capacity กับ performance จะถูกปรับขนาดโดยอัตโนมัติตามที่เราเพิ่มไฟล์หรือลบไฟล์ที่มีอยู่ใน EFS ไป ทำให้เราไม่จำเป็นต้องกังวลว่าไฟล์จะเต็มเพราะเจ้าตัว EFS สามารถเพิ่มขนาดได้มากถึงระดับ Peta Byte และนอกจากนั้น performance เองก็จะถูกปรับไปตามขนาดของ File System(จำนวนไฟล์ที่ถูกบันทึก) อีกด้วย
EFS มี Throughput mode ที่สามารถกำหนดปริมาณงานตามจำนวนข้อมูลที่ถูกบันทึกใน EFS
และมี Credit system ที่สามารถเพิ่มปริมาณงานขึ้นได้ในระยะเวลานึง โดยรายละเอียดจะอยู่ในหัวข้อ Performance ด้านล่าง

Performance

capacity จะถูกปรับขนาดโดยอัตโนมัติทันทีแต่ performance ของ EFS นั้นจำเป็นต้องไปตั้งค่าก่อนครับ ซึ่งในส่วนนี้ก็ถือว่าเป็นตัวเลือกที่ดีไว้สำหรับรองรับ Workflow ที่หลากหลายครับ

Performance ของ EFS ถูกออกแบบมาเพื่อส่งมอบปริมาณงาน, IOPS และ Latency ที่ต่ำที่จำเป็นสำหรับปริมาณงานที่หลากหลาย โดยจะมีให้เลือกระหว่าง Performance mode 2 ชนิด กับ Throughput mode 2 ชนิด

  • Performance mode: General Purpose, Max I/O
  • Throughput mode: Burst throughput, Baseline throughput

งั้นเราจะเริ่มดูกันที่ Performance mode นะครับ การที่จะดูว่าเราควรจะเลือก Performance mode แบบไหนนั้น เราต้องคิดถึงเรื่อง Latency ก่อนนะครับ
กรณีที่ต้องการ Latency ที่ต่ำ ให้เลือก General Purpose ครับ
กรณีที่ไม่สนใจ Latency ให้เลือก Max I/O ครับ

Latency ขีดจำกัด อื่นๆ
General Purpose Latency ต่ำ 35,000 Read/7000 Write Maximum IOPS เป็นการตั้งค่า Default
Max I/O Latency สูงกว่า General Purpose IOPS ไม่มีขีดจำกัด One zone EFS ไม่สามารถใช้ได้
  • General Purpose Performance mode เป็น Mode ที่ถูกตั้งค่าเป็น Default ตอนสร้าง EFS มีข้อดีที่มี Latency ที่ต่ำแต่ว่ามี Maximum IOPS ที่ 35,000 Read/7000 Write ถ้าเป็นการใช้งานทั่วไปใช้ตัวนี้ไม่มีปัญหาอะไรครับ
  • Max I/O Performance mode มี Latency สูงกว่า General Purpose แต่ IOPS ไม่มีขีดจำกัด เหมาะสำหรับ Workload ที่จำเป็นต้องใช้ IOPS ครับ
    ถ้าอยากใช้ Max I/O ต้องใช้ Multi-AZ EFS เพราะ One zone EFS ไม่สามารถใช้ได้ครับ

ต่อมาเป็น Burst throughput กับ Baseline throughput ครับ
Burst throughput เป็นค่า Default ที่ถูกตั้งไว้ตอนสร้าง EFS ครับ การจัดการปริมาณงานของ Burst throughput จะขึ้นอยู่กับปริมาณไฟล์ที่ถูกเก็บไว้ แต่สามารถใช้ "Burst credit" เพื่อเพิ่มปริมาณการจัดการงานในระยะเวลาหนึ่งได้ ส่วน Baseline throughput จะเหมาะกับ Workload ที่จำเป็นต้องใช้การจัดการปริมาณงานที่สูงระยะต่อเนื่อง

  • Burst throughput Throughput mode เป็นค่า Default เหมือนกับ General Purpose Performance mode ใช้สำหรับ Workload ทั่วไป
  • Baseline throughput Throughput mode ต้องการ Throughput ในระยะที่ต่องเนื่อง มีข้อมูลน้อยแต่ IOPS ที่สูง ซึ่งจะมีค่าใช้จ่ายเพิ่มเติม

หลังจากสร้าง EFS แล้ว จะไม่สามารถเปลี่ยน Performance mode ได้ แต่จะสามารถเปลี่ยน Throughput mode ได้ กรุณาระวัง

รายละเอียดเพิ่มเติมสามารถดูได้ที่ Amazon EFS performance - Amazon Elastic File System

นอกจากตัวเลือกเหล่านี้แล้ว ยังปรับปรุง Performance mode ของ EFS ได้อีกด้วยวิธีด้านล่างได้อีกด้วย

  • ใช้ NFSv4.1
  • Distributed storage และ use of data ที่ multi-thread environment
  • Data Copy ใช้ Multi-thread + large I/O size
    • copy command ให้ใช้ rsync < cp < fpsync ตามลำดับแล้วจะเพิ่ม Performance
  • Instance Type ก็สำคัญ
    • เลือก Resource Instance ที่จำเป็นต่อ แอปพลิเคชั่น

โดยวิธีการใช้ fpsync command เพื่อเพิ่ม Performance สามารถดูรายละเอียดเพิ่มได้ที่ลิ้งค์ด้านล่างครับ

High availability และ durability

EFS ให้ High availability(ความพร้อมใช้งานสูง) และ durability(ความทนทาน) โดยจัดเก็บข้อมูลเดียวกันไว้หลายๆที่ในแต่ละ AZ ใน AWS Region ตอนที่เราสร้าง EFS จะสามารถเลือกการตั้งค่า Storage class option ได้ว่าจะเลือกเป็น Multi-AZ(Regional) หรือจะเป็น Single AZ(One zone)

Standard storage class ของ Regional จะเก็บข้อมูลกับ Parameter ไว้ในทั้ง 3 AZ ใน AWS Region ที่ให้มี High availability ที่ 99.99% และ durability ที่ 99.99999999999(11 9s)% ครับ

Zone storage class ของ One zone จะเก็บข้อมูลกับ Parameter ไว้ใน AZ เดียว มี durability ที่ 99.99999999999(11 9s)% แต่มี High availability ที่ 99.90% (น้อยกว่า 0.09%) ถ้าเกิดมีปัญหาขัดข้องหรือภัยพิบัติที่ AZ ที่เราเลือก อาจจะทำให้สูญเสียข้อมูลที่จัดเก็บไว้ได้

โดยรานละเอียดเกี่ยวกับ storage class สามารถดูได้ในหัวข้อด้านล่าง

Storage class, life cycle

EFS จะมี storage class 4 ประเภทให้เราเลือกโดยจะยึดเกณฑ์ของ AZ ที่ใช้ และ ความถี่ในการ Access เป็นตัวเลือก ตามหัวข้อด้านบนเราทราบว่า AZ มี Multi-AZ(Regional) กับ Single AZ(One zone) กันไปแล้ว ยังสามารถแยกออกได้อีกตาม ความถี่ในการ Access ว่าจะเป็น IA(Infrequent Access) หรือไม่เป็น ตอนที่สร้าง storage class ตอนที่สร้าง EFS สามารถตั้งค่าStorage class, High availability, durability และ life cycle ได้

Multi-AZ Single AZ
มีคน Access บ่อย(ความถี่สูง) Standard One zone
ไม่ค่อยมีคน Access (ความถี่ต่ำ) Standard-IA One zone-IA

High availability, durability เราอธิบายกันไปแล้วในด้านบน เหลือ life cycle ที่ทุกคนอยากจะยังสงสัยว่ามันคืออะไร
life cycle คือตัวเลือกในการย้ายไปยัง Storage class -IA โดยอัตโนมัติสำหรับไฟล์ที่ไม่มีการเข้าถึงในช่วงเวลาที่กำหนด
Transition into IA คือการกำหนดระยะเวลาที่จะถูกย้าย (อย่างเช่นในภาพ ถ้าไม่มีการเข้าถึงในเวลา 30 วัน จะถูกย้าย) โดยจะย้ายแบบ Standard → Standard-IA และ One zone → One zone-IA
Transition out of IA คือการย้ายกลับจาก IA ไปเป็นไม่มี IA โดยจะมีให้เลือก "On first access" และ "None"
"On first access"หมายถึง เมื่อมีการเข้าถึงครั้งแรกให้เปลี่ยนกลับ ส่วน "None" คือจะไม่เปลี่ยนกลับแม้ว่าจะมีการเข้าถึง

การใช้ Storage class -IA จะช่วยลดค่าใช้จ่ายได้ แต่ว่าค่า read/wirte ของ Latency จะสูงกว่าแบบปกติ ทำให้หากเราจำเป็นที่ต้องการ Low Latency ให้ Copy File ไปเก็บไว้ที่ file system อื่น หรือ จะตั้งค่าให้ไม่เปลี่ยนเป็น -IA ก็ได้

หลังจากสร้าง EFS แล้วสามารถปรับค่า life cycle ได้ แต่ Regional กับ One zone Option ของ High availability และ durability ไม่สามารถเปลี่ยนได้ กรุณาระวังในจุดนี้

Security

Security ของ EFS มีดังนี้ครับ

  • Client access management
  • Access control for directories และ files
  • API access control
  • Data encryption(การเข้ารหัส)

เราสามารถจัดการ Network ได้ที่ Security Group กับ NACL ครับ และยังสามารถบังคับโดยใช้ IAM Policy, Encrypted โดย identity provider หรืออนุญาตให้แค่ read-only Access เท่านั้นก็ทำได้ครับ นอกจากนี้ยังสามารถควบคุม สิทธิ์เข้าถึง Directories หรือ files ผ่านการสร้าง Access Point ก็ทำได้ครับ

EFS สามารถที่จะ Encrypted Transfer data กับ data ที่ถูกบันทึกอยู่ได้ด้วย

การ Encrypted data ที่ถูกบันทึกอยู่ ตอนที่สร้าง EFS เมื่อเราเปิดการใช้งาน "Enable encryption of data at rest" ก็จะสามารถ Encrypted ได้เลย เราสามารถที่จะใช้ AWS KMS เพื่ออ่าน Content หรือ File system metadata ที่ถูก Encrypted ได้ โดยตัวเลือกนี้ไม่สามารถที่จะเปลี่ยนได้หลังจากสร้าง EFS แล้ว กรณีที่อยากจะ Encrypted EFS ที่ยังไม่ถูก Encrypted ทำได้โดย สร้าง EFS ใหม่ที่เปิดการใช้งาน Encrypted แล้ว ใช้ AWS Data Sync ส่งข้อมูล หรือใช้ AWS Backup คืนค่า(Restore) ข้อมูลขึ้นไปที่ EFS ใหม่ที่เปิดการใช้งาน Encrypted แล้ว ซึ่งค่อนข้างยุ่งยาก ทำให้การสร้าง EFS จำเป็นต้องระวังในส่วนนี้

การ Encrypted Transfer data ใช้ TLS และต้องใช้ Amazon EFS Mount helper ช่วยด้วย
ตอนที่ Mount EFS ให้เปิดการใช้งาน TLS Option ของ Mount helper ทำให้สามารถ Encrypted Transfer data ได้

การ Encrypted นั้นส่งผลกระทบต่อความสามารถของ EFS แต่ไม่เป็นไรหากไม่กระทบต่อ งาน Read/Wirte หรือ การประมวลผลข้อมูลมากเกินไป

EFS กับ EBS

นอกจาก EFS แล้วยังมี Service ที่ชื่อว่า EBS ครับ ซึ่งหลายคนอาจจะแยกกันออกได้ยาก เลยรวบรวมข้อแตกต่างมาให้แล้วครับ
* หมายถึง เป็น EBS type "io2 Block Express" และใช้แค่ R5b Instance

EFS EBS
Storage Type File Storage Block Storage
Availability ใช้ได้ทั้ง Mutli-AZ, One zone AZ One zone AZ
Access AWS service หรือ On-premise สามารถเข้าถึงพร้อมกันได้มากถึงหลักพัน One zone AZ มากสุด 16 Instances
Volume เพิ่มขนาดได้มากถึงระดับ Peta Byte โดยอัตโนมัติ เพิ่มขนาดได้มากถึง 64TiB ไม่อัตโนมัติ
Throughput 1วินาที ได้มากกว่า 10GB 1วินาที ได้มากสุด 4GB*
IOPS มากกว่า 500,000 IOPS มากสุด 256,000*
Latency ต่ำ, คงที่ ต่ำสุด(ไม่ถึงมิลลิวินาที*), คงที่

โดยพื้นฐานแล้ว EFS กับ EBS แต่ต่างกันที่เป็น File Storage และ Block Storage โดยที่ EFS เป็น Multi-AZ storage ที่มี High availability และมีจุดเด็นที่นอกจากที่ AWS Service จะเชื่อมต่อได้แล้ว On-premise ก็สามารถใช้ DX หรือ AWS VPN ในการเชื่อมต่อเข้าไปได้
แล้ว EFS สามารถขยายได้ถึง Peta Byte ซึ่งก็สามารถพูดได้ว่าสามารถปรับขนาดได้มากกว่า EBS

ในกรณีของ Throughput กับ IOPS EFS มีการออกแบบแบบกระจายและประสิทธิภาพที่สูงกว่า EBS แต่ก็สามารถเลือก Volume Type ตาม Workload ของทั้งสองได้
ในกรณีของ Latency EBS ใช้เวลาไม่ถึงมิลลิวินาที ถ้าต้องการ Parallel access ขนาดใหญ่ ให้เลือก EFS ถ้าจำเป็นต้อง Boot volume หรือ transaction processing ให้เลือก EBS ครับ

โดยเฉพาะ ในกรณีของ EFS มีบทบาทสำคัญในฐานะพื้นที่จัดเก็บที่สามารถจัดเก็บสถานะของแอปพลิเคชันในสภาพแวดล้อมแบบไร้เซิร์ฟเวอร์ ขนาดที่ Docker แนะนำให้ใช้ Amazon ECS และ EFS เลยครับ (Deploy Stateful Docker Containers with Amazon ECS and Amazon EFS - Docker)

ส่วนเรื่องค่าใช้จ่าย
EFS จะต้องจ่ายค่าใช้จ่ายตามขนาดไฟล์ที่ใส่อยู่ EFS
EBS จะต้องจ่ายค่าใช้จ่ายตามขนาด Disk ที่กำหนดขึ้นสร้าง EBS ซึ่งไม่เกี่ยวกับขนาดไฟล์ที่มีอยู่ใน EBS

ซึ่งนั่นหมายความว่า เราจะใช้ EFS แค่จำนวนไฟล์ที่จำเป็นและเวาลที่จำเป็นเท่านั้น เพราะจะเสียค่าใช้จ่ายตามไฟล์ที่มี และไฟล์ไม่มีขีดจำกัด ทำให้การลบไฟล์ที่ไม่จำเป็นออกไปจะช่วยลดค่าใช้จ่ายลงได้

Feature อื่นๆ

Backup

เราสามารถใช้ AWS Backup service เพื่อ Backup EFS ได้ง่ายๆ ครับ เมื่อสร้าง EFS ในหน้าจอ Console ให้เลือกเปิดการใช้งาน "Enable automatic backups" แค่นี้ก็เสร็จการ Backup แล้วครับ รายละเอียดเพิ่มเติมสามารถดูได้จากลิ้งค์ด้านล่างนี้ครับ

Data Transfer

ในการ Data Transfer ของ EFS จำเป็นต้องเชื่อมกับ AWS DataSync
AWS DataSync ไม่ใช่แค่ Data Transfer ธรรมดาๆ แต่ใช้สำหรับ Backup ได้ด้วย เมื่อก่อนตอนที่ยังไม่มี AWS Backup จะใช้ AWS DataSync ส่ง EFS-to-EFS เพื่อ Backup โดยสามารถอ่านรายละอียดได้ที่ลิ้งค์ด้านล่าง

EFS replication

นี่เป็น Feature ใหม่ที่พึ่งเพิ่มเข้ามา เมื่อก่อน การที่จะสร้าง replication ของ EFS จำเป็นต้องสร้าง EFS แล้วใช้ AWS DataSync ส่งข้อมูลไป ซึ่งมันยุ่งยากมาก แต่ได้มีการเพิ่ม EFS replication ซึ่งจะทำให้สามารถสร้าง replication ขึ้นใหม่ได้อย่างง่ายๆ เมื่อก่อน EFS มีขั้นตอนที่ดูยุ่งยากอยู่เยอะ แต่ก็มี Feature ที่ช่วยแก้ไขเรื่องพวกนี้อัพเดทมาเรื่อยๆ มาคอยดูกันนะครับว่าจะมีอะไรต่อไปเพิ่มเข้ามา

สรุป

ก็จบกันไปแล้วนะครับกับ EFS โดยส่วนตัวคิดว่าเนื้อหาในบทความนี้ค่อนข้างครบเลยครับ ถ้าท่านผู้อ่านที่อ่านมาจนถึงตอนนี้แล้วลองไปสร้าง EFS ใน Managedment Console ด้วยตัวเองดูจะพบว่า การตั้งค่าส่วนใหญ่เกือบทั้งหมดบทความนี้ได้เขียนอธิบายไว้ให้หมดแล้ว แล้วเจอกันใหม่ในบทความต่อไปครับ/ต้า

บทความต้นฉบับ

AWS再入門ブログリレー2022 Amazon EFS編 | DevelopersIO

บทความอ้างอิง