Amazon API Gateway

  • Support Websocket
  • Hỗ trợ API version (như v1, v2)
  • Hỗ trợ nhiều ENV như dev, test, prod…
  • Hỗ trợ Authenticaiton and authorization
  • Hỗ trợ tạo API Key
  • Import từ Swagger/OpenAPI
  • Transform + Validate request/response
  • Generate SDK + API Spec
  • Cache API

Integrate Type

  • MOCK: return response mà không cần call đến backend
  • HTTP / AWS (Lambda & AWS Services):
    • Phải config cả request/response
    • Dùng mapping template để map data từ request/response
  • AWS_PROXY (Lambda Proxy):
    • Input request sẽ được gửi đến Lambda
    • Không sử dụng mapping template
  • HTTP_PROXY
    • Không sử dụng mapping template
    • Input request sẽ được gửi đến endpoint
    • Có thể add Header nếu cần thiết

Mapping Template

  • Modify request/response, query string, body
  • Add header
  • Sử dụng VTL (Velocity Template Language) để for, if…
  • Xoá data thừa nếu cần
  • Content Type phải là application/json hoặc application/xml

Note: Có thể chuyển đổi JSON qua lại với XML để sử dụng với SOAP

Endpoint Type

  • Edge-Optimized (default): User truy cập thông qua CloudFront Edge location
  • Regional: Không sử dụng CloudFront Edge trực tiếp, nhưng có thể kết hợp cùng CloudFront để có nhiều option hơn
  • Private: Sử dụng ENI (Interface VPC Endpoint)

Security

  • Authentication
    • IAM Role (Khi dùng EC2, ECS… các service khác của AWS có thể dùng Role)
    • Cognito (Mobile,Web…)
    • Custom Authorizer (Lambda)
  • Custom Domain HTTPS: Tích hợp cùng ACM
    • SSL phải ở us-east-1 nếu sử dụng Edge-Optimized
    • SSL phải cùng region nếu sử dụng Regional
    • Phải setting CNAME/Alias

Deployment Stage

  • Các thay đổi trên endpoint chỉ được phản ánh khi deploy lại
  • Có thể tạo nhiều stage, naming khác nhau (dev, test, prod, v1, v2…)
  • Mỗi stage có config parameter riêng
    • Cache
    • Throttling
    • WAF
    • Log/Tracing
  • Stage có thể rollback

Stage Variable

  • Giống biến môi trường cho API Gateway
  • Sử dụng trong trường hợp cần thay đổi value config thường xuyên khác nhau
  • Có thể sử dụng ở nhiều nơi
    • Lambda function ARN
    • HTTP Endpoint
    • Parameter mapping template
  • Use case
    • Sử dụng trong http endpoint (/dev, /test, /v1, /v2…..)
    • Sử dụng làm parameter cho Lambda function qua Mapping template (object “context”)
  • Format: ${stageVariable.VariableName}

Canary Deployments

  • Send % request tới các endpoint khác nhau để đánh giá, debug xem có vấn đề gì không rồi chuyển toàn bộ sang endpoint mới hoặc rollback nếu cần.
  • Có setting Stage variable và Cache cho Canary
  • Khi deploy đến 1 Stage có Canary, bản chất chỉ deploy đến Canary. Sau khi test xong không có vấn đề gì, cần Promote Canary để deploy lên Stage chính
    • Update Stage chính từ Canary
    • Update Stage Variable sang Stage chính
    • Set Canary Percentage về 0%

Request validation

  • Max 400 error gửi lại cho client 1 request
  • Check URI, query string, header
  • Có thể config json Schema để validate request payload
  • Setup validation bằng cách import file OpenAPI definition

Catching

  • Default 300s, min 0s, max 3600s
  • Define theo Stage, mỗi stage 1 setting cache riêng
  • Có thể override setting cho method bất kỳ
  • Capacity từ 0.5GB – 237GB
  • Khi cần invalid cache thì có thể thực hiện từ console, hoặc set Cache- Control: max-age=0, với điều kiện có IAM authorization phù hợp khi setting, hoặc có thể không cần authen, nhưng không recommend

Usage Plan + API Key

  • Usage Plan
    • Ai có thể access các API đã deploy
    • Config Rate Limit
    • Sử dụng API key để xác định client nào đang sử dụng
    • Config throttling limtit và quota limit
  • API Key:
    • alphanumeric string
    • Có thể sử dụng cùng Usage plan
    • Có thể config throttling limit, quota limit

 Monitoring, Logging and Tracing

  • Log
    • Log request/response body
    • Define trong mỗi stage (ERROR, DEBUG, INFO)
    • Có thể override setting cho mỗi API
  • Metric
    • Define theo stage
    • Có thể enable detailed metric
    • Metric hữu dụng khi enable cache: CacheHitCount & CacheMissCount
    • IntegrationLatency: Thời gian backend response tới API Gateway
    • Latency: thời gian từ lúc API nhận request tới response cho client
    • 4XXError + 5XXError
  • Tích hợp cùng X-Ray

Throttling

  • Max 10.000 request/s, có thể request tăng
  • Error 429 nếu vượt quá
  • Nên set Stage limit & Method limit để giới hạn

CORS

  • Khi sử dụng cùng proxy, cần set các header liên quan tới CORS ở backend
  • Khi không sử dụng proxy, các header sẽ được lấy từ setting API Gateway

Authentication and Authorization

  • IAM (Identity base Policy hoặc Resource base Policy của API Gateway)
    1. Tạo Policy và attach to User/Role
    2. User/Role gửi “Sig V4” trong header tới API Gateway
    3. API Gateway check và xử lý tiếp request
  • Cognito
    • Không cần implement gì thêm
  • Lambda Authorizer
    • Sử dụng Lambda để custom authorizer
    • VD như JWT, Oauth, connect với bên thứ 3…
    • Sử dụng header, query string để gửi thông tin tới function
    • Lambda phải return IAM Policy để authen, kết quả sẽ được cache (recommend)

REST API vs HTTP API

HTTP API

  • Không sử dụng data mapping
  • Support OIDC, OAuth2, support CORS
  • Không có Usage Plan và API Key

REST API

Tất cả các tính năng trên trừ OIDC, OAuth2

WebSocket

  • Connection URL
    • POST: Gửi message tới client
    • GET: Lấy thông tin connection status
    • DELETE: disconnect client
  • Routing
    • Mỗi action trên socket sẽ được handle bởi backend tương ứng bằng route
    • Sử dụng route selection để chọn target backend, VD: $request.body.action (“action” là attribute trong body)
    • Nếu không có route nào được chỉ định thì send tới $default

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *