Skip to content

Redirect Web ด้วย AWS [email protected]

ความสามารถอย่างนึงของ AWS CloudFront นอกจากจะทำตัวเป็น CDN ก็คือ [email protected] ครับผม

สำหรับ [email protected] นั้น จะเปิดให้เราสามารถ Programming เพื่อจัดการ Request , Responce ที่วิ่งเข้าวิ่งออก CloudFront โดยในที่นี้ เราจะเอามาใช้ในการ Redirect จาก เว็บนึงไปยังอีกเว็บนึงครับ

ตัวอย่างเช่น PAOCLOUD COMPANY LIMITED มี Official Website อยู่ที่ www.paocloud.co.th แต่ทางบริษัทได้จดโดเมนไว้อีกหลายๆโดเมน เช่น paocloud.tech , paocloud.biz , thepao.cloud , รวมไปถึงโดเมนภาษาไทย เช่น เปาคลาวด์.ไทย

สำหรับใน Blog นี้ เราต้องการ Redirect paocloud.biz และ www.paocloud.biz ให้ไปที่ www.paocloud.co.th จะต้องทำอย่างไร มาหาคำตอบกันเถอะ !!!

  1. เลือกภาษาที่ชอบ ภาษาที่ใข่

ขั้นตอนนี้ เราต้องเขียนโปรเเกรมที่ AWS Lambda ซึ่งเป็นบริการประเภท FaaS เพื่อดักจับ Request Header ชื่อ Host นะครับ และเมื่อดักจับได้เเล้ว ก็เอามาเปรียบเทียบว่าค่านั้นๆตรงกับที่เราต้องการหรือไม่ ถ้าตรงก็จัดการ Redirect ไปยัง Website ที่ต้องการ ตัวอย่าง Source Code ก็ตามด้านล่าง ของผมเลือกใช้ Java Script นะ

Redirect Code @ AWS Lambda

2. ปรับค่า Role ให้ CloudFront เรียกใช้ได้

ในขั้นตอนนี้ การที่ Service ใดๆ จะเรียกใช้ Service อีกตัวนั้น เราต้องมีการกำหนดค่าให้ Trust กันก่อนครับ หรือ Allow ให้มันเรียกใช้กันได้ ซึ่งในที่นี้ จะเป็นการเพิ่ม Trust Entities รายละเอียดก็ตามนี้

ให้เราจัดการเเก้ Role ที่ Map กับ Lambda Function ของเรา โดยคลิกไปที่ Permission แล้วจะมีให้คลิกไปที่ Role ที่ถูก Map อยู่ จากนั้นให้แก้ Trusted entities ที่ Trusted Relationships Tab โดยเพิ่มค่า edgelambda.amazonaws.com ลงไปครับ ตามตัวอย่างด้านบน

3. ปรับค่า Behavior ที่ CloudFront

หลังจากนั้น เราก็ต้องกำหนดค่าให้ CloudFront เรียกใช้ Lambda Function ของเรา โดยเอาค่า ARN ของ Function ใส่เข้าไปครับ

ที่ CloudFront Event ให้เลือก Viewer Request และในช่อง Lambda Function ARN เราก็เอาค่า ARN ใส่ลงไปครับ แต่ต้องระบุค่า Version ลงไปด้วยนะ ตัวอย่างของผมจะเป็น

“arn:aws:lambda:us-east-1:<aws-account-id>:function:paocloud-biz-redirector:1”

ถ้าใส่ ARN ลงไปไม่ได้ เเสดงว่าเรากำหนดค่าที่ Role ยังไม่ถูกต้องครับ ลองเช็คใหม่ดู

ส่วนราคาก็

“ราคาคำขอคือ 0.60 USD ต่อ 1 ล้านคำขอ (0.0000006 USD ต่อคำขอ)”

จะเห็นว่าถูกมากๆ ดังนั้น เรามักจะได้ยินว่าการใช้ Serverless Stack มันช่วยลดราคาลงได้ แต่ก็เลือกให้เหมาะกับงาน เเละเราดูเเลมันได้ด้วยนะครับ ไม่งั้นจะกลายเป็นว่าเจอข้อเสีย มากกว่าข้อดีเข้าให้ 555+

ตัวอย่างเว็บที่ใช้ [email protected] ในการ Redirect

paocloud.biz , www.paocloud.biz

ตัวอย่าง Source Code จาก GitHub

https://github.com/paocloud/redirect-non-www-to-www-aws-lambda

อ้างอิง

https://grrr.tech/posts/cloudfront-www-redirect/

https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html