<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Apichet Chayabejara</title>
    <description>The latest articles on Forem by Apichet Chayabejara (@jeepapichet).</description>
    <link>https://forem.com/jeepapichet</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F697049%2F12b200ca-8779-463e-99f2-2d75a3b50147.jpeg</url>
      <title>Forem: Apichet Chayabejara</title>
      <link>https://forem.com/jeepapichet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jeepapichet"/>
    <language>en</language>
    <item>
      <title>11 วิธีประหยัดค่า Data Transfer บน AWS</title>
      <dc:creator>Apichet Chayabejara</dc:creator>
      <pubDate>Wed, 15 Sep 2021 05:39:18 +0000</pubDate>
      <link>https://forem.com/awscommunity-asean/11-data-transfer-aws-4685</link>
      <guid>https://forem.com/awscommunity-asean/11-data-transfer-aws-4685</guid>
      <description>&lt;p&gt;การใช้งานบริการต่างๆ บน AWS​ นั้นเป็นลักษณะที่เราจ่ายตามการใช้งานจริง (pay per use) ซึ่งรวมไปถึงเรื่องของการส่งข้อมูลด้วย ปกติแล้วค่าใช้จ่ายส่วนนี้มักจะเป็นส่วนน้อยเมื่อเทียบกับค่า Compute, Storage, RDS หรือบริการอื่นๆ แต่หากเราไม่ระวังตอนออกแบบและจัดการกับ flow ของข้อมูลไม่ดี ค่าใช้จ่ายส่วนนี้อาจจะสูงขึ้นโดยไม่คาดคิดได้  ในโพสต์นี้เราจะมาดูเทคนิคต่าง ๆ ที่สามารถช่วยประหยัดค่า Data Transfer ได้&lt;/p&gt;

&lt;p&gt;ก่อนอื่นเรามาดูกันก่อนว่า ค่าใช้จ่ายหลักๆ ของการใช้งานเครือข่ายบน AWS มีอะไรบ้าง ราคาที่ใช้จะเป็นราคาใน AWS Region สิงคโปร์ขณะที่เขียนบทความ&lt;/p&gt;

&lt;h3&gt;
  
  
  การส่งข้อมูลเข้าออกจาก AWS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;การนำข้อมูลเข้าจาก Internet มายัง AWS (inbound) โดยปกติจะไม่มีค่าใช้จ่าย แต่จะมีบางกรณี ที่ใช้งานร่วมกับบริการอื่นที่อาจจะมีค่าใช้บางส่วน ยกตัวอย่างเช่นเช่น

&lt;ul&gt;
&lt;li&gt;การ POST/PUT ข้อมูลจากผ่าน CloudFront มายัง Origin จะมีค่าบริการของ CloudFront อยู่ที่ $0.01/GB&lt;/li&gt;
&lt;li&gt;การโหลดข้อมูลจาก Internet ผ่านทาง NAT Gateway สำหรับเครื่องที่อยู่ภายใน private subnet จะมีค่าบริการของ NAT Gatewayที่ $0.059/GB&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;ค่าส่งข้อมูลออกจาก AWS ทาง Public Internet จะมีค่าใช้งานอยู่ที่ $0.12/GB สำหรับการส่งจาก EC2 และบริการส่วนใหญ่&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  การส่งข้อมูลอยู่ภายใน AWS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;การส่งข้อมูลภายใน Availability Zone (AZ) เดียวกัน ฟรีไม่มีค่าใช้&lt;/li&gt;
&lt;li&gt;การส่งข้อมูลข้าม AZ ภายใน Region เดียวกัน คิดที่ $0.01/GB ทั้งขาเข้าและออก นั่นหมายถึงจะมีค่าใช้จ่ายรวม $0.02/GB สำหรับการส่งข้อมูลข้าม AZ&lt;/li&gt;
&lt;li&gt;การส่งข้อมูลข้าม AWS Region จะคิดค่าบริการต่างกันไปตามต้นทางและปลายทาง ยกตัวอย่างเช่น จาก Singapore ไป Tokyo มีค่าบริการที่ $0.09/GB&lt;/li&gt;
&lt;li&gt;ถ้ามีการใช้  Transit Gateway (TGW) ในการเชื่อมต่อระหว่าง VPC หรือ On-premise จะมีค่าประมวลผลข้อมูลอยู่ที่ $0.02/GB &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;รายละเอียดอื่นๆ สามารถดูเพิ่มเติมได้ที่ &lt;a href="https://aws.amazon.com/blogs/architecture/overview-of-data-transfer-costs-for-common-architectures/" rel="noopener noreferrer"&gt;blog&lt;/a&gt; นี้ครับ มีทำสรุปไว้อ่านง่ายดี &lt;/p&gt;

&lt;p&gt;เราพอเข้าใจคร่าวๆ แล้วว่ามีค่าใช้จ่ายจากในการรับส่งและประมวลผลข้อมูลส่วนไหนบ้าง ทีนี้ลองมาดูวิธีการต่างๆ ที่จะช่วยประหยัดค่าใช้จ่ายกันเลย&lt;/p&gt;

&lt;h2&gt;
  
  
  1. เลือกวาง Resource ภายใน AZ เดียวกัน
&lt;/h2&gt;

&lt;p&gt;การวาง Architecture ของระบบ เราอาจจะต้องเลือกใช้งานมากกว่า 1 AZ เพื่อให้ได้ Fault Tolerant ที่ต้องการ แต่ขณะเดียวกันควรคำนึงถึงเส้นทางของข้อมูลด้วย อย่างที่ทราบว่าการส่งข้อมูลภายใน AZ นั้นไม่มีค่าใช้จ่าย ดังนั้นเราควรจะเลือกวาง resource โดยเฉพาะที่ต้องส่งข้อมูลหากันในปริมาณมากๆ ให้อยู่บน AZ เดียวกันเท่าที่จะเป็นไปได้ &lt;/p&gt;

&lt;p&gt;ในกรณีที่มีการใช้งานหลายๆ AWS Account เราควรเลือกใช้ AZ ให้สอดคล้องกันระหว่าง Account ด้วย เช่นกำหนด AZ หลักหรือ AZ รอง เพื่อที่เราจะได้ Availability อย่างที่ต้องการและได้ optimize cost ด้วย มีข้อควรรู้อย่างนึงคือชื่อ AZ เช่น ap-southeast-1a, ap-southeast-1b ที่เราเห็นบน AWS แต่ละ  Account นั้น มีโอกาสที่จะ map ไปยัง AZ คนละที่กันได้ วิธีที่จะตรวจสอบให้แน่ชัด เราต้องเช็คจาก &lt;a href="https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html" rel="noopener noreferrer"&gt;AZ ID&lt;/a&gt; ซึ่งจะเป็นที่เดียวกันในทุกๆ AWS Account&lt;/p&gt;

&lt;h2&gt;
  
  
  2. ใช้ Private IP ในการติดต่อภายใน VPC
&lt;/h2&gt;

&lt;p&gt;การส่งข้อมูลภายใน AZ นั้นไม่มีค่าใช้จ่ายเมื่อเรียกหากันด้วย Private IP Address หากเราไปเรียกใช้ด้วย Elastic IP address หรือ Public IP Address ของ Instance เราจะถูกคิดค่าใช้จ่าย $0.01/GB ทั้งเข้าและออกแม้ว่าจะอยู่ภายใน AZ เดียวกัน &lt;/p&gt;

&lt;h2&gt;
  
  
  3. ใช้ S3 VPC Endpoint แทนการส่งผ่าน NAT Gateway
&lt;/h2&gt;

&lt;p&gt;การเรียกใช้ ​S3 จากเครื่องที่อยู่ใน private subnet ผ่าน NAT Gateway นั้น อาจโดนค่าบริการท่ี่สูง หากมีการรับส่งข้อมูลในปริมาณมากๆ (NAT Gateway มีค่าบริการอยู่ที่ประมาณ $59 ต่อข้อมูล 1TB)&lt;br&gt;
ในกรณีแบบนี้เราสามารถใช้ &lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html" rel="noopener noreferrer"&gt;S3 Gateway VPC Endpoint&lt;/a&gt; ซึ่งจะทำให้เราเชื่อมต่อไปยัง S3 จากภายใน VPC แบบ Private ได้โดยที่ไม่มีค่าใช้เลย!! ฟรีทั้งค่าตัว VPC Endpoint และค่าประมวลผลข้อมูล &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1j447nwgig3d286hx732.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1j447nwgig3d286hx732.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;นอกจาก S3 แล้ว VPC Gateway Endpoint ยังมีให้สำหรับอีกบริการหนึ่งก็คือ DynamoDB ซึ่งก็ไม่มีค่าใช้จ่ายเช่นเดียวกัน แบบนี้ไม่ใช้ไม่ได้แล้ว&lt;/p&gt;

&lt;h2&gt;
  
  
  4. ใช้ Interface Endpoint กับบริการที่รับส่งข้อมูลสูง
&lt;/h2&gt;

&lt;p&gt;นอกจาก S3 และ DynomoDB เรายังสามารถเชื่อมต่อไปยังบริการ AWS อื่นๆ แบบ private ด้วยการใช้ VPC Endpoint ได้เช่นเดียวกัน แต่​จะเป็นแบบ &lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html" rel="noopener noreferrer"&gt;Interface Endpoint&lt;/a&gt; &lt;br&gt;
แม้ว่า Interface Endpoint จะมีคิดค่าบริการรายชั่วโมงและค่าประมวลผลข้อมูล แต่ถ้าใช้กับบริการที่ต้องส่งข้อมูลเยอะๆ เรายังลดค่าใช้จ่ายโดยรวมได้อยู่ดี&lt;br&gt;
ยกตัวอย่างเช่น ถ้าใช้ Amazon Redshift API ด้วยปริมาณข้อมูลเดือนละ 2TB การวิ่งผ่าน NAT Gateway จะมีค่าประมวลผลข้อมูล $118 ต่อเดือน ในขณะที่ถ้าใช้ VPC Interface Endpoint จะมีค่า Endpoint $19 ต่อเดือน (สำหรับ 2 AZ) และค่าประมวลผลข้อมูล $20 เท่านั้น&lt;/p&gt;

&lt;p&gt;ปัจจุบันมี&lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/integrated-services-vpce-list.html" rel="noopener noreferrer"&gt;บริการของ AWS มากกว่า 90 บริการ&lt;/a&gt; ที่สามารถใช้งานร่วมกับ VPC Interface Endpoint ได้ &lt;/p&gt;

&lt;h2&gt;
  
  
  5. ใช้ self-manage NAT instance
&lt;/h2&gt;

&lt;p&gt;NAT Gateway เป็น service ที่บริหารจัดการโดย AWS ที่ highly available และมี bandwidth สูงสุดถึง 45Gbps แต่ก็ต้องแลกมาด้วยค่าใช้จ่ายรายชั่วโมงของทั้งตัว NAT Gateway และค่าประมวลผลข้อมูล&lt;br&gt;
เราอาจจะเลือกใช้งาน &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html" rel="noopener noreferrer"&gt;Nat Instance&lt;/a&gt; แทนการใช้ Nat Gateway เพื่อลดค่าใช้จ่ายได้&lt;br&gt;
Nat Instance จะเสียเฉพาะค่าใช้งาน EC2 และปกติแล้วก็ไม่ได้ต้องการ spec เครื่องสูงในการทำงาน เช่น ถ้าเราเลือกใช้ t4g.micro ซึ่งเพียงพอสำหรับการใช้งานทั่วๆ ไป จะมีค่าใช้จ่ายเพียง $7.74 ต่อเดือน อย่างไรก็ดี ก็อย่าลืมว่าถ้าเลือกใช้ Nat Instance เราต้องเป็นคนจัดการเรื่อง Availability การ Patch และอื่นๆ ด้วยตัวเอง&lt;/p&gt;

&lt;h2&gt;
  
  
  6. ใช้ CloudFront สำหรับ Deliver Content
&lt;/h2&gt;

&lt;p&gt;ถ้าเรามี web application ที่ต้อง deliver content ไปให้ผู้ใช้งานปริมาณมากๆ แล้วการใช้ CloudFront สามารถช่วยลดค่าจ่ายตรงได้&lt;br&gt;
Cloudfront เป็นบริการ CDN ที่ช่วยเพิ่มความเร็วและความปลอดภัยในการ deliver ผ่าน Amazon edge location มีการคิดราคาเป็น Tier ตามปริมาณข้อมูลที่ใช้ในแต่ละเดือน และถ้ามีการ commit การใช้งานขั้นต่ำตั้งแต่ 10TB/เดือน จะมีสิทธิได้รับส่วนลดเพิ่มขึ้นอีกด้วย&lt;/p&gt;

&lt;h2&gt;
  
  
  7. ใช้ Direct Connect ในการส่งข้อมูลไปยัง On-premise
&lt;/h2&gt;

&lt;p&gt;Direct connect เป็นบริการเชื่อมเครือข่ายตรงระหว่างศูนย์ข้อมูลลูกค้ากับ AWS Data center ที่เสถียรและให้ความเร็วสูงและคงที่กว่าการใช้งาน ​Internet ที่เราควบคุมไม่ได้ การจะใช้ Direct Connect นั้นมี fix cost ส่วนของการเชื่อมต่อและค่าโครงข่ายของผู้ให้บริการในประเทศ แต่จะมีค่าบริการส่งข้อมูลต่ำกว่าการส่งผ่าน Site-to-Site VPN ด้วย Internet ถึงกว่าครึ่ง (Direct Connect คิดที่ $0.041/GB  ในขณะที่ Internet อยู่ที่ $0.12/GB)&lt;br&gt;
ดังนั้นหากองค์กรต้องส่งข้อมูลปริมาณมากมายัง on-premise ทุกเดือน การใช้ Direct Connect อาจเป็นทางเลือกที่คุ้มค่ากว่า&lt;/p&gt;

&lt;h2&gt;
  
  
  8. เลือกใช้ VPC Peering
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/transit-gateway" rel="noopener noreferrer"&gt;Transit Gateway&lt;/a&gt; (TGW) เป็นบริการที่ช่วยลดความซับซ่้อนในเชื่อมต่อระหว่าง VPCs และเครือข่ายบน On-premise ซึ่งปกติเราจะใช้เป็นท่ามาตรฐานในการเชื่่อมต่อ ต่อก็มีบางกรณีที่การใช้ &lt;a href="https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html" rel="noopener noreferrer"&gt;VPC Peering&lt;/a&gt; อาจเป็นทางเลือกที่ดีกว่าเพราะไม่มีค่าใช้จ่ายในการเชื่อมต่อและคิดค่าข้อมูลเฉพาะกรณีข้าม AZ เท่านั้น นอกจากนี้การใช้ VPC Peering มี Latency ต่ำกว่าการวิ่งผ่าน TGW ด้วย&lt;/p&gt;

&lt;h2&gt;
  
  
  9. ทำ Distributed inspection ด้วย GWLB
&lt;/h2&gt;

&lt;p&gt;สำหรับองค์กรที่มีการทำ centralized inspection ด้วย TGW ไปยัง VPC กลางที่มี security appliance วางอยู่ ทุกครั้งที่ข้อมูลวิ่งผ่าน TGW จะมีค่าใช้จ่ายการประมวลผลข้อมูล ด้วย Architecture ลักษณะนี้อาจมีค่าใช้จ่ายถึง $0.04/GB เพราะ traffic ต้องวิ่งผ่าน TGW สองรอบในการ ในการทำ Inspection ด้วยความสามารถของ Gateway Load Balance ที่ออกมาเมื่อปลายปี 2020 เราสามารถเลือกที่จะทำ distributed inspection โดยการวาง GWLB endpoint ใน VPC ที่มีการรับส่งข้อมูลมากๆ เพื่อลดค่าใช้จ่ายในส่วนนี้ได้&lt;/p&gt;

&lt;h2&gt;
  
  
  10. เลือกใช้ Shared VPC
&lt;/h2&gt;

&lt;p&gt;อีกแนวทางนึงที่สามารถช่วยลดค่าใช้จ่าย คือการใช้ &lt;a href="https://aws.amazon.com/blogs/networking-and-content-delivery/vpc-sharing-a-new-approach-to-multiple-accounts-and-vpc-management/" rel="noopener noreferrer"&gt;VPC Sharing&lt;/a&gt; ด้วยวิธีการนี้เราสามารถใช้งานแบบ Multi Account เพื่อแยกค่าใช้จ่ายและการบริหารจัดการ โดยที่เราสามารถแชร์ VPC Subnet ร่วมกันระหว่างหลายๆ Account ได้ วิธีนี้เราจะประหยัดทั้ง ​resource พวก ​Nat Gateway และ ​VPC Endpoints รวมถึงค่า Data Transfer ภายใน AZ เดียวกันด้วย&lt;/p&gt;

&lt;h2&gt;
  
  
  11. หมั่นตรวจสอบค่าใช้จ่ายและการใช้งาน
&lt;/h2&gt;

&lt;p&gt;ใช้ &lt;a href="https://aws.amazon.com/blogs/mt/using-aws-cost-explorer-to-analyze-data-transfer-costs/" rel="noopener noreferrer"&gt;Cost Explorer ในการตรวจสอบค่าใช้บริการ Data Transfer&lt;/a&gt; เพื่อทำความเข้าใจว่ามาจากการรับส่งลักษณะไหนบ้าง&lt;br&gt;
เรายังสามารถเปิดใช้งาน &lt;a href="https://aws.amazon.com/blogs/mt/analyzing-vpc-flow-logs-got-easier-with-support-for-s3-as-a-destination/" rel="noopener noreferrer"&gt;​VPC Flow Log&lt;/a&gt; ให้บันทึก traffic flow ระหว่างภายใน VPC มาตรวจสอบรายละเอียดของการรับส่งข้อมูลในระดับ network interface ได้ด้วย&lt;/p&gt;

&lt;p&gt;หวังว่าทุกท่านสามารถนำแนวทางเหล่านี้ไปประยุกต์ใช้เพื่อลดค่าใช้จ่ายในส่วน network ได้บ้างนะครับ&lt;/p&gt;

</description>
      <category>awsthai</category>
      <category>architecture</category>
      <category>vpc</category>
      <category>datatransfer</category>
    </item>
  </channel>
</rss>
