วิธีการสร้างเว็บไซต์แบบ Static โดยใช้ S3 + CloudFront (ใช้งาน OAC)

เราจะมาแนะนำวิธีใช้งาน Origin Access Control (OAC) ในการควบคุมการ Access จาก CloudFront ไปยัง Amazon S3 ที่เป็น Object Storage Service โดยอธิบายเนื้อหาไปพร้อมกับการใช้งานจริงครับ

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

สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ

เป้าหมาย

ครั้งนี้จะมาแนะนำเกี่ยวกับวิธีการสร้างเว็บไซต์แบบ Static โดยใช้ S3 + CloudFront (ใช้งาน OAC)

Service ที่ใช้ในบทความนี้คือ:

  • Amazon S3
    • Buckets
  • Amazon CloudFront
    • Distributions
    • Origin access

การสร้าง Buckets ใน Amazon S3

Login เข้ามาที่ AWS Management Console แล้วค้นหา ?︎ S3 คลิก S3

เลือก Buckets

คลิก Create bucket

การตั้งค่า General configuration:
» Bucket name: tinnakorn-test-s3 (ชื่ออะไรก็ได้)
» AWS Region: Asia Pacific (Singapore) ap-southeast-1 (ตรวจสอบและเลือกใช้รีเจี้ยนที่ใกล้กลับประเทศที่เราอาศัยอยู่ให้มากที่สุด)

เลื่อนลงมาด้านล่างสุด คลิกปุ่ม Create bucket

เตรียมไฟล์และอัปโหลดลงใน Bucket

เตรียมไฟล์

ก่อนอื่นให้เตรียมไฟล์ที่จะอัปโหลด ครั้งนี้จะใช้ไฟล์ประเภท HTML ที่ชื่อว่า index.html โดยใส่โค้ดตามด้านล่างนี้

<html><body>test</body></html>

อัปโหลดไฟล์ลงใน Bucket

เมื่อเตรียมไฟล์เสร็จแล้ว เข้าไปที่หน้า Bucket ของเรา
เลือกแท็บ Objects แล้วอัปโหลดไฟล์โดยคลิก Upload แล้วเลือก File ที่เราเตรียมไว้
หรือคลิกที่ไฟล์ค้างไว้แล้วลากมาวางใน Object ตามรูปภาพก็ได้

ก็จะเห็นไฟล์ที่เราจะอัปโหลด จากนั้นคลิก Upload ด้านล่างสุด

เมื่ออัปโหลดเสร็จแล้วให้คลิก Close แล้วจะแสดงหน้าจอแบบนี้

การแสดงผลเว็บไซต์ผ่าน Amazon CloudFront

ค้นหา ?︎ CloudFront คลิก CloudFront

คลิก Create distribution

การตั้งค่า Origin ของตัวอย่างนี้คือ
Origin domain: [bucket_name].s3.ap-southeast-1.amazonaws.com (ป้อนชื่อ S3 Bucket ของเราเพื่อค้นหาแล้วเลือก ก็จะแสดงแบบนี้)

Origin access: ◎ Origin access control settings (recommended)
 └ Origin access control: คลิก Create control setting เพื่อสร้าง OAC

เมื่อมี pop-up ของ Create control setting แสดงขึ้นมา แนะนำให้ป้อน Description ที่ต้องการเพื่อให้ค้นหา OAC ของเราได้ง่ายขึ้น เช่น tinnakorn-test-cf และคลิก Create ได้เลย

เมื่อสร้าง OAC เสร็จแล้วจะแสดงหน้าจอแบบนี้

เลื่อนลงมาด้านล่างที่ Cache key and origin requests ในหัวข้อ Default cache behavior แล้วตั้งค่าดังนี้
เลือก ◎ Cache policy and origin request policy (recommended)
 │ Cache policy: CachingOptimized
 │ Origin request policy: CORS-S3Origin

เลื่อนลงมาด้านล่างที่หัวข้อ Settings แล้วตั้งค่าดังนี้
Default root object: ป้อนชื่อไฟล์ที่จะแสดงผล เช่น index.html
Description: ป้อนตามต้องการเพื่อให้รู้ว่า Distribution ไหนเป็นของเรา เช่น tinnakorn-test-cf
แล้วคลิก Create distribution

เมื่อแสดงหน้าจอแบบนี้ ให้คลิก Copy policy เตรียมไว้เพื่อใช้ในการตั้งค่า Bucket policy ในขั้นตอนถัดไป

การตรวจสอบ Bucket policy ใน CloudFront

! หาก Reload หน้าเว็บไซต์โดยที่ยังไม่ได้ทำการ Copy แท็บที่ Copy policy ก็จะหายไป แต่เราสามารถเข้าไปดูในแท็บ Behaviors ของเราได้ดังนี้

เลือกแท็บ Origins แล้วเลือก Origin name ของเรา แล้วคลิก Edit

แล้วเลื่อนลงมาด้านล่างตามคำอธิบายและรูปภาพ
Origin access: ◎ Origin access control settings (recommended)
 └ Bucket policy: คลิก Copy policy

เมื่อคัดลอกเสร็จแล้วให้เลื่อนลงมาด้านล่างสุด แล้วคลิก Cancel แล้วเริ่มทำการตั้งค่า Bucket policy ในขั้นตอนถัดไปได้เลย

ตั้งค่า Bucket policy ใน S3

กลับไปที่หน้าคอนโซลตาม Path ในรูปภาพ แล้วเลือกแท็บ Permissions

คลิก Edit

วาง Policy ที่คัดลอกมาจากขั้นตอนที่แล้ว จากนั้นเลื่อนลงมาด้านล่างสุดและคลิก Save changes

ทดสอบ Distribution domain name

กลับมาที่หน้าคอนโซล Distributions ใน CloudFront แล้วคัดลอก Distribution domain name

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

เพียงเท่านี้เราก็สามารถควบคุมการ Access จาก CloudFront ไปยัง Amazon S3 โดยใช้ Origin Access Control (OAC) ได้แล้วครับ

การลบ S3 Bucket และ CloudFront

การลบ S3 Bucket

เข้ามาที่คอนโซล S3 Bucket ของเรา แล้วทำการลบตามนี้

ก่อนที่เราจะลบ S3 Bucket เราต้องทำให้ Bucket ว่างก่อน โดยค้นหาชื่อและเลือก S3 Bucket ของเรา แล้วคลิก Empty

แล้วป้อน "permanently delete" ลงในช่องตามคำแนะนำ แล้วคลิก Empty

เมื่อ S3 Bucket ของเราไม่มีข้อมูลแล้ว ก็ให้ทำการลบโดยค้นหาชื่อและเลือก S3 Bucket ของเราอีกครั้ง แล้วคลิก Delete

แล้วจะเข้ามาที่หน้าจอ Delete bucket ก็ให้เราป้อนชื่อ S3 Bucket ตามคำแนะนำ เช่น tinnakorn-test-s3 แล้วคลิก Delete bucket เพียงเท่านี้การลบ S3 Bucket ก็เสร็จเรียบร้อย

การลบ CloudFront

เข้ามาที่คอนโซล CloudFront ของเรา แล้วทำการลบตามนี้

การลบ CloudFront นี้คือการลบ Distribution ที่เราสร้างใน CloudFront
ก่อนที่เราจะลบ Distribution ใน CloudFront เราต้องปิดการใช้งาน Distribution ก่อน โดยค้นหาชื่อและเลือก Distribution ของเรา แล้วคลิก Disable

แล้วคลิก Disable

ค้นหาชื่อและเลือก Distribution ของเราอีกครั้ง แล้วคลิก Delete

แล้วคลิก Delete

เลือก Origin access ในหัวข้อ Security จากเมนูด้านซ้าย
แล้วค้นหาชื่อและเลือก Origin access controls ของเรา แล้วคลิก Delete

แล้วคลิก Delete

สุดท้ายนี้

สำหรับผู้ใช้งานที่ต้องการดูรายเอียดที่ลึกกว่านี้ ให้ดูที่บทความนี้ได้เลย

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

บทความที่เกี่ยวข้อง