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

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

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

สวัสดีครับทุกคน โมริตะ ครับ

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

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

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

อธิบายง่ายๆ CloudFront คืออะไร

ถ้าจะให้อธิบาย CloudFront ในประโยคเดียว จะได้คำว่า "CDN Service ที่สามารถทำงานร่วมกับ หลายๆ AWS Service ได้ง่ายๆ"

โดยในบทความนี้จะเล่าเกี่ยวกับ ฟังก์ชันของ CloudFront ดังต่อไปนี้

  • Cache Content
  • Edge cache ที่อยู่ใน Edge location และ Region
  • Security

งั้นเราจะมาอธิบายกันครับ

Cache Content

Cache Content หมายถึง การวาง Cache server ไว้ข้างหน้า Origin server เพื่อทำการส่งมอบ Content ที่มีขนาดใหญ่ทั้งมักจะเป็นข้อมูลบนอินเตอร์เน็ตพวกวิดีโอหรือรูปภาพแทน Origin server

ด้วยการทำเช่นนี้จะช่วยลดภาระของ Origin server ได้ครับ

ที่มารูปภาพ: 28/10/2020 [AWS Black Belt Online Seminar] Amazon CloudFront deep dive

Edge location และ Regional Edge Cache

ใน CloudFront จะมี Global edge location มากกว่า 310 แห่งอยู่ทั่วโลก ด้วยสิ่งนี้จะทำให้การส่งข้อมูลกับ Client ถึงเร็วขึ้น เพราะการส่งจะเกิดขึ้นที่ edge location ที่ใกล้ที่สุดกับ Client


ที่มารูปภาพ: 30/07/2019 [AWS Black Belt Online Seminar] Amazon CloudFront

นอกจากนี้ ยังมี Feature Regional Edge Cache(REC) ที่ติดมาให้ตั้งแต่ Default อีกด้วย

Regional Edge Cache หมายถึง Cache ที่อยู่ระหว่าง Origin server กับ Edge location ซึ่งมีความจุ Cache มากกว่า Edge location
ด้วยเหตุนี้จะทำให้สามารถจัดเก็บ Cache ได้นานยิ่งขึ้น เมื่อ Request content ที่ไม่ค่อยถูกเรียกใช้ ก็ไม่ต้องไปดึงข้อมูลมาจาก Origin server สามารถดึงจาก Regional Edge Cache ได้นั่นเอง


ที่มารูปภาพ: 28/10/2020 [AWS Black Belt Online Seminar] Amazon CloudFront deep dive

Security

CloudFront สามารถใช้ทำงานร่วมกับ AWS Service อื่น เพื่อปรับปรุง Security ของ Web Application ได้

ที่มารูปภาพ: 30/07/2019 [AWS Black Belt Online Seminar] Amazon CloudFront

รายละเอียดเพิ่มเติมเกี่ยวกับ CloudFront

เรารู้กันคร่าวๆเกี่ยวกับ CloudFront กันไปแล้ว มาเจาะรายละเอียดแต่ละอย่างกันครับ

โครงสร้างของ CloudFront

เมื่อเกิดการ Request จาก Client จะเป็นการไปดึงข้อมูลมาจาก Edge Location ตามแผนภาพด้านล่าง


โดยมีขั้นตอนตามด้านล่างครับ

  1. ไปถาม DNS Server ว่า ชื่อ Domain ของ CloudFront คืออะไร
  2. ไปถามชื่อ Domain ของ CloudFront คืออะไร
  3. CloudFront ตอบกลับ Client ด้วย IP Address ของ Edge server ที่เหมาะสมที่สุดกับข้อมูล Location information ของ Client(อยู่ใกล้สุด)
  4. ใช้ IP Address ที่ได้จาก 3. ถามถึง Content
  5. ในกรณีที่ ไม่มี Cache ใน Edge Location จะไปถาม Regional Edge Cache 5'. กรณีทีไม่มี Cache ใน Regional Edge Cache จะไปรับ Content จาก Origin server
  6. ส่งมอบ Content ให้ Client

Distribution

ใน CloudFront เราจำเป็นต้องตั้งค่าก่อนถึงจะสามารถ ส่งมอบ Content ได้ โดยการตั้งค่านี้ มีชื่อว่า Distribution

ที่ Distribution สามารถกำหนด ประเภทของ Content ที่จะจัดส่ง, สถานที่ที่จะจัดส่ง Content, วิธีการจัดการหรือติดตาม Content ที่จะจัดส่งได้ ด้วยการสร้าง Distribution จะทำให้เราสร้าง Domain ได้ด้วย

ที่มารูปภาพ: 30/07/2019 [AWS Black Belt Online Seminar] Amazon CloudFront

Origin

ในตอนที่สร้าง Distribution นั้น CloudFront จะให้เรากำหนดสถานที่ที่จะให้ส่ง Request เราจะเรียกสถานที่นี้ว่า Origin แล้วสามารถกำหนด 4 อย่างใหญ่ๆ ต่อไปนี้ได้

  • ELB
  • Amazon S3
  • MediaStore Containers
  • MediaPackage channels
  • HTTP server(EC2、On-permise WEB server)

Behavior

Behavior หรือควรจะเรียกว่า กฎของ Cache แบบที่เห็นภาพได้ โดยสามารถกำหนดคร่าวๆ ได้ตามด้านล่าง

  • Viewer(ของฝั่ง Client)Protocol Policy
  • ข้อจำกัดของ HTTP Method
  • ข้อจำกัดการเชื่อมต่อของ Viewer(ข้อจำกัดของ URL แบบมีลายเซ็นต์)
  • การตั้งค่าของ Realtime logs
  • Cache-Control (Cache Policy / Origin Request Policy)

เกี่ยวกับ Connection ที่ encrypted ข้างใน CloudFront

Connection ของ CloudFront มี 2 ชนิดคือ "Viewer กับ Edge server" และ "Edge server กับ Origin server"
Point สำคัญคือ การ S3 Static website hosting จำเป็นต้องผ่าน HTTP เท่านั้น

Cost

ตั้งแต่วันที่ 1/12/2021 ที่ผ่านมา Cloudfront ได้มีการเปิดใช้งานฟรีในบางส่วนให้ลองไปใช้กันได้ครับ

ภายใน 1 เดือน สำหรับ Free Tier จะมีดังนี้ครับ

  • การส่งต่อข้อมูล 1TB (Out)
  • 10 ล้าน HTTP หรือ HTTPS Request
  • การเรียกใช้ CloudFront Function 2 ล้านครั้ง

ค่าใช้จ่ายทั่วไปจะเป็นดังนี้ครับ

  • การถ่ายโอนข้อมูลภายใน Region ออกสู่อินเทอร์เน็ต(คิดเป็นต่อ GB)
  • การถ่ายโอนข้อมูลภายใน Origin ออกสู่ Region(คิดเป็นต่อ GB)
  • ค่าธรรมเนียม Request HTTP Method(ต่อ 10,000 ครั้ง)

โดยค่าธรรมเนียมด้านบนนี้เป็นของ วันที่ 7/8/2022 ครับ ท่านผู้อ่านสามารถตรวจสอบค่าใช้จ่ายได้อีกทีในลิ้งค์ด้านล่าง
Amazon CloudFront CDN - แผนและราคา - ทดลองใช้ฟรี

ลองใช้ดู

ในหัวข้อนี้เราจะมาลองใช้ CloudFront โดยจะลงทะเบียน Origin เป็น EC2 กับ S3 Bucket ครับ

ลงทะเบียน EC2 ในฐานะ Custom Origin

ก่อนอื่นให้เราสร้าง EC2 Instance ที่อยู่ใน Publice subnet ขึ้นมาสักตัวนะครับ แล้วไปจด Public IPv4 DNS ไว้สักที่นะครับ

สำหรับวิธีสร้าง EC2 สามารถดูได้ที่บทความด้านล่างครับ

ต่อไปเราจะไปที่ CloudFront เพื่อสร้าง Distribution

ให้เราใส่ Public IPv4 DNS ที่จดไว้ใส่ใน Origin Domain ในส่วนของ Protocol ให้เลือก 'HTTP only'

ส่วนการตั้งค่าอย่างอื่น ไม่ต้องไปตั้งอะไร ให้เลือกเป็น Default

หลังจากสร้างแล้ว ให้รอจน Deploy เสร็จ ลองใส่หน้าต่าง index.html สักอย่างลงไปเพื่อสร้างหน้าเว็บไว้เช็คไว้เข้าได้ แล้วเปิด Distribution domain name ถ้าหน้าต่าง HTTP เข้าได้ ก็แสดงว่า CloudFront ได้เปิดการใช้งานแล้ว (ในภาพจะลง Apache ไว้)


หรือถ้าอยากลองทำแบบละเอียดดู สามารถดูได้จากบทความด้านล่างนี้ครับ

ลงทะเบียน S3 Bucket ใน Origin

ก่อนอื่นให้เราสร้าง S3 Bucket ขึ้นมาสักตัว แล้วสร้าง Folder(ซึ่งในที่นี้ชื่อ images) แล้วทำการอัพไฟล์รูปภาพลงไป

ในตอนที่เชื่อมต่อกับ S3 Bucket เราจะใช้ OAI เชื่อม ทำให้เราเปิดการใช้งาน Block all public access ไว้ก็ไม่ีปัญหาอะไร

ต่อไป ให้เรากลับไปที่ CloudFront สร้าง Distribution ขึ้นมาใหม่อีกด้วยนึง คราวนี้ให้เลือก Origin domain เป็น s3 ที่เราสร้างขึ้น แล้วให้เปิดการใช้งาน OAI ตามภาพด้านล่าง

เมื่อตั้งค่าเสร็จแล้ว ให้กดสร้างตามเดิม แล้วรอจนเสร็จ
หลังจากนั้นเรากดเข้าไปที่ Distribution ที่สร้าง แล้วเลือก Behaviors กด Create behavior แล้วกรอกตำแหน่งรูปภาพที่เราลงไว้ ซึ่งในกรณีของผมคือ images/* แล้วให้เลือก Origin or origin group เป็น S3 Bucket ที่เราสร้างขึ้น แล้วกดสร้างได้เลย

เมื่อสร้างเสร็จให้นำ (Distribution domain name)/images/(ชื่อไฟล์ของคุณ) ไปเปิดดู จะพบภาพที่คุณอัพลงไปนั่นเอง

สรุป

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

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

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

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