- EC2에서는 컴퓨터 한 대를 인스턴스, S3에서는 버킷, Lambda에서는 함수라고 부름
- Serverless 제품
- 서버 프로비저닝 및 관리 없이 코드 실행
- 사용량에 따라 지속적으로 백엔드에서 규모가 자동으로 지정되기 때문에 Scaling을 신경쓸 필요가 없다.
- 높은 가용성 및 자동 복구
- 1초에서 최대 15분(900초) 동안 실행하도록 함수를 구성할 수 있게 되어 있다.
사용 방법
- 함수 생성
- 새로 작성
- 함수 이름
- 런타임 : 어떤 언어로 할 것인지
def lambda_handler(event, context):
return
- lambda_handler는 약속된 이름의 함수. 람다를 실행했을 때 이 함수가 실행되도록 약속되어 있음.
- save하고 Deploy 버튼을 눌러야 실행 가능한 상태가 된다.
콘솔에서 테스트
테스트 이벤트 선택(실행될 때 어떠한 값을 입력할 것인지) -> 테스트 이벤트 구성 -> 이름 입력 -> 생성 -> 테스트 -> 함수 실행
입력값
- 테스트 이벤트 선택 -> 테스트 이벤트 구성 -> json
{key: value}
형태로 입력값 입력 -> 생성 - lambda_handler의
event
parameter로 들어간다.
디버깅
CloudWatch
에서 lambda 함수에 대한 로그를 확인할 수 있다.- 코드를 수정하면 새로운 log 스트림 안에 쌓이게 된다.
트리거
- 다른 AWS 서비스(API 게이트웨이, DynamoDB, S3 등)와 연동되기 때문에 Lambda가 사용되는 것.
- Trigger를 통해서 다른 서비스에서 변화가 생겼을 때 람다를 실행할 수 있다.
- 데이터 변화, 직접 또는 endpoint 호출, 리소스 상태 변화, CloudWatch 알람, Cron 주기별
S3와 연동
- 트리거에 Bucket 지정 + 모든 객체 이벤트 유형(PUT, COPY 등) + 재귀호출
- S3의 속성에 이벤트 알림에 Lambda 함수 추가된 것 확인
- S3로 파일을 업로드
- CloudWatch에서 S3에서 Lambda로 전달한 event값 확인할 수 있음
- 테스트 이벤트 구성에 들어가서 해당 event값 붙여넣기 (json 형식을 지키기 위해서 작은따옴표를 큰따옴표로 변경 - JSON formatter & validator)
- 필요한 값 접근
실행 모델
- 동기식 : Amazon API Gateway
- 비동기식 : SNS, CloudWatch, S3
- Stream-based : Kinesis, DynamoDB
성능 및 가격정책
- 기본 설정에서 메모리 용량 높일 수 있고, 메모리에 비례하여 더 좋은 CPU가 할당된다.
- 함수 요청 수와 기간에 따라 요금 청구
- Lambda는 프리티어 무기한으로 제공. 프리티어는 월별 무료 요청 1백만 건 & 월별 400,000GB-초 컴퓨팅 시간
- 초과가 될 경우 요청 백만 건당 0.20 USD
- 1GB를 0.1초만큼 썻을 때 0.0000016667 USD
- 요금 예제
- 512MB 메모리, 1달에 3,000,000회 실행, 매번 1초간 실행 시 : 18.34 USD
- 128MB 메모리, 1달에 30,000,000회 실행, 매번 200ms 실행 시 : 11.63 USD
Cold Start vs Warm Start
- Lambda Function이 일정 기간 이상 실행되지 않을 경우 Stand-by 중인 컨테이너가 하나도 남지 않게 되어 호출 시 소요 시간이 증가됨 (Cold Start)
- CloudWatch Time-based Event를 통해 주기적으로 Lambda Function을 실행하면, Lambda Function이 실행된 컨테이너가 항상 백엔드에 존재하게 되기 때문에 Cold Start를 방지할 수 있다.
Common issues and troubleshooting
실행이 안될 때 or 함수가 실패
- CloudWatch log에 에러 확인
- 이벤트 소스에서 lambda를 실행할 수 있는 function이 있는지 확인
함수 실행이 너무 오래 걸린다면
- Cold Start - 여러 번 실행해보고 비교
- 메모리 확장하여 시도 - CloudWatch log로 확인
- 비효율적 작성 코드 - 로컬 테스트
- Third Party, Dependency 시간 소요 - X-ray로 어떤 엔드포인트에서 얼마나 시간을 소요했는지 파악 가능
스로틀링
- 리전별 1000개로 동시 실행 갯수 제한
- 동기식 호출 스로틀링 : 429 에러
- 비동기식 호출 스로틀링 : 6시간 동안 호출 재시도
- 스트림 기반 : 최대 7일간 호출 재시도
Schedule 설정이 제대로 동작하지 않는 경우
- CRON Expression 확인 (대한민국 표준시가 아니라 UTC 시간으로 되었는지)
- Second level of precision을 지원하지 않음 (Lambda Function이 매일 23:00 UTC에 실행되도록 설정했다면, 23:00:00부터 23:00:59 사이에 실행된다)
- 초단위 정밀 작업이 필요하다면 EC2, ECS를 사용하는 것을 추천
Reference
'AWS' 카테고리의 다른 글
고가용성, 내결함성, 탄력성 (0) | 2021.01.14 |
---|---|
HLS 프로토콜이란 (Feat. MediaConvert) (0) | 2020.12.15 |
API Gateway는 왜 사용할까 (0) | 2020.12.15 |
[동영상 스트리밍] 2. AWS CloudFront, S3을 이용한 동영상 스트리밍 (0) | 2020.12.08 |
[동영상 스트리밍] 1. AWS MediaConvert와 Lambda, S3 연동하는 법 (1) | 2020.12.07 |