공부 기록용이니 틀린 점 있다면 적극 수용하겠습니다!
AWS Lambda
AWS Lambda는 AWS 가 제공하는 서버리스 컴퓨팅 FaaS 상품이다.
Lambda 를 사용하면 서버를 프로비저닝 하거나 관리하는 복잡한 작업은 AWS에게 맡기고, 개발자는 애플리케이션 개발에 집중 할 수 있다.
💡 AWS Lambda ⇒ "함수"
Lambda는 쉽게 함수라고 생각하면 된다. (프로그래밍의 관점에서의 함수이다)
웹서버 내부적으로 어떠한 이벤트가 생겼을 때 다음 동작으로 어떠한 일을 해줬으면 했을 때 AWS Lambda를 사용하면 된다.
Lambda의 사용 예시
Lambda 특징
👩🏫 가장 중요!!!
- 이벤트 기반 : AWS Lambda는 Event 기반으로 동작한다. (특정 Event가 트리거로써 발생할 때 Lambda가 실행된다)
- 서버리스 : AWS에서 제공하는 Serverless 컴퓨팅 서비스이다 (유저는 서버를 관리 할 필요 ❌)
- 비용: 요청 수와 실행 시간(메모리 양에 따라 단가가 다름)에 따른 비용의 합계
- 다양한 프로그래밍 언어 지원 : Java, Go, PowerShell, Node. js, C#, Python, and Ruby
- Auto Scailing : AWS가 자동으로 스케일링 하여 대량의 요청 처리 가능
Lambda 함수의 제한 사항
- 압축된 ZIP 파일 크기: 최대 50MB
- 압축 해제된 코드 크기: 최대 250MB
- Lmabda의 실행 시간: 1회에 최대 15분 (15분보다 오래 걸리면 사용할 수 없기 때문에 EC2나 ECS를 고려해야한다)
- 메모리: 128MB ~ 10GB (64MB 단위로 설정)
🔧 Lambda를 위한 설정
유저는 Lambda 함수를 실행하기 위해 다음과 같은 설정을 해야한다.
- Lambda 함수 코드 작성 및 업데이트, 환경 변수 설정, IAM Role 설정 등 애플리케이션 관련 설정
- Lambda 함수를 실행하기 위한 메모리 크기 및 최대 실행 시간 지정 등 리소스 관련 설정
🔧 Lambda 함수의 트리거
Lambda 함수 실행의 시작점이 되는 이벤트를 "트리거"라고 한다.
트리거로 설정할 수 있는 이벤트의 예시
- Amazon S3 Bucket에 오브젝트가 생성되었을 때
- Amazon DynamoDB 테이블에 변경이 있었을 때
- Amazon SQS 큐에 메시지가 추가되었을 때
- Amazon SNS로부터 Topic에 알림이 있을 때
- Amazon API Gateway를 통해 직접 Lambda 함수가 호출되었을 때
🔧 Lambda + API Gateway
Lambda는 API Gateway와 연동시켜서 서버리스 아키텍처를 구축할 수 있다.
(API Gateway는 거의 AWS Lambda와 세트이다. 그만큼 자주 같이 사용된다.)
🔧 Lambda 함수의 VPC Access
https://jibinary.tistory.com/348
🔧 Lambda 함수의 동시 실행 (Concurrency)
Lambda에 요청이 한꺼번에 많이 들어오면, Lambda 함수는 발생한 이벤트의 수만큼 자동으로 "동시 실행"한다.
특정 시점에서 실행 중인 Lambda 함수의 개수를 "동시 실행 수"라고 한다.
동시 실행 수에는 최대값이 있으며, 서울 리전의 최대 동시 실행 수는 1000개이다.
- 최대 동시 실행 수는 AWS 계정 전체의 모든 Lambda 함수에 적용된다.
- 따라서 특정 Lambda 함수에서 많은 동시 실행이 진행되는 경우, 다른 Lambda 함수의 실행이 제한될 수 있다.
- 이러한 상황을 피하기 위해 특정 Lambda 함수에 대해 "동시 실행" 수를 미리 예약할 수 있다.
- 예를 들어, 200개를 예약해 두면 해당 함수는 최대 200개까지 동시 실행할 수 있고, 다른 함수는 합쳐서 최대 800까지 동시 실행할 수 있다.
🔧 Cold Start & Warm Start
Lambda 함수가 처음 실행되거나 일정 기간 동안 실행되지 않았을 경우, Lambda 함수의 실행 환경(런타임 환경)을 준비하는 데 시간이 걸리기 때문에 함수의 처리가 시작되기까지 시간이 소요됩니다. 이를 "Cold Start"라고 합니다.
반면, 같은 Lambda 함수에 대한 요청이 지속적으로 발생하면 런타임 환경이 재사용되어 준비 과정이 생략되고, Lambda 함수의 시작 시간이 단축된다. 이를 "Warm Start"라고 합니다.
🔧 Provisioned Concurrency (프로비저닝된 동시 실행)
Lambda 함수의 런타임 환경을 미리 준비하는 것을 "프로비저닝"이라고 하며, "Provisioned Concurrency"을 예약함으로써 Lambda 함수의 시작 시간을 단축하고 응답 시간을 개선할 수 있다.
Lambda 함수 처리에서 지연 시간(Latency)을 줄이는 것이 중요한 경우에 특히 효과적이다.
(단, "프로비저닝된 동시 실행"을 예약하는 경우 추가 비용이 발생한다)
🔧 Compute Savings Plans
Lambda를 1년 이상 지속해서 사용할 경우, "Compute Savings Plans"로 계약하면 할인된 가격으로 이용할 수 있다. Compute Savings Plans는 1년 또는 3년 기간 동안 일정한 서비스 사용량(시간당 사용 요금)을 정해 계약함으로써, 일반 요금보다 저렴하게 이용할 수 있는 구매 옵션이다.
Lambda 함수 (기본적인 Console 화면)
(튜토리얼: https://aws.amazon.com/tutorials/run-serverless-code/)
Lambda 서비스 홈 화면
Lambda 함수 생성 화면
Lambda 함수 설정 화면
- Runtime (런타임):
Lambda를 어떤 프로그래밍 언어와 버전으로 작성할지 정하는 옵션 (ex. Java, Node.js, C#, Go, Python) - Handler (핸들러):
람다 함수에게 코드의 어디서부터 실행하는지 설정하는 옵션
Lambda 함수 Console 화면
'클라우드(AWS) > Lambda' 카테고리의 다른 글
[AWS] Lambda의 버전 관리를 위한 "Alias" 쉽게 정리 (feat. API Gateway) (0) | 2024.10.25 |
---|---|
[AWS] Lambda를 VPC에 배치하기 (VPC Access: Lambda가 프라이빗 서브넷에 접근하는 법) (0) | 2024.06.10 |
[AWS] Lambda의 로그 (어떤 로그가 CloudWatch에 저장되는가?) (0) | 2024.05.31 |