AWS DVA-C02
Esc
↑↓เลื่อน↵เปิดescปิด28 ผลลัพธ์
20

Amazon API Gateway

Managed API hosting & integration

Integration & Messaging 11 นาที 22 คำถาม

01ภาพรวม & API Types (REST vs HTTP vs WebSocket)

Amazon API Gateway เป็น fully managed service ที่ให้เราสร้าง publish maintain monitor และ secure APIs ได้ในระดับ scale ใหญ่ ทำหน้าที่เป็น front door เข้าสู่ backend เช่น Lambda, HTTP endpoints (EC2/ALB/ภายนอก) หรือ AWS service อื่น ๆ จุดเด่นคือ serverless ไม่ต้องดูแล infrastructure, รองรับ versioning/stages, authentication, throttling, caching, API keys และ generate SDK/API specs ได้

ขนาด payload สูงสุด ที่ API Gateway รับได้คือ 10 MB และ integration timeout สูงสุดคือ 29 วินาที (เป็นเลขที่ออกสอบบ่อยมาก)

3 ประเภทของ API

REST API
ฟีเจอร์ครบที่สุด รองรับ API keys, usage plans, request/response transformation (mapping templates), caching, edge-optimized endpoints, WAF, request validation เหมาะกับ API ที่ต้องการ fine-grained control. ราคาแพงกว่า HTTP API
HTTP API
ใหม่กว่า ราคาถูกกว่า (ลดได้ถึง ~70%) latency ต่ำกว่า รองรับ proxy integration และ OIDC/OAuth2 authorization ได้ดี แต่ตัดฟีเจอร์บางอย่างออก เช่น ไม่มี mapping templates, ไม่มี API keys/usage plans, ไม่มี caching เหมาะกับ Lambda/HTTP backend ง่าย ๆ
WebSocket API
รองรับการสื่อสารแบบ two-way real-time (server push ได้) เหมาะกับ chat apps, real-time dashboards, multiplayer games ใช้ routes ที่ map ด้วย route selection expression
ฟีเจอร์REST APIHTTP API
ราคาแพงกว่าถูกกว่า (~70%)
API keys / Usage plansมีไม่มี
Mapping templates (VTL)มีไม่มี
Cachingมีไม่มี
Edge-optimized endpointมีRegional เท่านั้น
Cognito authorizerมีมี (JWT/OIDC ด้วย)
Lambda authorizerมีมี
IAM authorizerมีมี
Request validationมีไม่มี
Tips สำหรับการสอบ
ถ้าโจทย์เน้น cost-effective / low latency / proxy ง่าย ๆ เลือก HTTP API. ถ้าต้องการ API keys, usage plans, request validation, caching หรือ mapping templates ต้องใช้ REST API. ถ้าต้องการ two-way / real-time push เลือก WebSocket API

02Endpoint Types (Edge / Regional / Private)

API Gateway มี endpoint type 3 แบบ ซึ่งกำหนดว่า request จะเข้าถึง API จากที่ไหนและผ่าน infrastructure อะไร

Edge-Optimized (default สำหรับ REST API)
request ถูก route ผ่าน CloudFront Edge locations ทั่วโลก ช่วยลด latency ให้ผู้ใช้ที่กระจายตามภูมิภาคต่าง ๆ ตัว API Gateway ยังอยู่ใน region เดียว (เช่น us-east-1) แต่ใช้ CloudFront เป็นตัวกระจาย
Regional
เหมาะกับ client ที่อยู่ใน region เดียวกับ API ลด overhead ของ CloudFront สามารถ จับคู่กับ CloudFront ที่เราจัดการเอง ได้เพื่อควบคุม caching/distribution มากขึ้น
Private
เข้าถึงได้เฉพาะภายใน VPC ผ่าน Interface VPC Endpoint (ENI) เท่านั้น ใช้ resource policy กำหนดสิทธิ์การเข้าถึง เหมาะกับ internal API ที่ไม่ต้องการ expose สู่ public internet
กับดักข้อสอบ
Edge-Optimized ไม่ได้ deploy API ไปหลาย region — API ยังอยู่ region เดียว เพียงแต่ใช้ CloudFront Edge เป็นทางเข้าเพื่อลด latency. อย่าสับสนว่าเป็น multi-region. ส่วน Private endpoint เข้าถึงผ่าน VPC Interface Endpoint และต้องตั้ง resource policy ไม่งั้น request จะถูก deny

03Integration Types (Lambda Proxy/Non-Proxy, HTTP, AWS, Mock)

Integration คือวิธีที่ API Gateway ส่งต่อ request ไปยัง backend และรับ response กลับมา มี integration types หลายแบบ ต่างกันที่ระดับการ transform ข้อมูล

Lambda Proxy Integration
ส่ง request ทั้งหมด (headers, query string, path, body) เข้า Lambda เป็น input event ตามฟอร์แมตที่กำหนด และ Lambda ต้องคืน response ในฟอร์แมตเฉพาะ (statusCode, headers, body). ไม่ใช้ mapping template — เหมาะกับงานง่าย flexible สุด
Lambda Non-Proxy (Custom) Integration
ต้องตั้งค่า integration request/response mapping templates (VTL) เพื่อแปลง request ก่อนส่งเข้า Lambda และแปลง response ก่อนส่งกลับ client — ควบคุมรูปแบบข้อมูลได้ละเอียด
HTTP Integration
ส่งต่อไปยัง HTTP backend เช่น internal HTTP API, on-premises, ALB ใช้ได้ทั้งแบบ proxy และ custom (mapping template)
AWS Service Integration
เรียก AWS service action โดยตรง เช่น expose REST API ที่เขียน message ลง SQS หรือ start Step Functions workflow โดยไม่ต้องผ่าน Lambda — ลด cost และ point of failure
Mock Integration
API Gateway คืน response เองโดย ไม่ส่งไป backend ใด ๆ ใช้ทดสอบ, ทำ health check, หรือ return static response (เช่นใช้ตอบ CORS preflight)
Tips สำหรับการสอบ
โจทย์แนว 'expose API ที่เก็บข้อความลง SQS โดยไม่ใช้ Lambda เพื่อลด cost' คำตอบคือ AWS Service Integration (มักคู่กับ mapping template เพื่อแปลง request เป็น SQS SendMessage action)

04Stages, Deployments, Stage Variables & Canary

การเปลี่ยนแปลงใน API Gateway จะไม่มีผลจนกว่าจะ deploy ไปยัง stage หนึ่ง ๆ (เช่น dev, test, prod). แต่ละ stage มี invoke URL ของตัวเอง และเก็บ history ของ deployment ทำให้ rollback ได้ง่ายโดยเปลี่ยน deployment ที่ stage ชี้ไป

Stage Variables

Stage variables เปรียบเหมือน environment variables ของ API Gateway ใช้เปลี่ยนค่าตาม stage โดยไม่ต้องแก้โค้ด เช่นชี้ไป Lambda alias หรือ HTTP endpoint คนละตัวตาม stage. Use case คลาสสิก: ใช้ stage variable ชี้ Lambda alias ที่ตรงกับ stage (เช่น ${stageVariables.lambdaAlias}) เพื่อให้ prod เรียก prod alias, dev เรียก dev alias

text
// ใช้ stage variable ใน Lambda integration ARN
arn:aws:lambda:us-east-1:123456789012:function:myFunction:${stageVariables.lambdaAlias}

// ใช้ใน HTTP integration URL
http://${stageVariables.url}/resource

Canary Deployments

Canary deployment ทำได้ที่ระดับ stage โดยกำหนด % ของ traffic ให้ไปยัง canary (version ใหม่) ที่เหลือไปยัง production version เดิม เหมาะกับการทดสอบ release ใหม่กับ traffic ส่วนน้อยก่อน promote เต็ม. metrics และ logs ของ canary แยกได้ และมี stage variables เฉพาะของ canary ได้

หมายเหตุ
Canary deployment เป็น feature ของ REST API โดยทั่วไป กำหนด traffic split (เช่น 10% ไป canary) แล้วค่อย promote canary ขึ้นเป็น production เมื่อมั่นใจ

05Mapping Templates (VTL) & Request/Response Transformation

Mapping templates เขียนด้วยภาษา VTL (Velocity Template Language) ใช้แปลง/reshape ข้อมูลระหว่าง client และ backend ใช้ได้กับ non-proxy integration เท่านั้น (proxy ส่งทุกอย่างตามเดิม). ใช้ได้ทั้ง request (แปลงก่อนเข้า backend) และ response (แปลงก่อนคืน client)

  • เปลี่ยน JSON เป็น XML (SOAP) หรือกลับกัน
  • เปลี่ยนชื่อ field / renaming keys
  • filter ข้อมูลบาง field ออก
  • ดึงค่าจาก query string / path / headers มาประกอบเป็น body
  • เปลี่ยน Content-Type ของ response
  • map request ให้กลายเป็น AWS service action (เช่น SQS SendMessage)

การจะให้ mapping template ทำงาน ต้องตั้งค่า Content-Type (เช่น application/json) ใน Integration Request และ Integration Response ให้ตรง

json
## ตัวอย่าง VTL mapping template ดึงค่ามาประกอบ
#set($inputRoot = $input.path('$'))
{
  "orderId": "$input.params('orderId')",
  "customer": "$inputRoot.name",
  "region": "$context.identity.sourceIp"
}
กับดักข้อสอบ
Mapping templates ใช้ไม่ได้กับ Lambda Proxy integration และ ไม่มีใน HTTP API ทั้งสิ้น. ถ้าโจทย์ต้อง transform/reshape payload (เช่น SOAP-to-REST, JSON-to-XML) ต้องใช้ REST API + non-proxy integration + mapping template

06Caching (Per-Stage, TTL, Invalidation)

API Gateway caching ช่วยลดจำนวน request ที่ส่งไป backend ทำให้ลด latency และ load. cache เป็นการเก็บ response ของ endpoint ไว้

  • Cache ตั้งค่าที่ระดับ stage (และ override per-method ได้)
  • Default TTL = 300 วินาที, ตั้งได้ตั้งแต่ 0 ถึง 3600 วินาที (0 = ปิด cache)
  • ขนาด cache ตั้งแต่ 0.5 GB ถึง 237 GB
  • Cache มี ค่าใช้จ่าย จึงแนะนำให้เปิดเฉพาะ production
  • Cache key default มาจาก request parameters; กำหนด cache key parameters ได้

Cache Invalidation

client สามารถ invalidate (flush) cache ได้โดยส่ง header `Cache-Control: max-age=0` แต่ต้องมี IAM authorization ที่อนุญาต action InvalidateCache มิฉะนั้นใคร ๆ ก็ flush cache ได้. สามารถ flush cache ทั้ง stage ได้จาก console เช่นกัน

กับดักข้อสอบ
ถ้าไม่ตั้ง IAM policy ที่ require authorization สำหรับ cache invalidation ทุก client จะ flush cache ได้อิสระ ทำให้ backend โดน load หนัก. ต้องเพิ่ม policy ที่อนุญาต execute-api:InvalidateCache ให้เฉพาะ caller ที่ควรทำได้

07Throttling, Usage Plans & API Keys

API Gateway มี throttling หลายระดับเพื่อป้องกัน backend จาก traffic ที่มากเกิน และใช้ usage plans + API keys เพื่อ monetize/จำกัดการใช้งานต่อ customer

Account-level & Stage/Method Throttling

  • Account-level limit (soft, default ~10,000 RPS) ต่อ region — ขอเพิ่มได้
  • Burst limit default ~5,000 requests (ใช้ token bucket)
  • ตั้ง throttling per stage หรือ per method ได้
  • ถ้าเกิน limit จะได้ 429 Too Many Requests (client ควร retry แบบ exponential backoff)
  • หนึ่ง API ที่ throttle หนักอาจทำให้ทั้ง account ถูกกระทบ — ใช้ stage/method limit เพื่อป้องกัน

Usage Plans & API Keys

Usage plan กำหนด throttle (rate/burst) และ quota (จำนวน request ต่อ วัน/สัปดาห์/เดือน) ให้กับ API keys. API key เป็น string ที่ client ส่งผ่าน header `x-api-key` เพื่อระบุตัวตน customer แล้วผูกกับ usage plan. เหมาะกับการขาย API ให้ลูกค้าหลายราย โดยจำกัดโควต้าต่างกัน

Tips สำหรับการสอบ
API key เพียงอย่างเดียวไม่ใช่ authentication — มันใช้ identify/throttle/quota เท่านั้น ไม่ได้พิสูจน์ตัวตนเชิง security. ถ้าโจทย์ถาม 'จำกัดจำนวน request ต่อเดือนต่อลูกค้า + meter การใช้งาน' คำตอบคือ Usage Plan + API Keys

08Authorization (IAM/Sig v4, Cognito, Lambda Authorizer)

API Gateway รองรับการ authorize/authenticate request หลายแบบ ออกสอบบ่อยมากเรื่อง 'เลือก authorizer ตาม use case'

IAM Permissions + Sig v4
เหมาะกับ user/role ภายใน AWS หรือ application ที่มี AWS credentials. client เซ็น request ด้วย Signature v4 API Gateway ตรวจ IAM policy. ใช้ทำ resource policy ร่วมได้ (cross-account, IP filtering, VPC restriction). leverage IAM ได้เต็มที่
Cognito User Pools Authorizer
API Gateway ตรวจ token (JWT) จาก Cognito User Pool ให้อัตโนมัติ ไม่ต้องเขียนโค้ด custom. เหมาะกับ user ภายนอก (web/mobile app users). client ส่ง token ใน Authorization header. API Gateway จัดการ verify/lifecycle ของ token เอง
Lambda Authorizer (Custom Authorizer)
ใช้ Lambda function เป็นตัวตรวจ token/auth logic เอง — flexible ที่สุด รองรับ OAuth, SAML, 3rd-party auth, token แบบ custom. Lambda คืน IAM policy ที่ allow/deny. ผลลัพธ์ cache ได้ (TTL) เพื่อลดการเรียก Lambda ซ้ำ
Authorizerเหมาะกับพิสูจน์ตัวตน?Custom logic?
IAM + Sig v4AWS users/roles, internal appsใช่ (AWS creds)ผ่าน IAM/resource policy
Cognito User Poolsexternal app users (managed)ใช่ (JWT)ไม่ (จัดการให้)
Lambda Authorizer3rd-party / OAuth / custom tokenใช่ (logic เราเขียน)ใช่ เต็มที่
API Key (usage plan)metering/throttlingไม่ใช่ auth จริง-
Tips สำหรับการสอบ
จำ mapping: ผู้ใช้ภายนอก managed → Cognito User Pools authorizer; AWS internal/service-to-service → IAM + Sig v4; ต้องการ OAuth/3rd-party/token แปลก ๆ → Lambda authorizer. ถ้าต้องการ cross-account หรือ IP/VPC restriction ใช้ resource policy + IAM

09CORS, Request Validation & Gateway Responses

CORS (Cross-Origin Resource Sharing)

CORS ต้องเปิดเมื่อ browser เรียก API จาก domain ต่างจาก API. browser จะส่ง preflight request (OPTIONS) ก่อน แล้วคาดหวัง header `Access-Control-Allow-Origin`, `Access-Control-Allow-Methods`, `Access-Control-Allow-Headers` กลับมา. ใน API Gateway สามารถ enable CORS ได้จาก console (สร้าง OPTIONS method ให้อัตโนมัติ)

กับดักข้อสอบ
เมื่อใช้ Lambda Proxy integration API Gateway จะ ไม่ inject CORS headers ให้อัตโนมัติ สำหรับ actual response — Lambda function ต้องคืน header `Access-Control-Allow-Origin` เอง (แม้ preflight OPTIONS จะถูกจัดการให้ก็ตาม). นี่คือสาเหตุยอดฮิตของ CORS error ในข้อสอบ scenario

Request Validation

REST API ทำ request validation ได้ที่ระดับ API Gateway ก่อนส่งไป backend ตรวจได้ว่า required query string params / headers มีครบ และ request body ตรงตาม JSON Schema (request model) ที่กำหนด ช่วยลดการ invoke Lambda ที่ไม่จำเป็น (ลด cost) และคืน error เร็วขึ้น

Gateway Responses

Gateway Responses ใช้ปรับแต่ง response ที่ API Gateway สร้างเองเมื่อเกิด error ก่อนถึง backend (เช่น 4XX/5XX, ACCESS_DENIED, UNAUTHORIZED, THROTTLED, missing authentication, DEFAULT_4XX). สามารถ override status code, body, และเพิ่ม header (เช่น CORS headers ในกรณี error) ได้ เพื่อให้ client ได้ response ที่สม่ำเสมอ

Tips สำหรับการสอบ
อยากให้ CORS headers ปรากฏแม้ตอน error (เช่น 4XX) ต้องไปแก้ที่ Gateway Responses เพิ่ม Access-Control-Allow-Origin ใน DEFAULT_4XX/DEFAULT_5XX. และ request validation ที่ตรวจ body ต้องผูกกับ request model (JSON Schema)

10OpenAPI/Swagger Import, Logging & Key Numbers

API Gateway รองรับ import/export OpenAPI (Swagger) spec ได้ ทำให้ define API จากไฟล์ spec เดียว และ generate SDK ให้ client ภาษาต่าง ๆ ได้ (JavaScript, iOS, Android เป็นต้น). ยัง export เป็น OpenAPI 3 ได้เพื่อ documentation

Monitoring & Logging

  • CloudWatch Logs: เปิด execution logging และ access logging ต่อ stage ได้ (ปรับ log level ERROR/INFO)
  • CloudWatch Metrics: ดู CacheHitCount/CacheMissCount, Count, Latency, IntegrationLatency, 4XXError, 5XXError
  • X-Ray: เปิด tracing เพื่อดู end-to-end request และ debug latency ได้
  • 429 Too Many Requests = ถูก throttle; 504 มักมาจาก integration timeout เกิน 29s
Limit / ค่าตัวเลขที่ต้องจำ
Integration timeout (สูงสุด)29 วินาที
Payload สูงสุด10 MB
Cache TTL (default / range)300 วินาที / 0–3600 วินาที
Account throttle (soft default)~10,000 RPS
Burst (default)~5,000 requests
API key headerx-api-key
กับดักข้อสอบ
Integration timeout 29 วินาที เป็น hard limit ของ REST API. ถ้า Lambda/backend ใช้เวลานานกว่านั้น client จะได้ 504 (Gateway Timeout). งานที่ยาวกว่านี้ต้องเปลี่ยนเป็น asynchronous pattern (เช่น คืน 202 ทันทีแล้วประมวลผลเบื้องหลังด้วย SQS/Step Functions แล้ว poll/notify ผล)

คำถามทบทวน

ทดสอบความเข้าใจหัวข้อ Amazon API Gateway

22 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย

ทำแล้ว 0/22คะแนน 0
  1. 1.บริษัทต้องการสร้าง REST API ที่ cost ต่ำที่สุด, latency ต่ำ, ทำ proxy ไป Lambda แบบง่าย ๆ ไม่ต้องการ API keys, usage plans หรือ caching ควรเลือก API type ใด?

  2. 2.ทีมต้องการ expose REST API ที่รับ request แล้วเขียน message ลง SQS queue โดยตรง โดยไม่ใช้ Lambda เพื่อลด cost และจุด failure ควรใช้ integration แบบใด?

  3. 3.Application web ที่โฮสต์บน S3 (domain ต่างจาก API) เรียก API ที่ใช้ Lambda Proxy integration แล้วเจอ CORS error ทั้งที่เปิด CORS ใน console แล้ว สาเหตุน่าจะมาจากอะไร?

  4. 4.Mobile app มี user ภายนอกจำนวนมาก ต้องการ authentication ที่ AWS managed ให้ ไม่อยากเขียนโค้ด verify token เอง ควรใช้ authorizer แบบใด?

  5. 5.API ต้อง integrate กับระบบ OAuth 2.0 ของบริษัทอื่นและต้อง custom token validation logic ที่ซับซ้อน ควรเลือก authorizer ใด?

  6. 6.บริษัทขาย API ให้ลูกค้าหลายราย ต้องการจำกัดจำนวน request ต่อเดือนต่อลูกค้าและ throttle rate ต่างกันตามแพ็กเกจ ควรใช้ฟีเจอร์ใด?

  7. 7.Lambda function ที่ทำงานเบื้องหลัง API Gateway (REST API) ใช้เวลานานราว 45 วินาที ทำให้ client ได้ error อะไร และควรแก้อย่างไร?

  8. 8.ต้องการเปิด caching ที่ API Gateway เพื่อลด load ที่ backend ค่า default TTL ของ cache คือเท่าใด และตั้งได้ในช่วงใด?

  9. 9.ทีมพบว่า client บางรายส่ง header Cache-Control: max-age=0 มา flush cache ได้อิสระทำให้ backend โดน load หนัก ควรทำอย่างไร?

  10. 10.ต้องการให้ API Gateway ตรวจสอบว่า request body ตรงตามโครงสร้างที่กำหนดและมี required query string ครบ ก่อนส่งไป Lambda เพื่อลดการ invoke ที่ไม่จำเป็น ควรใช้อะไร?

  11. 11.ต้องการให้ CORS headers ปรากฏใน response แม้ในกรณีที่เกิด error 4XX จาก API Gateway เอง (เช่น UNAUTHORIZED) ควรปรับที่ไหน?

  12. 12.ทีมต้องการ deploy version ใหม่ของ API แล้วส่ง traffic แค่ 10% ไปทดสอบก่อน promote เต็ม ควรใช้ฟีเจอร์ใดของ API Gateway?

  13. 13.ต้องการให้ API Gateway integration ชี้ไป Lambda alias ที่ตรงกับ stage (prod ชี้ prod alias, dev ชี้ dev alias) โดยไม่ต้องแก้ config ซ้ำ ควรใช้อะไร?

  14. 14.API ต้องเข้าถึงได้เฉพาะภายใน VPC ของบริษัทเท่านั้น ห้าม expose สู่ public internet ควรใช้ endpoint type ใด?

  15. 15.ระบบ legacy ต้องการให้ REST API รับ JSON จาก client แล้วแปลงเป็น XML (SOAP) ก่อนส่งไป backend และแปลง response กลับเป็น JSON ควรใช้อะไร และ API type ใด?

  16. 16.client หลายรายเริ่มได้ HTTP 429 จาก API Gateway สาเหตุคืออะไร และ client ควรทำอย่างไร?

  17. 17.Service-to-service ภายใน AWS ต้องการเรียก API Gateway โดยใช้ AWS credentials ที่มีอยู่และอยากควบคุมสิทธิ์ด้วย IAM รวมถึงจำกัดการเข้าถึงจาก IP/VPC เฉพาะ ควรใช้อะไร?

  18. 18.ขนาด payload สูงสุดที่ API Gateway รองรับต่อ request คือเท่าใด?

  19. 19.ทีมต้องการ generate client SDK สำหรับ iOS/Android/JavaScript และ define API จาก spec ไฟล์เดียว ควรใช้ฟีเจอร์ใดของ API Gateway?

  20. 20.ใน metric ของ API Gateway ที่ใช้ดู latency ฝั่ง backend integration โดยเฉพาะ (ไม่รวม overhead ของ API Gateway) คือ metric ใด?

  21. 21.ต้องการ return static/mock response สำหรับการทดสอบ frontend โดยยังไม่มี backend จริง ควรใช้ integration แบบใด?

  22. 22.ข้อใดอธิบาย API key ใน API Gateway ได้ถูกต้องที่สุด?