การใช้ Mountpoint for Amazon S3 เพื่อเข้าถึง S3 จาก EC2 เสมือนเป็นไดเร็กทอรีในเครื่อง
บทความได้รับการแปลและเรียบเรียงจากบทความภาษาญี่ปุ่นชื่อ Mountpoint for Amazon S3でEC2からS3をローカルディレクトリとして操作してみた โดยเจ้าของบทความนี้คือคุณ katsumata ซึ่งเป็นชาวญี่ปุ่น และในบทความนี้จะมีการปรับสำนวนการเขียน รวมถึงมีการเรียบเรียงเนื้อหาใหม่ให้เข้าใจง่ายและมีความเหมาะสมมากยิ่งขึ้นครับ
เกริ่นนำ
สวัสดีครับ ในบทความนี้ผมศึกษาการใช้ Mountpoint for Amazon S3 เพื่อ mount S3 Bucket บน EC2 และทดสอบการใช้งาน จึงอยากแชร์ขั้นตอนกับผู้อ่านทุกท่านครับ
Mountpoint for Amazon S3 คืออะไร?
Mountpoint for Amazon S3 เป็นเครื่องมือ open source ที่ช่วยให้สามารถ mount S3 bucket เป็น Linux file system บน EC2 หรือ ECS ได้ ทำให้เราสามารถใช้งาน S3 bucket เหมือนกับไดเร็กทอรีในเครื่อง local ได้ครับ
สามารถดูรายละเอียดเพิ่มเติมได้ที่ Github ด้านล่างนี้ครับ
ทดลองทำ
ข้อกำหนดเบื้องต้น
-
S3 Bucket: สร้าง S3 bucket ไว้
Note: ผู้อ่านท่านใดที่ไม่เคยสร้าง S3 Bucket มาก่อน สามารถศึกษาได้ในลิงค์ข้างล่าง แล้วไปที่หัวข้อ
- สร้าง S3 Bucket ได้เลยครับ
-
IAM Role: สร้าง IAM role ที่เหมาะสมแล้ว (AmazonS3FullAccess) โดยสามารถทำได้ดังนี้ครับ: -
a. เข้าไปใน AWS IAM และคลิกที่ Roles
b. ใน Select trusted Entity เลือก:
- Trusted Entity Type: AWS Service
- Service or Use Case: Ec2 ---> และเลือก Ec2 ในช่อง Use Case ถัดมาc. Permission Policies เลือก AmazonS3FullAccess
d. Name ตั้งชื่อ Role ครับ: ในตัวอย่างผมตั้งชื่อ kanj-mountpoint-ec2
กด Create Role เป็นอันเสร็จสมบูรณ์ครับ
การสร้าง EC2
สร้าง EC2 สำหรับ mount S3 ตามขั้นตอนดังนี้
- เลือก AMI เป็น Amazon Linux 2023 และตั้งค่า Security Group ที่อนุญาต SSH Inbound (My IP)
Note: ตอนสร้าง EC2 ควรเตรียม Key Pair ไว้ก่อน
- ใน Advanced Details เพิ่ม IAM Role ที่เราสร้างไปก่อนหน้า (ของผมสร้างไว้ชื่อ kanj-mountpoint-ec2)
Note: หากมีข้อสงสารเกี่ยวกับการสร้าง EC2 สามารถอ่านการสร้าง EC2 โดยละเอียดได้ตามลิงค์นี้ครับ
ติดตั้ง Mountpoint for Amazon S3
- ในกรณี Linux2023 ให้ใช้ Mountpoint for Amazon S3 โดยใช้คอมมานด์ดังนี้ (สามารถเชื่อมต่อได้ผ่าน Session Manager หรือ Putty เป็นต้น)
$ wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
$ sudo yum install -y ./mount-s3.rpm
- mount s3 bucket ที่เราได้เตรียมไปก่อนหน้า
$ mkdir /mnt/s3
$ mount-s3 [ชื่อ bucket] /mnt/s3
3.ถ้า mount ถูกต้อง จะมีข้อความขึ้นเหมือนข้างล่าง
bucket [ชื่อ bucket] is mounted at /mnt/s3
ทดสอบการใช้งาน S3 ผ่าน EC2
- ทดสอบการจัดการไฟล์และโฟลเดอร์ใน S3 bucket ที่ mount แล้ว (ถ้าไม่ mount จะไม่สามารถจัดการไฟล์ด้วย command ใน ec2 ได้)
# สร้างไดเร็กทอรี
mkdir /mnt/s3/testdir
# ลองสร้างไฟล์ indes.html ใน s3
echo "<html><body><h1>Hello from Mountpoint for S3</h1></body></html>" > /mnt/s3/index.html
# สร้างไฟล์ test.text ใน s3
echo "hello test S3" > /mnt/s3/test.txt
# คัดลอกไฟล์ index.html ไปโฟลเดอร์ testdir
cp /mnt/s3/index.html /mnt/s3/testdir/
# ย้ายไฟล์ test.txt ไปโฟลเดอร์ testdir
mv /mnt/s3/test.txt /mnt/s3/testdir/
# ตรวจสอบเนื้อหาในไดเร็กทอรี
ls -la /mnt/s3/testdir/
# ทดสอบการสร้างไฟล์
echo "test" > /mnt/s3/test.txt
# ทดสอบการอ่านไฟล์
cat /mnt/s3/test.txt
- ตรวจสอบการเปลี่ยนแปลงใน AWS Management Console
ขั้นตอนการตรวจสอบ:
a. เข้าไปที่ AWS Management Console
b. ไปที่ S3 Service
c. คลิกเข้าไปใน S3 bucket ที่ทำการ mount
d. ตรวจสอบว่ามีการเปลี่ยนแปลงตามที่ทำผ่าน EC2:
- โฟลเดอร์ testdir/ ถูกสร้างขึ้น
- ไฟล์ index.html และ test.txt อยู่ในโฟลเดอร์ testdir/
- ไฟล์ test.txt ใหม่ถูกสร้างใน root ของ bucket
สุดท้ายนี้
เมื่อเราลองใช้ Mountpoint for S3 แล้ว จะเห็นได้ว่าเราสามารถจัดการ bucket ของ S3 ผ่าน EC2 instance ได้เหมือนว่า S3 เป็นไฟล์ local ของเครื่อง EC2 โดยใช้เพียง Standard Linux Command เท่านั้น (ไม่จำเป็นต้องใช้ AWS Cli) ซึ่งฟังก์ชันนี้จะช่วยให้การทำงานของเราง่ายขึ้นมากครับ ขอบคุณผู้อ่านทุกท่านมากครับ หวังว่าบทความจะเป็นประโยชน์กับทุกท่านครับ
แปลและเรียบเรียงโดย กาญจน์ จากบริษัท ClassMethod Thailand ครับ
ข้อมูลอ้างอิง
(Mountpoint for Amazon S3 の使用 - Amazon Simple Storage Service)
[https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/mountpoint.html]