ทำความรู้จัก NAT Gateway และทำไมมันถึงดูดเงินในกระเป๋าคุณ
เวลาเราสร้างระบบบนคลาวด์อย่าง AWS (Amazon Web Services - บริการเช่าคอมพิวเตอร์และพื้นที่เก็บข้อมูลบนอินเทอร์เน็ต) เรามักจะแยกส่วนที่เก็บข้อมูลสำคัญไว้ใน Private Subnet (เครือข่ายส่วนตัวที่เข้าถึงจากโลกภายนอกไม่ได้โดยตรง) เพื่อความปลอดภัย แต่ปัญหาคือเมื่อเครื่องเหล่านั้นต้องการโหลดไฟล์หรืออัปเดตซอฟต์แวร์จากอินเทอร์เน็ต มันจะทำไม่ได้เพราะถูกกั้นไว้
NAT Gateway (ประตูทางออกสำหรับเครือข่ายส่วนตัว) จึงถูกสร้างขึ้นมาเพื่อทำหน้าที่เหมือน "นายหน้า" คอยรับคำสั่งจากเครื่องข้างในไปขอข้อมูลจากอินเทอร์เน็ต แล้วส่งกลับมาให้ เหมือนเราสั่งของออนไลน์ผ่านนิติบุคคลของคอนโดนั่นเอง แต่นิติบุคคลนี้ไม่ได้ทำงานฟรี เพราะทุกครั้งที่มีข้อมูลวิ่งผ่าน มันจะคิดเงินคุณสองต่อเสมอ
ต่อแรกคือ Hourly Charge (ค่าบริการรายชั่วโมง) ที่คุณต้องจ่ายแค่เปิดทิ้งไว้ ต่อที่สองคือ Data Processing Charge (ค่าธรรมเนียมตามปริมาณข้อมูล) ซึ่งคิดเงินตามจำนวนข้อมูลที่วิ่งผ่านจริง ยิ่งโปรเจกต์คุณโตขึ้น มีการดาวน์โหลดไฟล์หรืออัปเดตโปรแกรมบ่อยขึ้น บิลค่าใช้จ่ายส่วนนี้ก็จะพุ่งสูงขึ้นโดยที่คุณไม่ทันสังเกต
วิธีตรวจสอบว่าคุณกำลังจ่ายค่าโง่ไปเท่าไหร่
ก่อนจะเริ่มแก้ปัญหา คุณต้องรู้ก่อนว่าตอนนี้คุณเสียเงินไปกับอะไรบ้าง หลายคนมองข้ามเพราะเห็นชื่อรายการในบิลแล้วดูเป็นค่าใช้จ่ายปกติ ให้คุณเข้าไปที่หน้า Cost Explorer (เครื่องมือดูค่าใช้จ่ายของ AWS) แล้วเลือกกรองข้อมูลโดยใช้หัวข้อ Usage Type (ประเภทการใช้งาน) เพื่อดูว่ามีรายการที่ชื่อ NatGateway-Hours หรือ NatGateway-Bytes โผล่มาบ้างไหม
รายการแรก NatGateway-Hours คือค่าเช่าประตูที่ต้องจ่ายทุกชั่วโมง ส่วนรายการที่สอง NatGateway-Bytes คือตัวการสำคัญที่ทำให้บิลแพง เพราะมันจะโตขึ้นเรื่อยๆ ตามจำนวนการใช้งานจริง ถ้าคุณเห็นตัวเลขนี้หลักหลายพันบาทต่อเดือน แสดงว่าระบบของคุณกำลังใช้ทางออกที่แพงเกินความจำเป็นสำหรับงานบางอย่าง
ลองเช็ค VPC Flow Logs (บันทึกเส้นทางการวิ่งของข้อมูลในเครือข่าย) ดูว่าข้อมูลส่วนใหญ่ที่ผ่าน NAT Gateway วิ่งไปที่ไหน ถ้าปลายทางคือ S3 (ที่เก็บไฟล์ขนาดใหญ่) หรือ DynamoDB (ฐานข้อมูลแบบกึ่งโครงสร้าง) แสดงว่าคุณกำลังเสียเงินฟรี เพราะบริการเหล่านี้มีทางลัดที่ถูกกว่ามากรอให้คุณไปใช้งานอยู่
ทางลัดฟรีที่คนส่วนใหญ่ลืมใช้: Gateway Endpoint
ข่าวดีคือคุณไม่จำเป็นต้องส่งข้อมูลทุกอย่างผ่าน NAT Gateway เสมอไป สำหรับบริการยอดฮิตอย่าง S3 และ DynamoDB คุณสามารถสร้างสิ่งที่เรียกว่า Gateway Endpoint (จุดเชื่อมต่อตรงสำหรับบริการเฉพาะ) ได้ฟรี ซึ่งมันจะทำหน้าที่เป็น "ทางด่วน" ที่เชื่อมต่อเครื่องของคุณเข้ากับบริการเหล่านี้โดยตรงโดยไม่ต้องออกไปผ่าน NAT เลย
การตั้งค่านี้ไม่มีค่าใช้จ่ายรายชั่วโมง และไม่มีค่าธรรมเนียมตามปริมาณข้อมูล การตั้งค่าทำได้ง่ายๆ ผ่านหน้า VPC Console (หน้าจอจัดการเครือข่ายของ AWS) โดยการเพิ่ม Route Table (ตารางบอกเส้นทางของข้อมูล) ให้ชี้ไปยัง Endpoint ใหม่นี้แทนการวิ่งออกไปที่ NAT Gateway
เมื่อคุณตั้งค่าเสร็จ ข้อมูลที่เคยต้องจ่ายค่าผ่านทาง 0.045 ดอลลาร์ต่อกิกะไบต์ก็จะกลายเป็นศูนย์ทันที นี่คือการปรับแต่งที่คุ้มค่าที่สุดสำหรับโปรเจกต์ระดับเริ่มต้นไปจนถึงระดับบริษัท ไม่ว่าคุณจะเป็นมือใหม่หรือโปรแกรมเมอร์ที่มีประสบการณ์ นี่คือจุดแรกที่คุณต้องทำหากเห็นตัวเลขในบิลเริ่มสูงขึ้น
เพิ่มประสิทธิภาพด้วย Interface Endpoint
นอกจาก S3 และ DynamoDB แล้ว บริการอื่นๆ อย่าง ECR (ที่เก็บไฟล์โปรแกรม Docker) หรือ CloudWatch Logs (ที่เก็บข้อความแจ้งเตือนของระบบ) ยังจำเป็นต้องใช้ Interface Endpoint (จุดเชื่อมต่อผ่านเครือข่ายส่วนตัว) ซึ่งจะทำงานผ่านเทคโนโลยีที่เรียกว่า PrivateLink (การเชื่อมต่อแบบส่วนตัวภายใน AWS)
ต่างจาก Gateway Endpoint ตรงที่ Interface Endpoint จะมีค่าใช้จ่ายรายชั่วโมงและค่าข้อมูล แต่ราคาจะถูกกว่าการใช้ NAT Gateway มาก โดยเฉพาะถ้าคุณต้องดึงไฟล์ขนาดใหญ่หรือส่งข้อมูลจำนวนมาก การคำนวณความคุ้มค่าคือให้ดูว่าปริมาณข้อมูลที่ใช้ในแต่ละเดือนคุ้มกับค่าเช่ารายชั่วโมงของ Endpoint หรือไม่
ถ้าคุณเป็นสาย Docker (เครื่องมือแพ็กแอปพลิเคชัน) ที่ต้องดึงไฟล์อิมเมจขนาดใหญ่ทุกครั้งที่สั่ง Deploy (เอาโค้ดขึ้นเซิร์ฟเวอร์จริง) การใช้ Interface Endpoint สำหรับ ECR จะช่วยลดค่าใช้จ่ายได้มหาศาล เพราะคุณไม่ต้องเสียค่า NAT Processing (ค่าประมวลผลข้อมูลผ่าน NAT) ซ้ำซ้อนอีกต่อไป
การจัดวางเครือข่ายให้ถูกจุดเพื่อลดค่าใช้จ่าย
อีกจุดที่มือใหม่มักพลาดคือการวาง NAT Gateway ไว้คนละ Availability Zone (โซนของศูนย์ข้อมูล) กับเซิร์ฟเวอร์ของคุณ การทำแบบนี้จะทำให้ข้อมูลต้องวิ่งข้ามโซน ซึ่ง AWS จะคิดเงินค่า Inter-AZ Data Transfer (ค่าโอนย้ายข้อมูลข้ามโซน) เพิ่มขึ้นมาอีกต่อหนึ่งโดยไม่จำเป็น
หลักการง่ายๆ คือพยายามวางทรัพยากรให้อยู่ในโซนเดียวกันกับ NAT Gateway ให้มากที่สุด หรือถ้าจำเป็นต้องมีหลายโซน ก็ควรพิจารณาติดตั้ง NAT Gateway ให้ครบทุกโซนแม้จะมีค่าใช้จ่ายรายชั่วโมงเพิ่มขึ้น แต่มันมักจะถูกกว่าการจ่ายค่าโอนย้ายข้อมูลข้ามโซนที่ควบคุมปริมาณไม่ได้
ก่อนตัดสินใจปรับเปลี่ยน ให้วัดผลจาก Cost Explorer อีกครั้งว่าค่าใช้จ่ายส่วนใหญ่มาจากการโอนย้ายข้อมูลข้ามโซนหรือไม่ ถ้าใช่ การย้ายเครื่องให้มาอยู่ในโซนเดียวกันจะช่วยให้บิลลดลงอย่างเห็นได้ชัดโดยไม่ต้องเขียนโค้ดเพิ่มแม้แต่บรรทัดเดียว
สรุป: เปลี่ยนทางเดินข้อมูลเพื่อประหยัดงบ
การลดค่าใช้จ่าย AWS ไม่ใช่เรื่องของเวทมนตร์ แต่เป็นเรื่องของการเข้าใจว่าข้อมูลของคุณเดินทางอย่างไร หากคุณไม่อยากให้บิลค่าบริการบานปลาย ให้เริ่มจากการใช้ Gateway Endpoint สำหรับ S3 และ DynamoDB ทันที เพราะนี่คือการ "ปิดก๊อก" ค่าใช้จ่ายที่ไร้เหตุผลที่สุด
หากคุณยังพบรายการ NAT Gateway ในบิล ให้ลองประเมินการใช้ Interface Endpoint สำหรับบริการอื่นๆ ที่มีการใช้งานบ่อยๆ และตรวจสอบการวางโครงสร้างเครือข่ายให้ข้อมูลวิ่งอยู่ในโซนเดียวกัน การทำสิ่งเหล่านี้จะช่วยให้คุณประหยัดเงินได้หลักพันถึงหลักหมื่นบาทต่อเดือน ซึ่งคุณสามารถนำเงินส่วนนี้ไปลงทุนกับการพัฒนาฟีเจอร์หรือการเรียนรู้ทักษะใหม่ๆ ได้
ตัวอย่างการใช้งานจริง: สมมติว่าทีมของคุณใช้ S3 เก็บไฟล์รูปภาพจำนวนมากผ่าน Private Subnet เมื่อคุณเพิ่ม Gateway Endpoint ให้กับ S3 ข้อมูลรูปภาพทั้งหมดจะวิ่งผ่านทางด่วนนี้แทนการผ่าน NAT Gateway ส่งผลให้ค่าธรรมเนียม NatGateway-Bytes ของคุณลดลงจนเกือบเป็นศูนย์ในเดือนถัดไปทันที
ที่มา: AWS NAT Gateway Pricing: The Hidden Tax, and How to Kill It — DEV Community