๐ 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 ๋๋ ํฐ๋ฆฌ์ ์บ์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฐ์ํ