๐Ÿ“‚ AWS/AWS Developer - Associate

[AWS] Developer Associate #12 Lambda

dhyuck 2024. 12. 30. 23:49
๋ฐ˜์‘ํ˜•

Serverless(์„œ๋ฒ„๋ฆฌ์Šค)๋ž€?

  • Serverless(์„œ๋ฒ„๋ฆฌ์Šค)๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋ฆฌ์Šค๋Š” ์„œ๋ฒ„๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ด€๋ฆฌํ•  ์„œ๋ฒ„๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ๋กœ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์„œ๋ฒ„๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ”„๋ผ ๊ด€๋ฆฌ์—์„œ ๋ฒ—์–ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ฝ”๋“œ ์ž‘์„ฑ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋ฆฌ์Šค๋Š” ์ดˆ๊ธฐ์— FaaS(Function as a Service)๋งŒ์„ ์˜๋ฏธํ–ˆ์ง€๋งŒ ํ˜„์žฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ”„๋ผ๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • AWS๋Š” ๋‹ค์–‘ํ•œ ์„œ๋ฒ„๋ฆฌ์Šค ์„œ๋น„์Šค(Lambda, DynamoDB, API Gateway, S3, SQS, SNS, Cognito๋“ฑ)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

AWS Lambda๋ž€?

  • AWS Lambda๋ž€ ์„œ๋ฒ„ ๊ด€๋ฆฌ ์—†์ด ์ฝ”๋“œ๋งŒ ์—…๋กœ๋“œํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ์ปดํ“จํŒ… ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • Function(ํ•จ์ˆ˜)์€ Lambda์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ ์ฝ”๋“œ์™€ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์„ค์ •์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • Trigger(ํŠธ๋ฆฌ๊ฑฐ)๋Š” Lambda ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์„ฑ ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์™€ ๊ฐœ๋ณ„ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Runtime(๋Ÿฐํƒ€์ž„)์€ ํ•จ์ˆ˜ ์‹คํ–‰์„ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋ฉฐ Lambda์™€ Function ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ์™€ ์‘๋‹ต์„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • Handler(ํ•ธ๋“ค๋Ÿฌ)๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ํ•จ์ˆ˜๋Š” ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • Event๋Š” ๋žŒ๋‹ค ํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” JSON ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
  • Context๋Š” ๋Ÿฐํƒ€์ž„ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋กœ ํ•จ์ˆ˜์˜ ์ด๋ฆ„๊ณผ ๋ฒ„์ „, ํ•จ์ˆ˜์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘, ํ•จ์ˆ˜ ํ˜ธ์ถœ ID๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • Execution Role์€ ํ•จ์ˆ˜๊ฐ€ AWS ์„œ๋น„์Šค ๋ฐ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” IAM Role๋กœ ํ•จ์ˆ˜์— ํ• ๋‹น๋˜์–ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • Lambda๋Š” ํ•„์š”ํ•  ๋•Œ๋งŒ ์‹คํ–‰๋˜๊ณ  ์‚ฌ์šฉํ•œ ์ปดํ“จํŒ… ์‹œ๊ฐ„์— ๋Œ€ํ•ด์„œ๋งŒ ๋น„์šฉ์„ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค.
  • Lambda๋Š” ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ CPU๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  • Lambda์˜ ์‹คํ–‰์‹œ๊ฐ„์€ ์ตœ๋Œ€ 15๋ถ„์œผ๋กœ ์กฐ์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰์‹œ๊ฐ„์ด 15๋ถ„์„ ๋„˜๋Š” ๊ฒฝ์šฐ์—๋Š” Lambda ๋Œ€์‹  ECS๋‚˜ EC2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • Lambda์˜ ํ˜ธ์ถœ ๋ฐฉ์‹์€ Synchronous Invokes(Push), Asynchronous Invokes(Event), Event Source Mapping(Polling)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Lambda - Synchronous Invocation

  • Synchronous invocation(๋™๊ธฐ์‹ ํ˜ธ์ถœ)์—์„œ ๋žŒ๋‹ค๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ•จ์ˆ˜๋กœ ์ง์ ‘ ๋ณด๋‚ด๊ณ  ํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • Lambda Invoke API์˜ InvocationType์„ RequestResponse๋กœ ํ•˜๋ฉด ๋žŒ๋‹ค๋ฅผ ๋™๊ธฐ์‹์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Application Load Balancer, API Gateway, Cognito๋“ฑ๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ๋žŒ๋‹ค๋ฅผ Synchronous invocation ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Synchronous invocation์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์žฌ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Synchronous invocation์€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ฐ€ ๋น ๋ฅด๊ณ  ์‹คํ–‰ ์‹œ๊ฐ„์ด ์งง์€ ๋žŒ๋‹ค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Lambda - Asynchronous Invocation

  • Asynchronous invocation(๋น„๋™๊ธฐ์‹ ํ˜ธ์ถœ)์—์„œ ๋žŒ๋‹ค๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ•จ์ˆ˜๋กœ ์ง์ ‘ ๋ณด๋‚ด์ง€ ์•Š๊ณ , ์ด๋ฒคํŠธ๋ฅผ ํ์— ๋„ฃ๊ณ  ์ฆ‰์‹œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Asynchronous invocation์€ ํ•จ์ˆ˜์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ์— ๋„ฃ์–ด์ง„ ์ด๋ฒคํŠธ๋Š” ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฝ์–ด ํ•จ์ˆ˜๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • Lambda Invoke API์˜ InvocationType์„ Event๋กœ ํ•˜๋ฉด ๋žŒ๋‹ค๋ฅผ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • S3, SNS, SES, EventBridge, CloudWatch Logs ๋“ฑ๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ๋žŒ๋‹ค๋ฅผ Asynchronous invocation ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Asynchronous invocation์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ 2๋ฒˆ ๋” ์žฌ์‹คํ–‰๋˜์–ด ์ด 3๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • Asynchronous invocation์˜ ๊ฒฝ์šฐ ๋žŒ๋‹ค๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ํ์— ๋„ฃ๊ณ  ์ถ”๊ฐ€ ์ •๋ณด ์—†์ด ์„ฑ๊ณต ์‘๋‹ต(StatusCode 202)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    StatusCode 202๋Š” Accepted๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋‹จ์ˆœํžˆ ์ด๋ฒคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์‹ ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • Asynchronous invocation๋Š” ๊ฐ€๋” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋™์ผํ•œ ์ด๋ฒคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Asynchronous invocation๋กœ ์‹คํ–‰๋˜๋Š” ๋žŒ๋‹ค๋Š” ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ–๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋žŒ๋‹ค๋ฅผ Asynchronous๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  Synchronous Invocation์— ๋น„ํ•ด ํด๋ผ์ด์–ธํŠธ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

Lambda - Event Source Mapping

  • Event Source Mapping์€ ์ŠคํŠธ๋ฆผ ๋˜๋Š” ํ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  Lambda ํ•จ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” Lambda ๋ฆฌ์†Œ์Šค๋กœ Lambda ๋‚ด์—์„œ ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • Event Source Mapping์€ Event source๋กœ Kinesis, DynamoDB, SQS, Kafka ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Event Source Mapping ๋‚ด์˜ Event poller๋ผ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์ŠคํŠธ๋ฆผ๊ณผ ํ์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํด๋งํ•˜๊ณ  Lambda ํ•จ์ˆ˜๋ฅผ ๋™๊ธฐ์‹์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • Event Source Mapping์€ ๊ฐ ์ด๋ฒคํŠธ๋ฅผ ์ตœ์†Œ 1๋ฒˆ ์ด์ƒ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ ˆ์ฝ”๋“œ์˜ ์ค‘๋ณต์ฒ˜๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Event Source Mapping์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋žŒ๋‹ค๋Š” ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ–๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Event Source Mapping์€ ํ์—์„œ ๋Œ€๋Ÿ‰ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ์ŠคํŠธ๋ฆผ ๋˜๋Š” ํ์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ผ๊ด„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
  • Event filtering์€ ์ŠคํŠธ๋ฆผ์ด๋‚˜ ํ์—์„œ ๋“ค์–ด์˜ค๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ๋งŒ์กฑํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ Lambda ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ Event Source Mapping์€ 1๊ฐœ์—์„œ 5๊ฐœ๊นŒ์ง€ ํ•„ํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lambda - Execution Environment

  • Execution Environment(์‹คํ–‰ ํ™˜๊ฒฝ)๋Š” ์•ˆ์ „ํ•˜๊ณ  ๊ฒฉ๋ฆฌ๋œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.
  • Execution Environment๋Š” Firecracker ๊ธฐ๋ฐ˜์˜ MicroVM์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • Execution Environment๋Š” AWS ๊ณ„์ • ๊ฐ„ ๊ณต์œ ๋˜์ง€ ์•Š์œผ๋ฉฐ, ํ•ด๋‹น ๊ณ„์ •์˜ ํŠน์ • ํ•จ์ˆ˜ ๋ฒ„์ „๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋…์ ์ ์ธ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.
  • Execution Environment์˜ Lifecycle์€ Init, Invoke, Shutdown์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • SnapStart๋Š” Init ๋‹จ๊ณ„๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•จ์ˆ˜์˜ Startup latency(์‹œ์ž‘ ์ง€์—ฐ ์‹œ๊ฐ„, Cold start time)์„ ํฌ๊ฒŒ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lambda - Environment variable

  • Environment variable(ํ™˜๊ฒฝ ๋ณ€์ˆ˜)๋Š” ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Environment variable(ํ™˜๊ฒฝ ๋ณ€์ˆ˜)๋Š” ๋ฌธ์ž์—ด ํ˜•์‹์˜ key-value ์Œ์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๋™์ผํ•œ ์ฝ”๋“œ์—์„œ RDS์˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•˜์—ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์ƒ์šฉ ํ™˜๊ฒฝ์—์„œ ์—ฐ๊ฒฐ๋˜๋Š” DB๊ฐ€ ๋‹ค๋ฅด๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lambda - Layer

  • Layer(๋ ˆ์ด์–ด)๋Š” ํ•จ์ˆ˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์„ค์ • ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” .zip ํŒŒ์ผ ์•„์นด์ด๋ธŒ์ž…๋‹ˆ๋‹ค.
  • Layer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜์˜ dependency(์ข…์†์„ฑ)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐฐํฌ ํŒจํ‚ค์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Layer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜์˜ ํ•ต์‹ฌ ๋กœ์ง๊ณผ ์ข…์†์„ฑ์ด ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Layer๋Š” ์—ฌ๋Ÿฌ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ ํ•จ์ˆ˜๋Š” ์ตœ๋Œ€ 5๊ฐœ์˜ Layer๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lambda - Deployment package(.zip file๊ณผ container image)

  • ์‚ฌ์šฉ์ž๊ฐ€ ํ•จ์ˆ˜ ์ฝ”๋“œ์™€ ์ฝ”๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์„ Deployment Package๋กœ ๋งŒ๋“ค๋ฉด Lambda๋Š” Deployment Package๋ฅผ ์‹คํ–‰ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Lambda๋Š” Deployment๋กœ .zip file๊ณผ container image๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ ํ›„์— ๊ธฐ์กด ํ•จ์ˆ˜์— ๋Œ€ํ•œ Deployment package type์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ƒ์„ฑ ํ›„ Deployment package type์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • .zip file์€ ์ฝ”๋“œ์™€ ์˜์กด์„ฑ์„ ์••์ถ•ํ•˜์—ฌ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Python, Node.js ๋“ฑ ์ผ๋ฐ˜์ ์ธ ๋Ÿฐํƒ€์ž„์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Container image๋Š” ์ฝ”๋“œ์™€ ์˜์กด์„ฑ์„ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ๋นŒ๋“œํ•˜์—ฌ ECR์— ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ตœ๋Œ€ 10GB ํฌ๊ธฐ์˜ ์ด๋ฏธ์ง€๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๊ณ  ๋จธ์‹  ๋Ÿฌ๋‹๊ณผ ๊ฐ™์€ ์ƒ๋‹นํ•œ ์ข…์†์„ฑ์ด ์ˆ˜๋ฐ˜๋˜๋Š” ๋Œ€๊ทœ๋ชจ ์›Œํฌ๋กœ๋“œ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Container image์˜ Base image๋Š” Lambda runtime interface๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Lambda - Version & Alias

  • Version(๋ฒ„์ „)์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜์˜ ๋ฐฐํฌ๋ฅผ ๋ฒ„์ €๋‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์šฉํ™˜๊ฒฝ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ƒˆ ๋ฒ„์ „์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„์ „ ๋ฒˆํ˜ธ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋ฉฐ ํŠน์ • ๋ฒ„์ „์„ ์‚ญ์ œํ•˜๋”๋ผ๋„ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋Š” ์žฌ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ๋˜์ง€ ์•Š์€ ๋ฒ„์ „์˜ ์ด๋ฆ„์€ $LATEST์œผ๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฒ„์ „์€ $LATEST์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค.
  • ๋ฒ„์ „์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” $LATEST๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ƒ์„ฑ๋œ ๋ฒ„์ „์ด ํ˜„์žฌ์˜ $LATEST์™€ ๋™์ผํ•˜๋ฉด ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋งŒ๋“ค์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„์ „์„ ์ƒ์„ฑํ•œ ํ›„์—๋Š” ์ƒ์„ฑ๋œ ๋ฒ„์ „์˜ ์ฝ”๋“œ์™€ ๋Ÿฐํƒ€์ž„, ๋ฉ”๋ชจ๋ฆฌ, ๋ ˆ์ด์–ด ๋“ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ  $LATEST๋Š” ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋ฒ„์ „์€ ๋…๋ฆฝ์ ์ด๋ฉฐ ๋ฒ„์ „๋งˆ๋‹ค ARN(Amazon Resource Name)์€ ๊ณ ์œ ํ•ฉ๋‹ˆ๋‹ค.

  • Alias(๋ณ„์นญ)์€ ๋ฒ„์ „์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด, dev, alp, prod ๋“ฑ์˜ ๋ณ„์นญ์„ ๋งŒ๋“ค์–ด ํŠน์ • ๋ฒ„์ „์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ„์นญ์€ ๊ณ ์œ ํ•œ ARN์„ ๊ฐ€์ง€๋ฉฐ, ๋‹ค๋ฅธ ๋ณ„์นญ์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†๊ณ  ํ•จ์ˆ˜ ๋ฒ„์ „๋งŒ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ„์นญ์€ ํŠธ๋ž˜ํ”ฝ์„ ๋‘๊ฐœ์˜ ๋ฒ„์ „์œผ๋กœ ๋ถ„์‚ฐํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ํŠธ๋ž˜ํ”ฝ์„ ๊ธฐ์กด ๋ฒ„์ „์œผ๋กœ ๋ณด๋‚ด๊ณ  ํŠธ๋ž˜ํ”ฝ์˜ ์ผ๋ถ€๋งŒ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ๋ณด๋‚ด๋ฉด์„œ ์ƒˆ ๋ฒ„์ „์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์œ„ํ—˜์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lambda - Destination & Dead Letter Queue

  • Destination์€ ํ•จ์ˆ˜๊ฐ€ ๋น„๋™๊ธฐ์‹์œผ๋กœ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ ์†Œ์Šค ๋งคํ•‘์œผ๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ์— ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๋Œ€์ƒ์œผ๋กœ ํƒ€์ž„์Šคํƒฌํ”„์™€ ์ด๋ฒคํŠธ, ํŽ˜์ด๋กœ๋“œ ๋“ฑ ์„ธ๋ถ€ ์ •๋ณด ๋“ฑ์„ ์ˆ˜์‹ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Destination์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ํ›„์† ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น„๋™๊ธฐ ํ˜ธ์ถœ์˜ ๊ฒฝ์šฐ ์„ฑ๊ณตํ•œ ๊ฒฐ๊ณผ(on-success)์™€ ์‹คํŒจํ•œ ์‹คํ–‰ ๊ฒฐ๊ณผ(on-failure)๋ฅผ Destination์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์ด๋ฒคํŠธ ์†Œ์Šค ๋งคํ•‘์˜ ๊ฒฝ์šฐ ์‹คํŒจํ•œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋งŒ Destination์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DLQ(Dead Letter Queue)๋Š” ์‹คํŒจํ•œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ „์†กํ•˜๋Š” Destination์˜ ๋Œ€์•ˆ์œผ๋กœ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Destination์€ SQS, SNS, EventBridge, Lambda๋ฅผ ์ง€์›ํ•˜๊ณ  DLQ๋Š” SQS์™€ SNS๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • DLQ๋Š” ์ฒ˜๋ฆฌ์— ์‹คํŒจํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ , Destination์€ ์„ฑ๊ณต ๋ฐ ์‹คํŒจ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•œ ๋” ํ’๋ถ€ํ•œ ์‹คํ–‰ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ DLQ ๋˜๋Š” Destination์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Lambda - Function URL

  • Function URL(ํ•จ์ˆ˜ URL)์€ ๋žŒ๋‹ค ํ•จ์ˆ˜ ์ „์šฉ HTTP(S) ์—”๋“œํฌ์ธํŠธ๋กœ API GW๋‚˜ ALB๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Lambdaํ•จ์ˆ˜๋ฅผ ์ธํ„ฐ๋„ท์— ๊ณต๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Funtion URL Endpoint๋Š” โ€œhttps://.lambda-url..on.awsโ€์™€ ๊ฐ™์€ ํ˜•์‹์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • Function URL์˜ ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ AWS_IAM์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ •์ฑ…์œผ๋กœ ๋‹ค๋ฅธ AWS ๊ณ„์ •, AWS Organization, AWS Service์—๊ฒŒ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ณ , None์„ ์‚ฌ์šฉํ•˜๋ฉด Function URL์€ ํผ๋ธ”๋ฆญ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜ URL์€ CORS(Cross-Origin Resource Sharing)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Lambda - VPC

  • ๊ธฐ๋ณธ์ ์œผ๋กœ Lambda function์€ ์ธํ„ฐ๋„ท ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ Lambda-managed VPC์—์„œ ์‹คํ–‰๋˜๋ฉฐ Lambda-managed VPC๋Š” ๊ณ ๊ฐ์—๊ฒŒ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ Lambda function์€ ๊ณ ๊ฐ์˜ VPC์— ์กด์žฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค์—๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • Lambda์˜ VPC Configuration์„ ์‚ฌ์šฉํ•˜๋ฉด Lambda function์ด VPC ๋‚ด์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ด๋•Œ, Lambda๋Š” Hyperplane Elastic Network Interface(Hyperplane ENI)๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ VPC ๋‚ด์˜ ๋ฆฌ์†Œ์Šค์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • Lambda function์„ VPC์— ์—ฐ๊ฒฐํ•˜๋ฉด ํ•ด๋‹น VPC ๋‚ด์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ณ  ์ธํ„ฐ๋„ท์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    VPC์— ์—ฐ๊ฒฐํ•œ Lambda function์ด ์ธํ„ฐ๋„ท์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” NAT GW๋ฅผ ํ†ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    Hyperplane ENI๋Š” ํผ๋ธ”๋ฆญ IP๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์— Lambda function์„ ์—ฐ๊ฒฐํ•˜์—ฌ๋„ ์ธํ„ฐ๋„ท ์•ก์„ธ์Šค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
    ํ•ฉ๋‹ˆ๋‹ค.
  • ์ธํ„ฐ๋„ท ์•ก์„ธ์Šค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์—์„œ VPC์— ์—ฐ๊ฒฐ๋œ ํ•จ์ˆ˜๊ฐ€ AWS ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” VPC Endpoint๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    CloudWatch Logs๋Š” ์ธํ„ฐ๋„ท์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Lambda - Ephemeral storage & File system

  • Lambda๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ์— ๊ณ ์œ ํ•œ ์ž„์‹œ ์ €์žฅ์†Œ๋ฅผ /tmp ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ์ˆ˜๊ฐ€ ์ž‘์—…ํ•  ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • /tmp ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” 512MB๋ถ€ํ„ฐ 10,240MB ์‚ฌ์ด๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” AWS managed key๋กœ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค.
  • Lambda ํ•จ์ˆ˜๊ฐ€ VPC์™€ ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ Elastic File System(EFS)๋ฅผ ํ•จ์ˆ˜์˜ ๋กœ์ปฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋งˆ์šดํŠธํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lambda - Concurrency

  • Concurrency๋Š” ํŠน์ • ์‹œ์ ์— Lambda ํ•จ์ˆ˜๊ฐ€ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.
    ๋งŒ์•ฝ Concurrency์ด 1,000์ด๋ผ๋ฉด ํŠน์ • ์‹œ์ ์— 1,000๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • Concurrency์™€ Requests per second๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • Concurrency๋Š” ํ‰๊ท  ์ดˆ๋‹น ์š”์ฒญ ๊ฑด์ˆ˜์™€ ํ‰๊ท  ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ๊ฐ„์˜ ๊ณฑ์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, 1์ดˆ์— ํ‰๊ท  100๊ฑด์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ํ•จ์ˆ˜์˜ ํ‰๊ท  ์‹คํ–‰์‹œ๊ฐ„์ด 1์ดˆ๋ผ๋ฉด Concurrency๋Š” 100์ด์ง€๋งŒ
    1์ดˆ์— ํ‰๊ท  100๊ฑด์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ํ•จ์ˆ˜์˜ ํ‰๊ท  ์‹คํ–‰์‹œ๊ฐ„์ด 0.5์ดˆ๋ผ๋ฉด Concurrency๋Š” 50์ž…๋‹ˆ๋‹ค.
  • Lambda๋Š” Concurrency์˜ 10๋ฐฐ ์ด๋‚ด๋กœ Requests per second๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, 1,000 Concurrency๋กœ ์ดˆ๋‹น 20,000๊ฐœ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋”๋ผ๋„ 10,000๊ฐœ์˜ ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์Šค๋กœํ‹€๋ง์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • Concurrency๋Š” ๊ณ„์ •๋ณ„๋กœ ๋ฆฌ์ „๋‹น 1,000๊ฐœ๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ Pool ํ˜•ํƒœ๋กœ ํ•จ์ˆ˜๊ฐ€ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Concurrency๊ฐ€ ํ•œ๋„์— ๋„๋‹ฌํ•˜๋ฉด Lambda๋Š” ์ถ”๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•ด 429 Too Many Requests ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Concurrency๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด Service quota ์ฆ๊ฐ€๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Reserved Concurrency๋Š” ํŠน์ • ํ•จ์ˆ˜๊ฐ€ Concurrency๋ฅผ ๋ณด์žฅ๋ฐ›๋„๋ก ์˜ˆ์•ฝํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ค‘์š”ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ถฉ๋ถ„ํ•œ Concurrency๋ฅผ ํ™•๋ณดํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Provisioned Concurrency๋Š” ์‚ฌ์ „์— ์ดˆ๊ธฐํ™”๋œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ์ดˆ๊ธฐํ™”ํ•ด์•ผํ•˜๋Š” ์ฝœ๋“œ ์Šคํƒ€ํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Lambda - Best Practice

  • ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•ธ๋“ค๋Ÿฌ ์™ธ๋ถ€์—์„œ ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ธ๋“ค๋Ÿฌ ์™ธ๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  SDK ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • S3 ๋ฒ„ํ‚ท ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์šด์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๊ฐ€ ์Šค์Šค๋กœ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ์€ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Role์— ์ตœ์†Œ ๊ถŒํ•œ ์›์น™์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๋Š” ์ตœ์ ์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ํ•จ์ˆ˜ ์‹คํ–‰ ๋กœ๊ทธ์—์„œ Max Memory Used๋ฅผ ํ™•์ธํ•˜๋ฉด ํ•จ์ˆ˜์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ํ•„์š”ํ•œ์ง€, ํ•จ์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ํ”„๋กœ๋น„์ €๋‹ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋Š” ์‚ญ์ œํ•˜์—ฌ ๋ฐฐํฌ ํŒจํ‚ค์ง€์— ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๋Š” ์ค‘๋ณต ์ด๋ฒคํŠธ๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ฉฑ๋“ฑ์„ฑ ์žˆ๊ฒŒ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ •์  ์ž์‚ฐ(static asset)์€ /tmp ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์บ์‹ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
๋ฐ˜์‘ํ˜•