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

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

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

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

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

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

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

AWS Global Accelerator คืออะไร

บทนำ

AWS Global Accelerator (เรียกย่อๆว่า Global Accelerator) เป็น service ที่เปิดตัวในงาน re:Invent 2018 ที่ใช้ Global Network เหมือนกับ Amazon CloudFront (เรียกย่อๆว่า CloudFront)

จุดเด่น

จุดเด่นหลักๆของ Global Accelerator มีดังนี้ครับ

  • Improved communication latency
  • Providing Single Entry to Applications with Static IP
  • Application protection

Improved communication latency

จุดเด่นหลักๆอย่างนึงของ Global Accelerator ก็คือ การปรับปรุง Network latency ระหว่าง User กับ Application ให้ดีขึ้น ครับ

โดยปกติแล้ว การที่ User ทำการ Access เข้าไปที่ Application โดยผ่าน Internet จำเป็นต้องผ่าน Network จำนวนหลายสาย
เมื่อผ่าน Network จำนวนหลายสายจะทำให้เจอกับสถานการณ์แออัดของ Network ต่างๆ ทำให้เกิดปัญหา Latency ที่เพิ่มมากขึ้น และ Data เสียหายได้

(หัวข้อภาพ: เมื่อไม่มี AWS Global Accelerator, อ้างอิง: AWS Global Accelerator - Amazon Web Services)

แต่ว่าหากเราใช้ Global Accelerator จะมีการใช้ AWS Network มาขั้นกลางในบริเวณที่ใกล้กับ User (Edge Location) นั่นทำให้ ช่วยลดปัญหาต่างที่เกิดขึ้นจากการผ่านหลาย Network และเพิ่ม Performance ต่างๆจากการใช้ AWS Network ภายใน และผลลัพท์ทำให้ ช่วยปรับปรุง Latency ได้นั่นเอง

(หัวข้อภาพ: เมื่อมี AWS Global Accelerator, อ้างอิง: AWS Global Accelerator - Amazon Web Services)

สำหรับท่านที่อ่านบทความนี้อยู่ คงจะสงสัยกันแน่ว่า "เมื่อใช้งานจริงแล้วจะเร็วขึ้นเท่าไร" โดยทาง AWS Official เอง ก็ได้เตรียมเครื่องมือสำหรับตรวจสอบ Performance มาให้แล้ว ใครสนใจ ก็สามารถเข้าไปตรวจกันเองได้ในลิ้งค์ด้านล่างนี้เลย

นอกจากนี้ทาง AWS Official ได้มีการโชว์ Usecase ที่ใช้ Global Accelerator ในการ Service ที่ใช้ การเชื่อมต่อ real time หรือ เกม ที่แสดงให้เห็นจุดเด่นที่ปรับปรุง Latency มาให้เราดูกันด้วย โดยหากใครสนใจรายละเอียดเพิ่มเติมสามารถดูได้ที่ลิ้งค์ด้นาล่างนี้ครับ

Improving the Player Experience by Leveraging AWS Global Accelerator and Amazon GameLift FleetIQ | AWS for Games Blog

สำหรับ CloudFront ที่เป็นอีกหนึ่ง Service ที่มีการใช้ Global Network เหมือนกันกับ Global Accelerator ที่ได้กล่าวไว้ด้านบน เราจะมาอธิบายถึงความแตกต่างว่าควรเลือกใช้ในกรณีใดในหัวข้อต่อๆไปครับ

Providing Single Entry to Applications with Static IP

Global Accelerator มีการให้บริการ Static IP Address (anycast) อยู่ 2 จำนวน โดย Client สามารถใช้ IP Address นี้ในการ Access ไปยัง Application ได้

โดยนี่จะเหมาะกับการที่เรามีหลาย Endpoint จากการทำการเปิด Multi Region ของ Application ครับ โดยการให้แต่ละ Endpoint เป็น Origin แล้วใช้ Global Accelerator จะทำให้ ฝั่ง Client สามารถใช้ Static IP Address ที่ให้บริการในการ Access โดยไม่ต้องใส่ใจกับ Endpoint หลายๆตัว

(หัวข้อภาพ: การนำทางจราจรที่ลดขั้นตอนและยืดหยุ่นสำหรับแอปพลิเคชันหลาย Region, อ้างอิง: AWS Global Accelerator - Amazon Web Services)

นอกจากที่เขียนไว้ด้านบนแล้ว เบื้องหลังของ Global Accelerator สามารถตั้งค่า Origin หลายๆตัวได้ด้วย ทำให้สามารถ Failover หรือ Scaling Endpoint, A/B Test หรือ B/G Deploy ก็สามารถทำได้ครับ โดยเราจะอธิบายเกี่ยวกับการตั้งค่า Weight ให้กับแต่ละ Endpoint เพื่อปรับปริมาณของ Traffic ในหัวข้อต่อๆไปครับ

Application protection

ด้วยการใช้ Global Accelerator จะทำให้สามารถป้องกันการ Access จาก Public Internet ไปยัง Origin ที่เป็น EC2 หรือ S3 ได้ ช่วยทำให้ Application ลดความเสี่ยงจากการถูกโจมตีได้

นอกจากนี้ การตั้งค่า Default ของ Global Accelerator นั้นเป็นเป้าหมายการป้องกันของ AWS Shield Standard อยู๋แล้ว ทำให้สามารถป้องกัน Application จาก DDoS ทั่วไปได้

อ้างอิง: AWS Shield Adds Advanced DDoS Protection for AWS Global Accelerator

แต่ว่า ณ ปัจจุบัน(08/2022) AWS WAF ยังไม่รองรับ Global Accelerator ครับ ทำให้หากต้องการใช้ AWS WAF ให้เลือก ALB เป็น Origin แล้วใช้ AWS WAF กับ ALB แทนครับ

องค์ประกอบของ Global Accelerator

สำหรับองค์ประกอบที่สร้าง Global Accelerator หรือ คำศัพท์ต่างๆ สามารถดูได้ที่ลิ้งค์ด้านล่างนี้ครับ
AWS Global Accelerator components - AWS Global Accelerator

Accelerator

Accelerator คือ หน่วยเรียก Resource ที่ใหญ่ที่สุดของ Global Accelerator เราจะทำการสร้าง Accelerator แล้วค่อยๆทำการตั้งค่า Listener หรือ Endpoint ข้างใน ซึ่งจะอธิบายในหัวข้อต่อๆไปครับ

นอกจากนี้ Accelerator ยังแบ่งออกเป็น 2 ชนิดคือ Standard และ Custom routing ตอนที่เราสร้าง Accelerator จะมีให้เลือกว่าจะใช้ประเภทอะไรครับ

Custom routing accelerator จะในกรณีที่ ต้องการให้ User หลายจำนวนใช้งานไปยัง EC2 ตัวเดียว เช่น Game Matching
เนื่องจาก Standard ถูกสร้างขึ้นมาในจุดประสงค์ในการแบ่งปริมาณของ Traffic จึงอาจทำให้อาจจะเกิดปัญหาเมื่อเราต้องการให้ User ทำการ Routing ไปรวมกันที่จุดที่เราต้องการไม่ได้ หากพบปัญหานี้ เราแนะให้ลองตั้งค่าเป็น Custom routing ดูครับ

หากใครสนใจรายละเอียดเพิ่มเติมเกี่ยวกับ Custom routing สามารถอ่านได้ที่ลิ้งค์ด้านล่าง Custom routing สามารถใช้ได้กับแค่ EC2 เท่านั้น ผมจึงแนะนำให้อ่านเอกสารลิ้งค์ด้านล่างเพื่อศึกษาดูได้ครับ

Guidelines and restrictions for custom routing accelerators - AWS Global Accelerator
Introducing AWS Global Accelerator custom routing accelerators | Networking & Content Delivery

ในบทความนี้จะเป็นการเขียนข้อมูลโดยด้างอิงจาก Standard accelerator เท่านั้นครับ

Listener

ด้วยการกำหนด Listener จะทำให้เราสามารถ กำหนดได้ว่า accelerator จะรับการเชื่อมต่อแบบไหนจาก Client บ้างครับ โดยในการกำหนดจะเป็นการใส่ Port กับ Protocol เพื่อกำหนด Listener ขึ้นตามภาพด้านล่างครับ (จริงๆแล้ว มี client affinity Setting ด้วย แต่จะค่อยอธิบายในหัวข้อต่อๆไป)

เราสามารถกำหนด หลาย Port ใน 1 Listener ได้ และ กำหนด 1 Listener ใน หลาย Port ได้ ทำให้เราสามารถกำหนดการตั้งค่าได้หลายแบบได้อย่างยืดหยุ่น
โดยเมื่อเราดูภาพด้านล่าง มีการตั้งค่าอยู่ 2 ตัว ตัวแรกมีการกำหนดไว้ว่า TCP/80 ส่วนอีกตัวหนึ่งเขียนไว่ว่า TCP/81〜90 จะทำให้ผลลัพท์คือ accelerator สามารถรับการเชื่อมต่อได้ตั้งแต่ TCP/80〜90 ครับ

ถึงแม้เรากำหนด Listener ไว้หลายจำนวน แต่ Client ก็จะทำการเชื่อมต่อเข้ามายัง Endpoint ของ accelerator ทำให้ไม่จำเป็นต้องใส่ใจกับการกำหนดของ Listener ก็สามารถใช้งานได้ เมื่อทำการเชื่อมต่อไปยัง accelerator แล้ว accelerator จะทำการกรองการเชื่อมต่อแล้วส่งไปในขั้นตอนต่อไปตามภาพด้านล่าง

Endpoint/ Endpoint Group

Endpoint คือ Target ที่ใช้ Routing Request ในขั้นสุดท้ายของ Global Accelerator ครับ
ใน Accelerator เราสามารถกำหนด NLB/ALB/EC2/EIP ได้ครับ
Endpoint Group คือ กลุ่มที่มี Endpoint มากกว่า 1 มารวมตัวกันครับ

ในกรณีของ Standard accelerator เราจะทำการตั้งค่า Endpoint Group 1 ตัวขึ้นไปในแต่ละ Listener ครับ
Listener จะถูก Routing Traffic ไปยังแต่ละ Endpoint/Endpoint Group ตามปริมาณ Traffic ที่ถูกตั้งค่าตามความปกติ Endpoint หรือ traffic dial ครับ (กลไกของ Health Check หรือ traffic dial จะเขียนอธิบายในหัวข้อต่อๆไปครับ)

แต่ละ Endpoint ที่อยู่ใน Endpoint Group จำเป็นต้องสร้างใน Region เดียวกัน แต่เราสามารถใช้ Endpoint Group ที่อยู่ต่าง Region ติดกับ 1 Listener ได้ (ไม่สามารถตั้งค่าหลาย Endpoint Group ที่มี Region เดียวกัน ต่อ 1 Listener ได้)

ในหน้ารายละเอียดของ Listener ของ Console เราสามารถเพิ่ม Endpoint Group ได้ที่ปุ่ม "Add enpoint group" ครับ

ในหน้าเพิ่ม Endpoint Group เราจำเป็นต้องเลือก Region ที่จะต้องใช้ จึงจะไปหน้าถัดไปได้

ในหน้านี้เราจะได้เลือก Enpoint Type เป็น Resource ต่างๆ ตามในภาพ โดยเราสามารถปล่อยว่างๆ ไม่ใส่ข้อมูลอะไร แล้วกลับมาเพิ่มได้ทีหลังได้ด้วยครับ

เมื่อทำตามขั้นตอนข้างบนเสร็จวนไป ก็จะได้ หลาย Endpoint ต่อ 1 Listener (Tokyo Region, Osaka Region) ตามภาพด้านล่าง

DNS Name

Accelerator ที่ถูกสร้างจะมีการให้บริการ Static IP Address อยู่ 2 ตัว และก็จะมีการกำหนดชื่อ DNS Name ด้วย

เมื่อเราทำการ name resolution กับ DNS Name นี้ เราก็จะได้ IP Address 2 ตัว ที่ติดอยู่กับ accelerator กลับคืนมาครับ

$ dig +short xxxxxxx.awsglobalaccelerator.com
15.xxx.xxx.x
3.xx.xxx.xxx
$

ฟังก์ชันที่เกี่ยวข้อง

เราคุยกันไปแล้วเกี่ยวกับพื้นฐานของ Global Accelerator ไปแล้ว ต่อไปเราจะมาคุยกันเกี่ยวกับ ฟังก์ชันของ Global Accelerator ที่สำคัญๆกันครับ

Preserve Client IP Address

Global Accelerator มีการให้บริการการเก็บรักษา Client IP Address ต่อ Endpoint ต่อไปนี้(ที่เขียนไว้ต่อจากนี้) และจะเปิดการใช้งานเป็น Default ในกรณีของ ALB จะถูกเก็บ Client IP Address ไว้ใน Header X-Forwarded-For ครับ

  • ALB
    • กรณีของ Internet-facing จะสามารถเลือกที่จะเก็บหรือไม่เก็บ IP Address ได้
    • กรณีของ Intenal จะเก็บ IP Address ตอบ
  • EC2

2 ภาพด้านล่างจะเป็นการตั้งค่า Endpoint ในกรณีของ Internet-facing ALB และ Intenal ALB ครับ
จะสังเกตเห็นว่าจะมีแค่ของ Internet-facing เท่านั้นจะสามารถเลือกที่จะเก็บหรือไม่เก็บ IP Address ได้

แต่ก็มี Endpoint ต่อไปนี้(ที่เขียนไว้ต่อจากนี้) ที่ไม่รองรับการเก็บรักษา Client IP Address และ IP Address ต้นทางการส่ง จะถูกเปลี่ยนเป็น IP address ranges of Global Accelerator edge servers แทน

  • NLB
  • EIP

นอกจากนี้ Global Accelerator จะทำการสร้าง Security Group ใน VPC ที่มี Endpoint อยู่ หรือ สร้าง Network Interface(ENI) ที่อยู่ในแต่ละ Subnet ที่มี Endpoint เนื่องจาก Global Accelerator มีการรองรับการเก็บรักษา Client IP Address ไว้อยู่

ในภาพด้านล่าง จะเป็นการตรวจสอบ Security Group กับ ENI หลังจากำหนด Endpoint ของ GlobalAccelerator ไว้ในแต่ละ ALB ที่แบ่ง ALB ไปใน VPC เดียวกันที่มี 2 Subnet ที่แตกต่างกันอย่างละ 2(รวม 4 Subnet)

เราจะเห็นว่ามี Security Group ชื่อ "GlobalAccelerator" ถูกสร้างอยู่ 1 ตัว ข้างในไม่มี Inbound และ Outbound เปิด 0.0.0.0 ไว้ครับ

เมื่อเราใช้ Security Group นี้กับ Rule ของ Security Group อื่น จะทำให้สามารถควบคุมการเชื่อมต่อให้ผ่านแค่ได้จาก GlobalAccelerator เท่านั้น
แต่มีข้อควรระวังคือ ไม่แนะนำให้เปลี่ยนเนื้อหาข้างใน GlobalAccelerator Security Group ครับ

Global Accelerator doesn't delete security groups that it creates. However, Global Accelerator does delete an elastic network interface if it isn't being used by any of the endpoints in accelerators in your account.

อ้างอิง: Best practices for client IP address preservation - AWS Global Accelerator

เราสามารถตรวจสอบได้ว่า มี ENI ถูกสร้างขึ้น 4 จำนวนซึ่งเท่ากับจำนวน Subnet ที่ ALB ใช้งานอยู่ นอกจากนี้ ยังทำให้เราเข้าใจได้ด้วยว่า เป็น ENI ที่ถูกสร้างจาก Security Group ของ GlobalAccelerator ตามที่เขียนไว้บน

อ้างอิง: Preserve client IP addresses in AWS Global Accelerator - AWS Global Accelerator

การบันทึก Flowlogs ของ Global Accelerator

เมื่อเราทำการเปิดการใช้งาน Flowlogs ของ Global Accelerator จะสามารถรับข้อมูล Traffic ระหว่าง GlobalAccelerator กับ ENI ได้ ซึ่งนี่จะเป็นประโยชน์ต่อเราในการ troubleshooting เช่นการที่ Traffic ที่มาไม่ถึง Endpoint เป็นต้น

การตั้งค่า Default นั้นจะทำการปิด Flowlogs ไว้ ทำให้หากเราต้องการใช้ จำเป็นต้องตั้งค่าเปิดไว้ โดยในปัจจุบัน (08/2022) ยังไม่สามารถทำการเปิด Flowlogs ผ่าน Console ได้ หากต้องการจะเปิดต้องตั้งค่าผ่าน AWS CLI เท่านั้น

เราได้ลองทำการตรวจสอบสภาพการตั้งค่าของ Flowlogs ใน CloudShell กับการตั้งค่าของ Flowlogs แล้ว สำหรับข้อมูล Bucket Policy ต่างๆที่จำเป็นใน S3 Bucket ที่จะทำการบันทึกสามารถดูข้อมูลเพิ่มได้ที่ลิ้งค์ด้านล่างนี้ (ในการควบคุม GlobalAccelerator โดยใช้ CLI จำเป็นต้องทำใน Oregon region)

# ตรวจสอบสภาพการตั้งค่าของ Flowlogs(สามารถตรวจสอบได้ว่า false)
$ aws globalaccelerator describe-accelerator-attributes --accelerator-arn arn:aws:globalaccelerator::000000000000:accelerator/xxxx-xxxx-xxxx-xxxx-xxxx
{
    "AcceleratorAttributes": {
        "FlowLogsEnabled": false
    }
}
$
# การตั้งค่าของ Flowlogs
$ aws globalaccelerator update-accelerator-attributes \
> --accelerator-arn arn:aws:globalaccelerator::000000000000:accelerator/xxxx-xxxx-xxxx-xxxx-xxxx \
> --region us-west-2 \
> --flow-logs-enabled \
> --flow-logs-s3-bucket logs-bucket-000000000000  \
> --flow-logs-s3-prefix globalaccelerator/
{
    "AcceleratorAttributes": {
        "FlowLogsEnabled": true,
        "FlowLogsS3Bucket": "logs-bucket-000000000000",
        "FlowLogsS3Prefix": "globalaccelerator/"
    }
}
$
# ตรวจสอบอีกรอบ(สามารถตรวจสอบได้ว่า Flowlogs ได้ถูกตั้งค่าไว้อยู๋รึเปล่า)
$ aws globalaccelerator describe-accelerator-attributes --accelerator-arn arn:aws:globalaccelerator::000000000000:accelerator/xxxx-xxxx-xxxx-xxxx-xxxx
{
    "AcceleratorAttributes": {
        "FlowLogsEnabled": true,
        "FlowLogsS3Bucket": "logs-bucket-000000000000",
        "FlowLogsS3Prefix": "globalaccelerator/"
    }
}
$

อ้างอิง: Flow logs in AWS Global Accelerator - AWS Global Accelerator

การใช้ฟังก์ชัน client affinity

ในหัวข้อ Listener ที่เป็นองค์ประกอบของ Global Accelerator จะมีหัวข้อ client affinity ให้สามารถตั้งค่าได้ครับ

ในการตั้งค่า Default นั้น Global Accelerator จะทำการ Routing Traffic ตามค่า hash ที่ถูกสร้างขึ้นตาม 5-tuple หรือ Peformance ของฝั่ง Endpoint

Global Accelerator uses the 5-tuple properties—source IP, source port, destination IP, destination port, and protocol—to select the hash value. Next, it chooses the endpoint that provides the best performance.

แต่หาก ในการตั้งค่า Listener หากเราทำการตั้งค่า Source IP ใน Client affinity จะทำให้ Global Accelerator สามารถสร้างค่า Hash โดยใช้ Source IP และ Destination IP ได้ และสามารถ Routing ให้ User เดิมไปยัง Endpoint ได้ตราบใดที่ IP นั้นไม่มีเปลี่ยนการเปลี่ยนแปลง

อ้างอิง: Client affinity - AWS Global Accelerator

การปรับแต่ง Traffic Flow โดย Traffic Dial

Global Accelerator นั้นสามารถตั้งค่าหลาย Endpoint ต่อ 1 Listener และ สามารถมี Endpoint จากหลาย Region ได้ และสามารถใช้การตั้งค่า Traffic Dial ในการตั้งค่า Weight ให้แต่ละ Endpoint Group ได้ และสามารถทำให้เชื่อมต่อ Traffic บางชนิดโดยตรงได้

การตั้งค่าเริ่มต้น (Default) ของ Traffic Dial ของทุก Endpoint Group จะถูกตั้งค่าอยู่ที่ 100 ครับ
ในภาพด้านล่างจะเป็นการผูกไว้กับ Listener A ที่มี Endpoint Group Tokyo Region และ Osaka Region ครับ ในกรณีนี้ Client ที่อยู่ใกล้ Tokyo Region จะถูก Routing ไปยัง Endpoint ของ Tokyo Region และ Client ที่อยู่ใกล้ Osaka Region จะถูก Routing ไปยัง Endpoint ของ Osaka Region

แต่หากเราตั้งค่า Traffic Dial ของ Endpoint Group Tokyo Region อยู่ที่ 50 จะทำให้ Traffic ที่เหลืออีก 50% จะถูกแบ่งไปที่ Region อื่น ตามภาพด้านล่าง (ในกรณีภาพด้านล่างคือ Traffic ไหลไปที่ Osaka)

เราสามารถใช้ฟังก์ชันนี้ในการ Maintenance Region ที่กำหนดได้ โดยการใส่ Wieght ของ Traffic Dial ให้อยู่ที่ 0 เพื่อไม่ให้มี Traffic ผ่านไปได้

อ้างอิง: Adjusting traffic flow with traffic dials - AWS Global Accelerator

โปรดระวัง: หาก Endpoint Group ไม่มี Endpoint ที่ทำงานได้ปกติ Global Accelerator จะทำการ Failover ระหว่าง Endpoint Group และในตอนนี้เอง ต่อให้ Wieght ของ Traffic Dial อยู่ที่ 0 ก็จะเป็นเป้าหมายในการส่ง Traffic ครับ

If there are no healthy endpoints in an endpoint group that have a weight greater than zero, Global Accelerator tries to failover to a healthy endpoint with a weight greater than zero in another endpoint group. For this failover, Global Accelerator ignores the traffic dial setting. So if, for example, an endpoint group has a traffic dial set to zero, Global Accelerator still includes that endpoint group in the failover attempt.

If Global Accelerator doesn't find a healthy endpoint with a weight greater than zero after trying the three closest endpoint groups (that is, AWS Regions), it routes traffic to a random endpoint in the endpoint group that is closest to the client. That is, it fails open.

อ้างอิง: Endpoint weights - AWS Global Accelerator

การปรับแต่ง Endpoint Weight โดย Traffic Dial

เราสามารถตั้งค่า Endpoint หลายจำนวนใน Endpoint Group ได้ โดยเราสามารถตั้งค่า Weight ได้ตั้งแต่ 0 - 255 เพื่อทำการควบคุมส่วนแบ่งของ Traffic ที่จะถูกส่งได้ โดยยิ่ง Weight ก็จะรับ Traffic เยอะ หาก Weight น้อยก็จะรับ Traffic น้อย และหาก Weight = 0 จะไม่มีเกิดการส่ง Traffic ขึ้น

ยกตัวอย่างเช่น เรามี 4 Endpoint ใน 1 Endpoint group และตั้งค่า weight อยู่ที่ 150/50/200/0
เมื่อเราทำการคำนวณออกมาก็จะได้ ส่วนแบ่ง Traffic ตามด้านล่างนี้

  • Weight 150 Endpoint ... 150/(150 + 50 + 200 + 0) = 37.5%
  • Weight 50 Endpoint ... 50/(150 + 50 + 200 + 0) = 12.5%
  • Weight 200 Endpoint ... 200/(150 + 50 + 200 + 0) = 50%
  • Weight 0 Endpoint ... 0/(150 + 50 + 200 + 0) = 0%

ถึงแม้ Endpoint นอกจากที่ตั้งค่า Weight 0 เกิดปัญหาไม่สามารถใช้งานได้ Traffic ก็จะไม่ถูกส่งไปยัง Weight 0 และก็จะเกิด Failover ขึ้นตามที่เขียนไว้ในหัวข้อ "การปรับแต่ง Traffic Flow โดย Traffic Dial" เพราะฉนั้น หากเราไม่ต้องการให้ส่ง Traffic ไปจริงๆ นอกจากจะตั้งค่า Traffic Dial ให้อยู่ที่ 0 ควรจะตั้งค่า Weight ให้อยู่ที่ 0 ด้วยครับ

อ้างอิง: Endpoint weights - AWS Global Accelerator

Health Check

Global Accelerator จะทำการ Health Check ไปยัง Endpoint ในระยะเวลาที่สม่ำเสมอ แล้วก็จะทำการ Routing ไปยัง Endpoint ที่ผ่าน Health Check แล้ว แต่โปรดระวังเพราะ การตั้งค่า Health Check นั้นแตกต่างกันไปตามชนิดของ Endpoint ครับ

เช่น ในกรณีที่ Endpoint เป็น EC2 หรือ EIP จะสามารถใช้ Health Check ของ Global Accelerator ได้ โดยสามารถเข้าไปดูการตั้งค่าได้ในหน้าต่าง Management Console ในหมวด Configure health checks โดยจะมีการตั้งค่าอยู่ 4 อย่างได้แก่ Health check port/Health check protocol/Health check interval/Threshold count ครับ

มีข้อควรระวังคือ การ Health Check ของ Global Accelerator จะเป็น TCP ทำให้ต่อให้เป็น Endpoint รับแค่ UDP Traffic ก็ควรตั้งค่าให้สามารถรับ Traffic ที่เป็น TCP ได้

For EC2 instance or Elastic IP address endpoints with UDP listeners, Global Accelerator uses the listener port and the TCP protocol for health checks, so you must have a TCP server on your endpoint.

ในกรณีของ ALB\NLB Endpoint จะใช้ Health Check ที่ถูกตั้งค่าใน ALB\NLB Endpoint แทน Health Check ที่ตั้งค่าใน Global Accelerator โดยผลลัพท์ของ Health Check ของ ALB\NLB Endpoint จะแสดงในรูปแบบตามแผนภาพด้านล่างครับ


อ้างอิง: Changing health check options - AWS Global Accelerator

การแยกใช้กับ CloudFront

CloudFront ที่เป็นอีกหนึ่ง Service ที่มีการใช้ Global Network เหมือนกันกับ Global Accelerator โดยเราจะมาอธิบายถึงความแตกต่างว่าควรเลือกใช้แยกกันยังไงในหัวข้อนี้ครับ

ใน Session ของ AWS Summit Online Tokyo 2020 นั้นได้มีการพูดถึงข้อแตกต่างระหว่าง CloudFront และ Global Accelerator ไว้ดังนี้ครับ

  • Protocol ที่รองรับ
    • CloudFront: HTTP/S
    • Global Accelerator: TCP/UDP
  • การมีอยู่ของ Content caching layer
    • CloudFront จะใช้ cache เพื่อการแสดง Content ที่เร็วขึ้น
    • Global Accelerator: ไม่มีฟังก์ชั่น cache
  • จำนวน IPs ที่ Client สามารถเห็น
    • CloudFront จะใช้ IP Address ที่แสดงอยู่ใน ip-ranges.json
    • Global Accelerator: มี Static IP อยู่ 2 ตัวที่เกิดจาก Accelerator
  • สามารถใช้ อย่างอื่นนอกจาก AWS Service เป็น Origin ได้รึเปล่า
    • CloudFront ทำได้
    • Global Accelerator ปัจจุบันทำได้แค่ NLB/ALB/EC2/EIP

ค่าใช้จ่าย

ค่าใช้จ่ายของ Global Accelerator นั้น มีอยู่ 2 อย่างด้วยกันคือ ค่าใช้จ่ายตายตัวที่ต้องจ่ายเมื่อใช้ Global Accelerator(Fixed fee) กับ Data Transfer-Premium fee (DT-Premium) ครับ

สำหรับค่าใช้จ่ายตายตัวจะอยู่ที่ 0.025 USD ต่อ 1 ชั่วโมง ครับ หากใช้ต่อเนื่องกัน 30 วัน จะอยู่ที่ 18 USD ตามการคำนวณครับ

สำหรับ Data Transfer-Premium fee จะคิดเงินตามกฎ 2 ข้อต่อไปนี้

  1. Rate ค่าใช้จ่ายจะคิดจาก Region ต้นทางและ Region ปลายทาง
  2. ไม่ได้คิดค่าใช้จ่ายสำหรับทุก Data Transfer จะคิดแค่ส่วนที่เป็น Outbound จาก Application ของคุณเท่านั้น

Monthly fixed fee

Assuming your accelerator runs 24 hours a day for 30 days in a month, you are charged an $18 monthly fixed rate for that accelerator.

Monthly DT-Premium fee

If the monthly amount of data transferred over the AWS network via your accelerator is 10,000 GB, 60% of your traffic is outbound traffic from your application to your users on the internet, and the remaining 40% is inbound traffic from your users on the internet to your application in the AWS Regions. Every hour, you are charged only for the outbound traffic to your users, as that's the dominant direction of your traffic. So, you are charged for 6,000 GB a month and not all 10,000 GB.
This 6,000 GB of monthly traffic are distributed as follows:
5,000 GB transferred from AWS Regions in North America to AWS edge locations in Europe. For this monthly traffic, you are charged $75 at $0.015/GB.
1,000 GB transferred from AWS Regions in North America to AWS edge locations in Asia Pacific. For this monthly traffic, you are charged $35 at $0.035/GB.
Your monthly DT-Premium charge is $110 and, including the $18 monthly fixed fee, your total AWS Global Accelerator monthly bill is $128.

อ้างอิง: AWS Global Accelerator Pricing - Amazon Web Services

สรุป

เป็นยังไงกันบ้างครับกับ AWS Global Accelerator ตอนแรกที่ผมเจอกับ AWS Global Accelerator ผมยังแยกไม่ออกว่า AWS Global Accelerator และ Amazon CloudFront นั้นมีแตกต่างกันอย่างไร แต่หากวใครที่ได้อ่านบทความนี้แล้ว ผมหวังว่าจะเข้าใจกันได้นะครับว่าแตกต่างกันยังไงกันได้บ้างแล้ว แล้วเจอกันในบทความต่อไปครับ สวัสดีครับ / ต้า

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

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

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