AWS Lambda
AWS 람다는 서버리스 컴퓨팅 Faas 상품이다.
여기서 서버리스란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다.
즉, 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지 관리 등을 대신 처리해주기 때문에 개발자는 비즈니스 로직 작성에만 집중할 수 있게 된다.
AWS Lambda
또한 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하게 해주는 서버리스 컴퓨팅 서비스로서 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행 가능하다.
사용자는 람다에다가 원하는 함수를 작성하고, 필요할 때 그 함수를 사용할 수 있다.
또한 다른 AWS 서비스들과 연동이 용이하다는 특징을 가지고 있다.
- 예를 들어 이미지를 S3에서 읽어올 때, 람다 함수를 통해 필요한 크기로 Resize하는 기능에도 사용할 수 있다.
이처럼 다른 AWS 서비스에서 코드를 자동으로 트리거 하도록 설정하거나 웹 또는 모바일 앱에서 직접 코드를 호출할수도 있다.
Lambda의 Spec
Lambda의 장단점
💡Tip
참고로 람다는 컨테이너 개념으로 스케일링 된다.
EC2의 오토 스케일링 같이 가상OS가 생성되는게 아니라, OS 위에 독립적인 하나의 프로그램을 키는 방식이기 때문에 훨씬 가볍게 확장이 가능하다.
리소스 제한 : 람다는 메모리(최대 10GB), 처리시간 (최대 900초, 즉 15분)으로 제한되어 있다.
즉, 하나의 함수가 한번 호출될때 AWS에서는 최대 10GB의 메모리까지 사용이 가능하며, 처리시간은 최대 15분이라는 말이다.
Stateless : 람다는 함수가 호출되면 새로운 컨테이너를 띄우는 방식이기 때문에 별도의 상태를 저장하지 않는다.
이는 Lambda함수가 이벤트에 의해 트리거 될 때마다 완전히 새로운 환경에서 호출된다는 것을 의미한다.
그래서 이전 이벤트의 실행 컨텍스트에 대한 엑세스 권한이 없다보니, db connection을 유지하는 것 같은 기능은 수행하지 못한다.
ColdStart : 람다는 리소스를 효율적으로 사용하기 위해서 오랫동안 사용하지 않고 있을 경우 잠시 컴퓨팅 파워를 꺼둔다. 그래서 다시 사용하려고 하면 람다 컨테이너를 띄우기 위해 서버가 켜지고 실행환경을 구성하기 위해 약간의 시간이 걸린다. 즉, 요청이 와서 람다함수를 실행하게 되면 어느정도 딜레이가 발생하게 된다.
하지만 EC2같은 경우 항상 가동된 상태에서 요청을 받을 준비가 되었기 때문에 딜레이가 없다. 이를 반댓말인 WarmStart라고 불리운다.
[ 콜드스타트 해결방법 ]
1. 람다를 계속 호출해준다.: 사실 항상 컨테이너가 준비되어 있게 하도록 람다를 지속적으로 호출해주는게 가장 좋다. 하지만 호출이 될때마다 비용이 산정되는 방식이기 때문에 그만큼 비용이 더 들수도 있다.
2. 람다의 메모리를 늘려 스펙을 높인다. : 메모리를 더 할당할수록 컴퓨팅 스펙이 높아지기 때문에 딜레이가 줄어든다.
3. 프로비저닝된 동시성 활성화 : 2019년 콜드스타트 문제를 해결하기 위해 나온 옵션으로 함수의 호출에 바로 응답할 수 있게 미리 준비하는 옵션이다. 이를 활성화 하면 미리 함수의 환경을 세팅해주는 딜레이가 줄어들지만, 추가적인 비용이 발생한다.
Lambda 실무 사용 사례
1. CloudWatch Alarm을 모든 리소스에 걸어둔다.
2. Memory Full이나 CPU가 높아져서 대응이 필요할 때, 즉 리소스 상태불량일때 CloudWatch Alarm이 실행되면 자동으로 Lambda Function이 실행된다.
3. 람다 함수가 Email이나 Slack Notification으로 관련자들에게 알려준다.
4. 람다 함수가 Ansible과 결합해서 Memory Full이 났을때 로컬인스턴스에서 메모리를 리셋해준다던지 리소스를 교체해준다던지 장애 발생시 automatic하게 복구할 수 있다.
AWS Lambda를 다른 AWS 서비스와 결합하면, 확장성, 백업 또는 여러 데이터 센터 중복에 필요한 별도의 관리작업없이 개발자가 자동으로 확장 및 축소되고 여러 데이터 센터에 걸쳐 가용성이 높은 구성에서 실행하는 강력한 웹 애플리케이션을 구축할 수 있다.
1. 클라이언트가 접속을 했을때 정적 컨텐츠는 S3에 저장.
2. S3 앞단에 CloudFront를 달아서 전세계 어디서든 빠르게 서빙할 수 있음
3. 인증으로는 Cognito를 별도로 사용할 수 있음
4. Dynamic Contents, 프로그램 작업이 필요한 경우에는 Lambda와 API Gateway로 서비스를 하고 백단에서는 DB로 DynamoDB를 운영할 수 있음.
AWS Lambda를 사용하여 DynamoDB 테이블의 모든 데이터 변경에 대한 데이터 검증, 필터링, 정렬 또는 기타 변환 작업을 수행하고 변환된 데이터를 다른 데이터 스토어로 로드할 수 있다.
Reference