μμ΅μ: Lambda νλ‘μ ν΅ν©μ ν΅ν΄ REST API μμ±
Lambda νλ‘μ ν΅ν©μ API λ©μλλ μ 체 APIλ₯Ό Lambda ν¨μμ ν΅ν©ν μ μλ μ μ°νκ³ κ°λ¨ν API Gateway API ν΅ν© μ νμ λλ€. Lambda ν¨μλ Lambdaκ° μ§μνλ μ΄λ€ μΈμ΄λ‘λ μμ±ν μ μμ΅λλ€. μ΄κ²μ νλ‘μ ν΅ν©μ΄κΈ° λλ¬Έμ APIλ₯Ό λ€μ λ°°ν¬ν νμ μμ΄ μΈμ λ μ§ Lambda ν¨μ ꡬνμ λ³κ²½ν μ μμ΅λλ€.
μ΄ μμ΅μμμλ λ€μ μμ μ μνν©λλ€.
-
"Hello, World!" λ§λ€κΈ° APIμ λ°±μλκ° λ Lambda ν¨μλ₯Ό λ§λλλ€.
-
"Hello, World!" λ§λ€κΈ° λ° ν μ€νΈ Lambda νλ‘μ ν΅ν©μ μ¬μ©νμ¬ APIλ₯Ό λ§λ€κ³ ν μ€νΈν©λλ€.
"Hello, World!" λ§λ€κΈ° Lambda ν¨μ
βHello, World!βλ₯Ό μμ±νλ €λ©΄ Lambda μ½μμ Lambda ν¨μ
https://console.aws.amazon.com/lambda
μμ Lambda μ½μμ λ‘κ·ΈμΈν©λλ€. -
AWS νμ λͺ¨μμμ AWS 리μ μ μ νν©λλ€.
μ°Έκ³
Lambda ν¨μλ₯Ό μμ±ν 리μ μ μ μ΄ λ‘λλ€. μ΄ λ¦¬μ μ APIλ₯Ό μμ±ν λ νμν©λλ€.
-
νμ μ°½μμ ν¨μλ₯Ό μ νν©λλ€.
-
ν¨μ μμ±μ μ νν©λλ€.
-
μλ‘ μμ±μ μ νν©λλ€.
-
κΈ°λ³Έ μ 보μμ λ€μκ³Ό κ°μ΄ ν©λλ€.
-
ν¨μ μ΄λ¦μ
GetStartedLambdaProxyIntegration
μ μ λ ₯ν©λλ€. -
λ°νμμμ μ§μλλ μ΅μ Node.js λλ Python λ°νμμ μ νν©λλ€.
μν€ν μ²μ κ²½μ° κΈ°λ³Έ μ€μ μ μ μ§ν©λλ€.
-
κΆν(Permissions)μμ κΈ°λ³Έ μ€ν μν λ³κ²½(Change default execution role)μ νμ₯ν©λλ€. μ€ν μν λλ‘λ€μ΄ λͺ©λ‘μμ AWS μ μ± ν νλ¦Ώμμ μ μν μμ±μ μ νν©λλ€.
-
μν μ΄λ¦μ
GetStartedLambdaBasicExecutionRole
μ μ λ ₯ν©λλ€. -
[Policy templates] νλλ₯Ό λΉμλ‘λλ€.
-
ν¨μ μμ±μ μ νν©λλ€.
-
-
λ€μ μ½λλ₯Ό 볡μ¬νμ¬ μΈλΌμΈ μ½λ νΈμ§κΈ°μ ν¨μ μ½λμ λΆμ¬ λ£μ΅λλ€.
-
[Deploy]λ₯Ό μ νν©λλ€.
"Hello, World!" λ§λ€κΈ° API
μ΄μ API Gateway μ½μμ μ¬μ©νμ¬ βHello, World!β Lambda ν¨μμ λν APIλ₯Ό λ§λλλ€.
βHello, World!βλ₯Ό μμ±νλ €λ©΄ API
https://console.aws.amazon.com/apigateway
μμ API Gateway μ½μμ λ‘κ·ΈμΈν©λλ€. -
API Gatewayλ₯Ό μ²μ μ¬μ©νλ κ²½μ°, μλΉμ€μ κΈ°λ₯μ μκ°νλ νμ΄μ§κ° λνλ©λλ€. REST APIμμ λΉλλ₯Ό μ νν©λλ€. μμ API μμ± νμ μ΄ λνλλ©΄ νμΈμ μ νν©λλ€.
API Gatewayλ₯Ό μ²μ μ¬μ©νλ κ²μ΄ μλ κ²½μ° API μμ±μ μ νν©λλ€. REST APIμμ [λΉλ]λ₯Ό μ νν©λλ€.
API μ΄λ¦μμ
LambdaProxyAPI
μ μ λ ₯ν©λλ€.(μ ν μ¬ν) μ€λͺ μ μ€λͺ μ μ λ ₯ν©λλ€.
API μλν¬μΈνΈ μ ν μ€μ μ μ§μμΌλ‘ μ μ§ν©λλ€.
IP μ£Όμ μ νμμ IPv4λ₯Ό μ νν©λλ€.
API μμ±μ μ νν©λλ€.
APIλ₯Ό μμ±ν νμλ 리μμ€λ₯Ό μμ±ν©λλ€. μΌλ°μ μΌλ‘ API 리μμ€λ μ ν리μΌμ΄μ λ‘μ§μ λ°λ₯Έ 리μμ€ νΈλ¦¬λ‘ μ 리λμ΄ μμ΅λλ€. μ΄ μμμμλ /helloworld 리μμ€λ₯Ό μμ±ν©λλ€.
리μμ€λ₯Ό μμ±νλ €λ©΄
리μμ€ μμ±μ μ νν©λλ€.
νλ‘μ 리μμ€λ κΊΌμ§ μνλ‘ λ‘λλ€.
리μμ€ κ²½λ‘λ₯Ό
/
λ‘ μ μ§ν©λλ€.리μμ€ μ΄λ¦μ
helloworld
μ μ λ ₯ν©λλ€.μ€λ¦¬μ§ κ° λ¦¬μμ€ κ³΅μ (CORS)λ₯Ό κΊΌμ§ μνλ‘ λ‘λλ€.
리μμ€ μμ±μ μ νν©λλ€.
νλ‘μ ν΅ν©μμλ μ 체 μμ²μ΄ HTTP λ©μλλ₯Ό λνλ΄λ catch-all ANY
λ©μλλ₯Ό ν΅ν΄ λ°±μλ Lambda ν¨μλ‘ κ·Έλλ‘ μ μ‘λ©λλ€. μ€μ HTTP λ©μλλ μ€ν μ ν΄λΌμ΄μΈνΈκ° μ§μ ν©λλ€. ANY
λ©μλλ₯Ό ν΅ν΄ μ§μλλ λͺ¨λ HTTP λ©μλμΈ DELETE
, GET
, HEAD
, OPTIONS
, PATCH
, POST
, PUT
μ λν΄ λ¨μΌ API λ©μλ μ€μ μ μ¬μ©ν μ μμ΅λλ€.
ANY
λ©μλλ₯Ό μμ±νλ €λ©΄
/helloworld 리μμ€λ₯Ό μ νν λ€μ λ©μλ μμ±μ μ νν©λλ€.
λ©μλ μ νμμ ANYλ₯Ό μ νν©λλ€.
ν΅ν© μ νμμ Lambda ν¨μλ₯Ό μ νν©λλ€.
Lambda νλ‘μ ν΅ν©μ μΌλλ€.
Lambda ν¨μμμ Lambda ν¨μλ₯Ό μμ±ν AWS 리μ μ μ ννκ³ ν¨μ μ΄λ¦μ μ λ ₯ν©λλ€.
-
κΈ°λ³Έ μ ν μκ° κ°μΈ 29μ΄λ₯Ό μ¬μ©νλ €λ©΄ κΈ°λ³Έ μ ν μκ°μ νμ±νλ μνλ‘ μ μ§ν©λλ€. μ¬μ©μ μ§μ μ ν μκ°μ μ€μ νλ €λ©΄ κΈ°λ³Έ μ ν μκ°μ μ ννκ³
50
~29000
λ°λ¦¬μ΄ μ¬μ΄μ μ ν μκ° κ°μ μ λ ₯ν©λλ€. λ©μλ μμ±μ μ νν©λλ€.
API λ°°ν¬ λ° ν μ€νΈ
APIλ₯Ό λ°°ν¬νλ €λ©΄
Deploy API(API λ°°ν¬)λ₯Ό μ νν©λλ€.
μ€ν μ΄μ§μμ μ μ€ν μ΄μ§λ₯Ό μ νν©λλ€.
λ¨κ³ μ΄λ¦μ
test
λ₯Ό μ λ ₯ν©λλ€.(μ ν μ¬ν) μ€λͺ μ μ€λͺ μ μ λ ₯ν©λλ€.
λ°°ν¬(Deploy)λ₯Ό μ νν©λλ€.
μ€ν μ΄μ§ μΈλΆ μ 보μμ λ³΅μ¬ μμ΄μ½μ μ ννμ¬ APIμ νΈμΆ URLμ 볡μ¬ν©λλ€.
λΈλΌμ°μ μ cURLμ μ¬μ©νμ¬ APIμ Lambda νλ‘μ ν΅ν© ν μ€νΈ
λΈλΌμ°μ λλ cURL
쿼리 λ¬Έμμ΄ νλΌλ―Έν°λ₯Ό μ¬μ©νμ¬ GET
μμ²μ ν
μ€νΈνλ €λ©΄, APIμ helloworld
리μμ€μ λν URLμ λΈλΌμ°μ μ£Όμ νμμ€μ μ
λ ₯ν©λλ€.
API helloworld
리μμ€μ URLμ λ§λ€λ €λ©΄ helloworld
리μμ€μ 쿼리 λ¬Έμμ΄ νλΌλ―Έν° ?greeter=John
μ κ°μ νΈμΆ URLμ μΆκ°ν©λλ€. URLμ λ€μκ³Ό κ°μ΄ νμλμ΄μΌ ν©λλ€.
https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld?greeter=John
λ€λ₯Έ λ©μλμ κ²½μ° POSTMAN
cURLμ μ¬μ©νμ¬ λ°°ν¬λ APIλ₯Ό ν μ€νΈνλ €λ©΄ λ€μκ³Ό κ°μ΄ ν©λλ€.
-
ν°λ―Έλ μ°½μ μ½λλ€.
-
λ€μ cURL λͺ λ Ήμ 볡μ¬νμ¬ ν°λ―Έλ μ°½μ λΆμ¬ λ£μ΅λλ€. νΈμΆ URLμ μ΄μ λ¨κ³μμ 볡μ¬ν κ²μΌλ‘ λ°κΎΈκ³ URL λμ
/helloworld
λ₯Ό μΆκ°ν©λλ€.μ°Έκ³
Windowsμμ μ΄ λͺ λ Ήμ μ€νν κ²½μ° λ€μ ꡬ문μ μ¬μ©νμμμ€.
curl -v -X POST "https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld" -H "content-type: application/json" -d "{ \"greeter\": \"John\" }"?greeter=John
μ΄λΌλ 쿼리 λ¬Έμμ΄ νλΌλ―Έν°μ ν¨κ» APIλ₯Ό μ§μ μ μΌλ‘ νΈμΆνλ €λ©΄ λ€μκ³Ό κ°μ΄ ν©λλ€.curl -X GET 'https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld?greeter=John'greeter:John
μ΄λΌλ ν€λ νλΌλ―Έν°μ ν¨κ» APIλ₯Ό μ§μ μ μΌλ‘ νΈμΆνλ €λ©΄ λ€μκ³Ό κ°μ΄ ν©λλ€.curl -X GET https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -H 'greeter: John'{"greeter":"John"}
μ΄λΌλ λ³Έλ¬Έκ³Ό ν¨κ» APIλ₯Ό μ§μ μ μΌλ‘ νΈμΆνλ €λ©΄ λ€μκ³Ό κ°μ΄ ν©λλ€.curl -X POST https://
r275xc9bmd
.execute-api.us-east-1
.amazonaws.com/test/helloworld \ -H 'content-type: application/json' \ -d '{ "greeter": "John" }'
μ΄ λͺ¨λ κ²½μ°μ μΆλ ₯λλ κ²μ λ€μκ³Ό κ°μ μλ΅ λ³Έλ¬Έμ΄ μλ 200 μλ΅μ λλ€.
Hello, John!