ЁЯПл The SchoolтА║ЁЯкк AWSтА║ЁЯОЯя╕П рдзрдбрд╛ 25 тАФ API Gateway: APIs рд╕рд╛рдареА front desk
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯОЯя╕П рдзрдбрд╛ 25 тАФ API Gateway: APIs рд╕рд╛рдареА front desk

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 25 рдкреИрдХреА рдзрдбрд╛ 25 тАФ рд╢реЗрд╡рдЯрдЪрд╛ рдзрдбрд╛! ЁЯОУ ┬╖ рдорд╛рдЧреАрд▓: lesson-24-waf-shield


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рд╕рдЧрд│реЗ 25 рдзрдбреЗ тАФ рд╕рдВрдкреВрд░реНрдг course. рдирдХрд╛рд╢рд╛рд╡рд░рдЪрд╛ рд╢реЗрд╡рдЯрдЪрд╛ рдбрдмрд╛ рдореНрд╣рдгрдЬреЗ рддреБрдордЪреА apps рд╕рдЧрд│реНрдпрд╛рдд рдЬрд╛рд╕реНрдд рдЬреНрдпрд╛рдЪреНрдпрд╛рд╢реА рдмреЛрд▓рддреАрд▓ рддреЛ. рдЦрд░реА file:

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

Reception (ALB) browsers рдЪреНрдпрд╛ рдЧрд░реНрджреАрд╕рд╛рдареА рдмрд╛рдВрдзрд▓реЗрд▓реЗ рдЖрд╣реЗ. API Gateway ЁЯОЯя╕П рд╣реЗ рд╡реЗрдЧрд│реЗ front desk рдЖрд╣реЗ, programs рдиреА programs рдирд╛ call рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмрд╛рдВрдзрд▓реЗрд▓реЗ:

рджреЛрди рдкреНрд░рдХрд╛рд░: HTTP API (рдирд╡рд╛, рд╕реНрд╡рд╕реНрдд, рдЬрд▓рдж тАФ Lambda/REST-рд╕рд╛рд░рдЦреНрдпрд╛ рдХрд╛рдорд╛рд╕рд╛рдареА default) рдЖрдгрд┐ REST API (рдЬреБрдирд╛, рдЬрд╛рд╕реНрдд рдмрдЯрдгреЗ: caching, request validation, usage plans). рддреНрдпрд╛рдРрд╡рдЬреА ALB рдХреЗрд╡реНрд╣рд╛ рд╡рд╛рдкрд░рд╛рдпрдЪрд╛: рдмрд╛рдХрд╛рдВрдХрдбреЗ рд╕рддрдд рдЬрд╛рд╕реНрдд traffic (рддрд╛рд╕рд╛рдкреНрд░рдорд╛рдгреЗ рдЦрд░реНрдЪ рдкреНрд░рддрд┐-request рдкреЗрдХреНрд╖рд╛ рд╕реНрд╡рд╕реНрдд рдкрдбрддреЛ), non-HTTP protocols, рдХрд┐рдВрд╡рд╛ рд╡рд░реАрд▓рдкреИрдХреА рдХрд╛рд╣реАрдЪ рд▓рд╛рдЧрдд рдирд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
    c["ЁЯУ▒ client app"]
    gw["ЁЯОЯя╕П API Gateway (HTTP API)<br/>ЁЯкк JWT authorizer ┬╖ тП▒я╕П throttle 100 rps<br/>ЁЯОн stage: prod ┬╖ api.school.com"]
    lam["тЪб Lambda hello (L19)"]
    alb["ЁЯЫОя╕П ALB via VPC link тЖТ desks"]
    c -->|"1 GET /grades/3A + token"| gw
    gw -->|"2 token ok, under quota"| lam
    gw -.->|"other routes"| alb
    gw -->|"тЬЧ 401 / 429"| c

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

рдкреНрд░рддреНрдпреЗрдХ mobile app, partner integration рдЖрдгрд┐ webhook рдореНрд╣рдгрдЬреЗ рдПрдХ API. API Gateway рддреНрдпрд╛рдВрдирд╛ рдХрдВрдЯрд╛рд│рд╡рд╛рдгреЗ, рдмрд░реЛрдмрд░ front desk рджреЗрддреЛ тАФ auth, throttling, metering, staging тАФ рдЬреЗ рдирд╛рд╣реАрддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдорджрддрдиреАрд╕рд╛рдд code рдореНрд╣рдгреВрди рд▓рд┐рд╣рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ рдЕрд╕рддреЗ, рддреЗ configuration рдореНрд╣рдгреВрди. Lambda рд╕реЛрдмрдд рддреА рд╕рдВрдкреВрд░реНрдг "serverless backend" рдЪреА рдЧреЛрд╖реНрдЯ рдЖрд╣реЗ; ALB рд╕реЛрдмрдд рддреЗ programs рд╕рд╛рдареА campus рдЪреЗ рдкреНрд░рд╡реЗрд╢рджреНрд╡рд╛рд░ рдЖрд╣реЗ.

ЁЯФз рдХрд╕реЗ

aws apigatewayv2 get-apis --query 'Items[].{name:Name,proto:ProtocolType,endpoint:ApiEndpoint}'
# quick smoke test of a deployed stage:
curl -s "$API_ENDPOINT/hello?name=class%203A"        # тЖТ {"greeting": "hello, class 3A"}

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~10 рдорд┐рдирд┐рдЯреЗ, ~рдореЛрдлрдд)

cd apigw && terraform apply           # HTTP API тЖТ lesson 19's hello Lambda, stage $default
curl -s "$(terraform output -raw api_url)/hello?name=school"
curl -si "$(terraform output -raw api_url)/nope"       # 404 from the desk, Lambda never woke
terraform destroy

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

curl API_URL/hello?name=school greeting рдкрд░рдд рджреЗрддреЛ; curl -i API_URL/nope desk рдХрдбреВрди 404 рджреЗрддреЛ рдЖрдгрд┐ Lambda log рдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА invocation рджрд┐рд╕рдд рдирд╛рд╣реА.

ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛

terraform destroy тАФ рдкреНрд░рддрд┐-request billing рдореБрд│реЗ рд░рд┐рдХрд╛рдореЗ рдЕрд╕рддрд╛рдирд╛ рдХрд╛рд╣реАрдЪ рдЦрд░реНрдЪ рдирд╛рд╣реА, рдкрдг Lambda рдЖрдгрд┐ role рддрд░реАрд╣реА рдкрд╕рд╛рд░рд╛ рдЖрд╣реЗрдд

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

ЁЯОУ рддреБрдореНрд╣реА рдХрд░реВрди рджрд╛рдЦрд╡рд▓реЗ тАФ рдкреБрдиреНрд╣рд╛

рдУрд│рдЦ, рдмрд╛рдХ, campus, lockers, reception, phonebook, рджрдкреНрддрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп, рдкреНрд░рдЧрддрд┐рдкреБрд╕реНрддрдХреЗ, рдорджрддрдиреАрд╕, рдореАрдЯрд░ тАФ рдЖрдгрд┐ рдЖрддрд╛ corridors, рдЯрдкрд╛рд▓рдкреЗрдЯреА, receptionist рдЪреЗ рдореВрдб, bouncer, рдЖрдгрд┐ API front desk. рдЖрддрд╛ рддреБрдореНрд╣реА рдмрд╛рд╣реЗрд░ рджрд┐рд╕рдгрд╛рд░реА рдХреЛрдгрддреАрд╣реА AWS architecture рдЖрдХреГрддреА рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбрдмрд╛, рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдЦрд░реНрдЪ, рдУрд│рдЦреВ рд╢рдХрддрд╛. рд╢реЗрдЬрд╛рд░реА: Docker рдбрдмреЗ рднрд░рддреЛ, Kubernetes рддреНрдпрд╛рдВрдирд╛ рдпрд╛ campus рд╡рд░ рдЪрд╛рд▓рд╡рддреЛ, ArgoCD рддреНрдпрд╛рдВрдирд╛ git рдордзреВрди deploy рдХрд░рддреЛ. ЁЯПл

ЁЯОЯя╕П Lesson 25 тАФ API Gateway: the front desk for APIs

ЁЯУН You are here: Lesson 25 of 25 тАФ the final lesson! ЁЯОУ ┬╖ Previous: lesson-24-waf-shield


ЁЯУж What's in this branch

All 25 lessons тАФ the complete course. The last box on the map is the one your apps will talk to most. Real file:

ЁЯзТ Explain like I'm 5

Reception (the ALB) is built for crowds of browsers. API Gateway ЁЯОЯя╕П is a different front desk, built for programs calling programs:

Two flavors: HTTP API (newer, cheaper, faster тАФ the default for Lambda/REST-ish work) and REST API (older, more knobs: caching, request validation, usage plans). When to use the ALB instead: steady high traffic to desks (hourly beats per-request), non-HTTP protocols, or when you need none of the above.

ЁЯЧ║я╕П Diagram

flowchart LR
    c["ЁЯУ▒ client app"]
    gw["ЁЯОЯя╕П API Gateway (HTTP API)<br/>ЁЯкк JWT authorizer ┬╖ тП▒я╕П throttle 100 rps<br/>ЁЯОн stage: prod ┬╖ api.school.com"]
    lam["тЪб Lambda hello (L19)"]
    alb["ЁЯЫОя╕П ALB via VPC link тЖТ desks"]
    c -->|"1 GET /grades/3A + token"| gw
    gw -->|"2 token ok, under quota"| lam
    gw -.->|"other routes"| alb
    gw -->|"тЬЧ 401 / 429"| c

тЭУ What

ЁЯдФ Why

Every mobile app, partner integration, and webhook is an API. API Gateway gives them the boring, correct front desk тАФ auth, throttling, metering, staging тАФ as configuration instead of code you'd otherwise write into every helper. Paired with Lambda it is the whole "serverless backend" story; paired with the ALB it is the doorway to the campus for programs.

ЁЯФз How

aws apigatewayv2 get-apis --query 'Items[].{name:Name,proto:ProtocolType,endpoint:ApiEndpoint}'
# quick smoke test of a deployed stage:
curl -s "$API_ENDPOINT/hello?name=class%203A"        # тЖТ {"greeting": "hello, class 3A"}

ЁЯзк Try it (~10 min, ~free)

cd apigw && terraform apply           # HTTP API тЖТ lesson 19's hello Lambda, stage $default
curl -s "$(terraform output -raw api_url)/hello?name=school"
curl -si "$(terraform output -raw api_url)/nope"       # 404 from the desk, Lambda never woke
terraform destroy

тЬЕ Verify тАФ what you should see

curl API_URL/hello?name=school returns the greeting; curl -i API_URL/nope returns 404 from the desk and the Lambda log shows no invocation.

ЁЯз╣ Clean up тАФ do not leave running

terraform destroy тАФ per-request billing means idle costs nothing, but the Lambda and role are still clutter

тЪая╕П Common mistakes

ЁЯОУ You made it тАФ again

Identity, desks, campus, lockers, reception, phonebook, record office, report cards, helpers, the meter тАФ and now the corridors, the postbox, the receptionist's moods, the bouncer, and the API front desk. You can read any AWS architecture diagram in the wild and know every box, and what it costs. Next door: Docker packs the lunchboxes, Kubernetes runs them on this campus, ArgoCD deploys them from git. ЁЯПл

тЖР Previouswaf shieldFinished! Take the quiz тЖТcheck what stuck

This page is the lesson's README from the lesson-25-api-gateway branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.