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

AWS Lambda

Serverless functions

Compute 11 นาที 25 คำถาม

01พื้นฐาน Lambda (Serverless Functions)

AWS Lambda คือบริการ serverless ที่รันโค้ดเป็นฟังก์ชันแบบ event-driven โดยไม่ต้องจัดการ server เอง เราเขียนแค่โค้ด Lambda จัดการ provisioning, scaling, patching และ availability ให้ทั้งหมด จุดเด่นคือ scale อัตโนมัติ (เพิ่ม instance ตาม load) และ จ่ายตามการใช้งานจริง (pay per use) ไม่มีค่าใช้จ่ายเมื่อไม่มี request

  • Event-driven: ฟังก์ชันถูก trigger โดย event จากบริการอื่น เช่น S3, API Gateway, DynamoDB Streams
  • Stateless: แต่ละ invocation เป็นอิสระ ห้ามพึ่ง state ค้างใน memory ระหว่าง invocation (ยกเว้น execution context reuse ที่ไม่การันตี)
  • Short-lived: รันสูงสุด 15 นาที ต่อ invocation ไม่เหมาะกับงานยาว ๆ (งานยาวใช้ ECS/Fargate/Batch)
  • Integrated: ผสานกับบริการ AWS เกือบทุกตัวเป็น trigger หรือ destination
Lambda vs EC2/Fargate
ถ้าโจทย์เน้น 'no server management', 'cost only when running', 'event-driven', 'auto-scaling instantly' ให้เลือก Lambda แต่ถ้าโจทย์ต้องรันนานเกิน 15 นาที, ต้องการ control OS, หรือ workload ทำงานต่อเนื่องตลอดเวลา ให้พิจารณา ECS/Fargate/EC2 แทน

02Runtimes, Container Images & Deployment Package

Lambda รองรับ managed runtimes หลายภาษา ได้แก่ Node.js, Python, Java, .NET (C#), Ruby, Go และยังรองรับ Custom Runtime ผ่าน Lambda Runtime API (เช่น Rust, PHP) โดย bootstrap เองได้ นอกจากนี้ยัง deploy เป็น Container Image ได้สูงสุด 10 GB (ต้อง implement Lambda Runtime API ใน image)

Deployment Package Limits ที่ต้องจำ

  • 50 MB = ขนาด zip ที่ upload โดยตรง (direct upload)
  • 250 MB = ขนาดหลัง unzip รวม layers (ไฟล์โค้ด + dependencies + layers)
  • Container image สูงสุด 10 GB เก็บใน Amazon ECR
  • ถ้าไฟล์เกิน 50 MB ต้อง upload ผ่าน Amazon S3 ก่อน
รูปแบบSize Limitใช้เมื่อ
Zip direct upload50 MBโค้ดเล็ก deploy ตรงผ่าน console/CLI
Zip via S3250 MB (unzipped)โค้ด + dependencies ขนาดกลาง
Container image (ECR)10 GBdependency ใหญ่, ML model, ใช้ Docker workflow เดิม
กับดักข้อสอบ: 50 vs 250 MB
ข้อสอบชอบถามแยก 50 MB (zip ที่ upload ตรง) กับ 250 MB (รวม unzipped + layers) อย่าสับสน ถ้าเจอ deployment package โตเกิน 50 MB คำตอบที่ถูกมักเป็น 'upload ผ่าน S3' หรือใช้ container image (10 GB) ถ้าโตมาก

03Triggers & Invocation Types (Sync / Async / Event Source Mapping)

การ invoke Lambda แบ่งเป็น 3 รูปแบบ ซึ่งเป็นหัวข้อที่ออกสอบบ่อยมาก ต้องแยกให้ออกว่าแต่ละ trigger เป็นแบบไหน เพราะพฤติกรรม retry และ error handling ต่างกัน

1) Synchronous Invocation
Caller รอผลลัพธ์ทันที (request-response) error ถูกส่งกลับให้ caller จัดการ retry เอง ตัวอย่าง trigger: API Gateway, Application Load Balancer (ALB), Cognito, Lambda function URLs, การเรียกผ่าน CLI/SDK โดยตรง, Step Functions
2) Asynchronous Invocation
Event เข้า internal queue ของ Lambda แล้ว return ทันที (caller ไม่รอผล) Lambda retry อัตโนมัติ 2 ครั้ง (รวม 3 ครั้ง) ส่ง failure ไปที่ DLQ หรือ Destinations ได้ ตัวอย่าง trigger: S3, SNS, EventBridge, CloudWatch Events/Logs
3) Event Source Mapping (Poll-based)
Lambda poll record จาก stream/queue เอง แล้วเรียกฟังก์ชันแบบ synchronous (เป็น batch) ใช้กับ Kinesis Data Streams, DynamoDB Streams, SQS (standard & FIFO), Amazon MQ, Kafka/MSK การ retry ขึ้นกับชนิด source

04Event Source Mapping เจาะลึก (Streams vs Queues)

Event Source Mapping (ESM) มีพฤติกรรมต่างกันระหว่าง stream-based (Kinesis, DynamoDB Streams) กับ queue-based (SQS) ซึ่งเป็นจุดที่ข้อสอบชอบหลอก

ประเด็นKinesis / DynamoDB StreamsSQS
การประมวลผลอ่านตาม shard, ordered ภายใน shardไม่มีลำดับ (FIFO รักษาลำดับ per group)
Retry บน errorretry ทั้ง batch จนสำเร็จหรือ record หมดอายุ (blocked!)record กลับเข้า queue หลัง visibility timeout
Concurrency1 Lambda ต่อ shard (เพิ่มด้วย parallelization factor สูงสุด 10)scale ตาม batch / queue depth
Error handlingใช้ on-failure destination, bisect batch, max retry/ageใช้ DLQ ที่ตั้งบน SQS เอง (ไม่ใช่ Lambda DLQ)
กับดัก: SQS DLQ ตั้งที่ไหน
เมื่อใช้ SQS + Lambda การตั้ง DLQ ต้องตั้งบน SQS queue เอง (redrive policy) ไม่ใช่บน Lambda เพราะ Lambda DLQ/Destinations ใช้กับ asynchronous invocation เท่านั้น ส่วน SQS เป็น event source mapping ข้อสอบชอบใช้ตัวลวงให้ตั้ง DLQ ที่ Lambda
Tips สำหรับการสอบ
Stream-based (Kinesis/DynamoDB) ถ้า record poison pill จะ block ทั้ง shard จน record หมดอายุ แก้ด้วย Bisect Batch on Function Error, Maximum Retry Attempts, Maximum Record Age และส่งของเสียไป on-failure destination (SQS/SNS)

05Configuration: Memory, CPU, Timeout, /tmp, Env Vars

การตั้งค่า Lambda ที่ต้องจำตัวเลขให้แม่น เพราะออกสอบตรง ๆ บ่อย

  • Memory: 128 MB ถึง 10,240 MB (10 GB) ปรับเป็น step ละ 1 MB
  • CPU เพิ่มขึ้นตาม memory โดยอัตโนมัติ (proportional) — ที่ ~1,769 MB ได้ 1 vCPU เต็ม ถ้าฟังก์ชัน CPU-bound ให้ เพิ่ม memory เพื่อเพิ่ม CPU
  • Timeout: default 3 วินาที, สูงสุด 900 วินาที (15 นาที)
  • /tmp ephemeral storage: default 512 MB, ปรับได้สูงสุด 10,240 MB (10 GB) ข้อมูลใน /tmp อยู่แค่ชั่วคราว (อาจ reuse ข้าม invocation แต่ไม่การันตี)
  • Environment variables ใช้ส่ง config เข้าฟังก์ชัน เข้ารหัสด้วย KMS ได้ (at rest เข้ารหัสด้วย default KMS key อยู่แล้ว; encrypt ฝั่ง client/CMK เพิ่มได้)
Tips สำหรับการสอบ: เพิ่ม CPU = เพิ่ม Memory
ถ้าโจทย์บอกฟังก์ชันรันช้าเพราะ CPU-bound (เช่น คำนวณหนัก, compress) คำตอบที่ถูกคือ เพิ่ม memory เพราะ CPU/Network จะ scale ตาม memory บางครั้งเพิ่ม memory แล้วฟังก์ชันเสร็จเร็วขึ้นจน ค่าใช้จ่ายรวมลดลง ด้วย
กับดัก: เก็บไฟล์ใหญ่ / state ถาวร
/tmp เป็น ephemeral ห้ามใช้เก็บ state ถาวรหรือแชร์ข้ามฟังก์ชัน ถ้าต้องการ shared persistent storage ให้ใช้ Amazon EFS (mount ผ่าน VPC); ถ้าเก็บไฟล์ object ให้ใช้ S3

06IAM Execution Role, Resource-based Policy & Env Encryption

Lambda มี permission สองด้านที่ต้องแยกให้ออก: Execution Role (สิ่งที่ฟังก์ชันทำได้กับบริการอื่น) และ Resource-based Policy (ใครได้รับอนุญาตให้ invoke ฟังก์ชัน)

Execution Role (IAM Role)
Role ที่ Lambda assume เพื่อเข้าถึงบริการ AWS อื่น เช่น เขียน log ลง CloudWatch (ต้องมี AWSLambdaBasicExecutionRole), อ่าน DynamoDB Stream, เข้าถึง S3 ใช้สำหรับ outbound จากฟังก์ชัน
Resource-based Policy
นโยบายที่ติดกับฟังก์ชันเอง กำหนดว่า บริการ/บัญชีอื่นใด invoke ฟังก์ชันได้ เช่น เมื่อ S3 หรือ API Gateway จะ trigger Lambda ต้องมี resource-based policy อนุญาต (ใช้ lambda:InvokeFunction ผ่าน principal ของบริการนั้น)
bash
# เพิ่ม permission ให้ API Gateway invoke Lambda (resource-based policy)
aws lambda add-permission \
  --function-name my-function \
  --statement-id apigw-invoke \
  --action lambda:InvokeFunction \
  --principal apigateway.amazonaws.com \
  --source-arn "arn:aws:execute-api:us-east-1:123456789012:abcd1234/*/GET/items"
Tips: Streams ต้องใช้ Execution Role
เมื่อใช้ event source mapping (Kinesis/DynamoDB Streams/SQS) Lambda เป็นฝ่าย poll เอง จึงต้องให้สิทธิ์ผ่าน execution role (เช่น dynamodb:GetRecords, sqs:ReceiveMessage) ไม่ใช่ resource-based policy ส่วน trigger แบบ push (S3/SNS/API GW) ใช้ resource-based policy

07Concurrency: Reserved, Provisioned & Throttling

Concurrency = จำนวน execution ที่รันพร้อมกัน ณ ขณะหนึ่ง ต่อ region ทุกบัญชีมี default account concurrency limit = 1,000 (ขอเพิ่มได้ผ่าน support) ถ้าเกิน limit จะถูก throttle (error 429 TooManyRequestsException)

Reserved Concurrency
จองโควต้า concurrency ให้ฟังก์ชันหนึ่ง ๆ — รับประกันว่ามีให้ใช้ และ จำกัดเพดานสูงสุด ของฟังก์ชันนั้นด้วย ป้องกันไม่ให้ฟังก์ชันเดียวกินโควต้าทั้งบัญชี (ดึงมาจาก unreserved pool ของบัญชี ไม่มีค่าใช้จ่ายเพิ่ม)
Provisioned Concurrency
เตรียม execution environment ให้ warm พร้อมใช้ล่วงหน้า กำจัด cold start ได้ (latency ระดับ double-digit ms) เหมาะกับ workload ที่ต้องการ latency คงที่ — มีค่าใช้จ่ายเพิ่ม ตั้งบน alias/version ได้ และใช้ Application Auto Scaling ปรับได้
กับดัก: throttle เพราะ async vs sync
เมื่อ throttle เกิดขึ้น: synchronous จะคืน error 429 ให้ caller ทันที, ส่วน asynchronous Lambda จะ retry ให้และเข้าคิว (สูงสุด ~6 ชั่วโมง) ก่อนทิ้งไป event source mapping (stream) จะรอแล้วลองใหม่ ระวังโจทย์ที่บอกว่า throttle แล้ว 'event หาย' — async มี retry
Tips: ตั้ง Reserved = 0 เพื่อหยุดฟังก์ชัน
ถ้าต้องการ หยุดฟังก์ชันชั่วคราว (เช่น สงสัยมี bug) ตั้ง reserved concurrency = 0 จะ throttle ทุก invocation ทันที เป็นวิธี 'kill switch' ที่ออกสอบบ่อย

08Cold Start, SnapStart & Lambda Layers

Cold start เกิดเมื่อ Lambda สร้าง execution environment ใหม่: โหลดโค้ด + รัน init code (นอก handler) ทำให้ invocation แรกช้า การ invoke ถัด ๆ ที่ reuse environment เดิมเรียก warm start ซึ่งเร็วกว่ามาก

วิธีลด Cold Start

  • Provisioned Concurrency — เตรียม environment warm ไว้ล่วงหน้า (ใช้ได้ทุก runtime, มีค่าใช้จ่าย)
  • SnapStart — ถ่าย snapshot ของ environment ที่ init แล้วตอน publish version แล้ว resume จาก snapshot (ไม่มีค่าใช้จ่ายเพิ่มสำหรับ Java), ปัจจุบันรองรับ Java 11+, Python 3.12+, .NET 8+
  • ลดขนาด dependencies / ย้าย init code ออกนอก hot path
  • เลือก runtime ที่ init เร็ว
กับดัก: SnapStart ใช้กับอะไรไม่ได้
SnapStart ใช้ร่วมกับ Provisioned Concurrency ไม่ได้, ใช้กับ EFS, ephemeral storage > 512 MB, container image ไม่ได้ และต้องเป็น published version/alias เท่านั้น (ใช้กับ $LATEST ไม่ได้) นอกจากนี้ระวังปัญหา uniqueness (random seed/connection ถูก snapshot ค้างไว้)

Lambda Layers

Lambda Layers ใช้แยก dependencies / libraries / custom runtime ออกจากโค้ดฟังก์ชัน เพื่อ reuse ข้ามหลายฟังก์ชัน และทำให้ deployment package เล็กลง ใช้ได้สูงสุด 5 layers ต่อฟังก์ชัน และนับรวมในลิมิต 250 MB unzipped

09Versions, Aliases, Destinations & DLQ

Versions = snapshot ของโค้ด+config ที่ immutable เมื่อ publish จะได้เลขเวอร์ชัน (1,2,3...) ส่วน $LATEST เป็น version ที่แก้ไขได้ (mutable) Aliases = pointer ชี้ไปยัง version (เช่น prod, dev) ช่วยทำ canary / weighted deployment ได้

bash
# Canary deployment: alias prod ส่ง 90% ไป v1, 10% ไป v2
aws lambda update-alias \
  --function-name my-function \
  --name prod \
  --function-version 1 \
  --routing-config '{"AdditionalVersionWeights": {"2": 0.1}}'
  • Alias ชี้ไป $LATEST ไม่ได้ และ alias ไม่สามารถชี้ไปยัง alias อื่น (no alias chaining)
  • Weighted alias ใช้กับ traffic shifting (canary/linear) มักใช้คู่ CodeDeploy เพื่อ shift อัตโนมัติพร้อม rollback ตาม CloudWatch Alarm

Destinations vs DLQ (async only)

ประเด็นLambda DestinationsDLQ (Dead Letter Queue)
ใช้กับasync invocation + event source mapping (stream)async invocation (และ ESM ผ่าน destination)
ปลายทางได้SQS, SNS, Lambda, EventBridgeSQS, SNS เท่านั้น
บันทึก success ได้ไหมได้ (onSuccess + onFailure)ไม่ได้ (failure เท่านั้น)
แนวทาง AWSแนะนำให้ใช้ (ใหม่กว่า, ข้อมูลครบกว่า)วิธีเดิม
Tips: Destinations ใหม่กว่า DLQ
AWS แนะนำ Destinations มากกว่า DLQ เพราะรองรับ onSuccess ด้วย, ปลายทางหลากหลายกว่า (รวม EventBridge/Lambda) และมี metadata เกี่ยวกับ execution ครบกว่า ถ้าโจทย์ถาม 'best practice' ให้เลือก Destinations

10Lambda in VPC, RDS Proxy, EFS & Lambda@Edge

โดย default Lambda รันใน VPC ที่ AWS จัดการ (เข้าถึง internet ได้ แต่เข้าถึง resource ใน private VPC ของเราไม่ได้) ถ้าต้องเข้าถึง RDS/ElastiCache/private resource ต้อง config ให้ Lambda รันใน VPC ของเรา (ระบุ subnet + security group) Lambda จะสร้าง ENI ใน subnet นั้น

กับดัก: Lambda ใน VPC ไม่มี internet
เมื่อวาง Lambda ใน VPC ของเรา มันจะ เสีย default internet access ถ้าต้องเรียก internet/public AWS API ต้องวางใน private subnet + NAT Gateway (public subnet + IGW ใช้ไม่ได้กับ Lambda เพราะ ENI ไม่มี public IP) หรือใช้ VPC Endpoints สำหรับเข้าถึงบริการ AWS โดยไม่ออก internet
RDS Proxy
Lambda scale เร็วมากจนเปิด DB connection ท่วม (connection storm) RDS Proxy ช่วย pool และ reuse connection ลดภาระ DB, รองรับ IAM authentication และเพิ่ม failover เร็วขึ้น ต้องเข้าถึงผ่าน VPC (RDS Proxy ไม่ public)
Amazon EFS
Mount EFS เข้า Lambda เพื่อ shared persistent file system (ผ่าน EFS Access Point) ต้องอยู่ใน VPC เดียวกัน เหมาะกับ ML model ขนาดใหญ่หรือ data ที่หลายฟังก์ชันใช้ร่วม ระวัง connection burst limit ของ EFS
Lambda@Edge
รันฟังก์ชันที่ CloudFront edge locations ใกล้ผู้ใช้ ใช้แก้/ปรับ request-response 4 จุด: Viewer Request, Origin Request, Origin Response, Viewer Response เหมาะกับ A/B testing, header manipulation, auth ที่ edge (สำหรับงานเบา ๆ ที่ edge ดู CloudFront Functions)

11Pricing & สรุปตัวเลขที่ต้องจำ

Lambda คิดเงินจาก (1) จำนวน request และ (2) duration x memory (GB-seconds) ปัดขึ้นทีละ 1 ms มี free tier: 1 ล้าน request/เดือน และ 400,000 GB-seconds/เดือน — ฟังก์ชันที่จัดสรร memory มากจะคิดเงินต่อ ms แพงกว่า แต่ถ้ารันเสร็จเร็วลงอาจถูกลงรวม

  • Memory: 128 MB – 10,240 MB (10 GB)
  • Timeout: max 900 วินาที (15 นาที), default 3 วินาที
  • /tmp ephemeral: 512 MB default – 10,240 MB max
  • Deployment package: 50 MB (zip direct) / 250 MB (unzipped + layers) / 10 GB (container image)
  • Layers: สูงสุด 5 ต่อฟังก์ชัน
  • Concurrency: default 1,000 ต่อ region/account
  • Async retry: 2 ครั้ง (รวม 3); event อยู่ในคิวสูงสุด ~6 ชั่วโมง
  • Environment variables: รวมทุกตัวสูงสุด 4 KB
Tips สรุปก่อนสอบ
จำให้แม่น: 15 นาที / 10 GB memory / 10 GB tmp / 10 GB container / 50-250 MB package / 1000 concurrency / async retry 2 ครั้ง ตัวเลขเหล่านี้ออกสอบตรง ๆ และเป็นตัวลวงให้สลับกันบ่อยที่สุด

คำถามทบทวน

ทดสอบความเข้าใจหัวข้อ AWS Lambda

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

ทำแล้ว 0/25คะแนน 0
  1. 1.บริษัทมีฟังก์ชัน Lambda ที่ทำงานหนักด้าน CPU (image processing) และทำงานช้า ทีมต้องการให้เร็วขึ้น วิธีใดเหมาะสมที่สุด?

  2. 2.ฟังก์ชัน Lambda ถูก trigger โดย Amazon S3 (asynchronous) บางครั้งประมวลผลล้มเหลว ทีมต้องการเก็บ event ที่ fail ไว้ตรวจสอบภายหลัง ควรตั้งค่าอะไร?

  3. 3.ระบบใช้ SQS standard queue เป็น event source mapping ของ Lambda ต้องการให้ message ที่ประมวลผลไม่สำเร็จหลายครั้งไปเก็บที่อื่น ควรทำอย่างไร?

  4. 4.ฟังก์ชัน Lambda เขียนด้วย Java มี cold start สูงเพราะ framework โหลดนาน ทีมต้องการลด latency โดยไม่เพิ่มค่าใช้จ่ายมาก ควรใช้อะไร?

  5. 5.ข้อใดถูกต้องเกี่ยวกับการใช้ SnapStart ร่วมกับฟีเจอร์อื่น?

  6. 6.deployment package ของ Lambda (zip) มีขนาด 120 MB ทีมพยายาม upload ผ่าน console โดยตรงแต่ล้มเหลว ควรทำอย่างไร?

  7. 7.ฟังก์ชัน Lambda ต้องเข้าถึง Amazon RDS ที่อยู่ใน private subnet ภายใน VPC แต่ปัจจุบันเชื่อมต่อไม่ได้ ควรทำอย่างไร?

  8. 8.หลังจากวาง Lambda ใน VPC แล้ว ฟังก์ชันไม่สามารถเรียก external API บน internet ได้ ควรแก้อย่างไร?

  9. 9.ทีมต้องการป้องกันไม่ให้ฟังก์ชัน Lambda หนึ่งใช้ concurrency จนกินโควต้าของฟังก์ชันอื่นทั้งบัญชี ควรตั้งค่าอะไร?

  10. 10.ระบบ web API ที่ใช้ Lambda ต้องการ latency ที่คงที่ ไม่มี cold start ในช่วง traffic peak ที่คาดการณ์ได้ ควรใช้อะไร?

  11. 11.ทีมต้องการ deploy เวอร์ชันใหม่ของ Lambda โดยค่อย ๆ ส่ง traffic ไปเวอร์ชันใหม่ 10% และที่เหลือไปเวอร์ชันเก่า เพื่อทดสอบก่อน rollout เต็ม ควรใช้อะไร?

  12. 12.ข้อใดอธิบาย Execution Role ของ Lambda ได้ถูกต้อง?

  13. 13.Lambda ประมวลผล record จาก Kinesis Data Stream แต่มี record เสีย (poison pill) ทำให้ batch fail ซ้ำ ๆ และ block การประมวลผล shard ทั้งหมด ควรแก้อย่างไร?

  14. 14.ทีมสงสัยว่าฟังก์ชัน Lambda มี bug ร้ายแรงและต้องการหยุดการ invoke ทันทีโดยไม่ลบฟังก์ชัน ควรทำอย่างไร?

  15. 15.ฟังก์ชัน Lambda จำนวนมาก scale พร้อมกันจนเปิด connection ไปยัง RDS มากเกินไป (connection exhaustion) ควรใช้บริการใด?

  16. 16.ข้อใดคือลิมิตที่ถูกต้องของ Lambda?

  17. 17.ทีมต้องการ share library code (เช่น utility, SDK เวอร์ชันเฉพาะ) ระหว่างหลายฟังก์ชัน Lambda เพื่อลดขนาด package และ reuse ควรใช้อะไร?

  18. 18.ฟังก์ชัน Lambda ถูก invoke แบบ asynchronous ผ่าน SNS และเกิด throttle ชั่วคราว ข้อใดเกิดขึ้น?

  19. 19.ฟังก์ชัน Lambda ต้องการ shared persistent file system ที่หลายฟังก์ชันเข้าถึงไฟล์ ML model ขนาดใหญ่ร่วมกันได้ ควรใช้อะไร?

  20. 20.ทีมต้องการ run โค้ดเพื่อปรับแต่ง HTTP header ของ request ที่ CloudFront edge ใกล้ผู้ใช้ทั่วโลก ควรใช้อะไร?

  21. 21.เมื่อ S3 ต้อง trigger Lambda function ระบบต้องมีการตั้งค่าด้าน permission อย่างไรจึงจะทำงานได้?

  22. 22.ทีมต้องการ deployment package ที่มี dependency ขนาดใหญ่มาก (เช่น ML libraries หลาย GB) ที่เกินลิมิต zip ปกติ ควรใช้รูปแบบ deploy ใด?

  23. 23.ข้อใดอธิบายความแตกต่างระหว่าง Lambda Destinations กับ DLQ ได้ถูกต้องที่สุด?

  24. 24.ฟังก์ชัน Lambda เก็บข้อมูล secret ใน environment variables ทีม security ต้องการให้มั่นใจว่าเข้ารหัสและควบคุมการเข้าถึง key ได้เอง ควรทำอย่างไร?

  25. 25.API Gateway เรียก Lambda แบบ synchronous และฟังก์ชันเกิด throttle เพราะ concurrency เต็ม ผู้ใช้จะได้รับอะไร และควรเข้าใจอย่างไร?