AWS Lambda 서비스는 대표적인 서버리스 서비스 중에 하나 입니다.
여기서 서버리스란 실제로 서버가 없다기보다는 개발자가 해당 서버를 직접 관리할 필요가 없어서 서버리스라고 불리는게 맞습니다.
Lambda 서비스의 장점은 아래와 같습니다.
1. 서버 관리가 필요하지 않습니다. 이에 따라 개발자가 기능 개발에 조금 더 집중할 수 있습니다.
2. 이용한 만큼만 비용이 나갑니다. EC2를 이용하는 경우에는 계속 EC2 서버를 띄워놓아야 하기 때문에 비용이 계속 나가게 되지만 Lambda는 요청을 처리할 때마다 나가고 요청이 없다면 비용이 나가지 않습니다. (처음 람다를 설정할 때 메모리를 설정할 수 있는데 이 메모리 용량에 따라 1밀리초당 요금이 달라집니다.)
3. 트래픽이 들쭉날쭉한 경우 유용합니다. EC2 서버가 1대 있는 경우 사용자 요청이 많아지면 해당 EC2 서버에서 적절히 처리해야하지만 Lambda 같은 경우 요청 1개당 새로운 서버가 생긴 후 해당 요청을 처리하는 개념입니다. (물론 요청이 많아질 경우 EC2 서버 자체를 늘리는 방법도 있긴합니다.)
단점은 아래와 같습니다.
1. 다른 클라우드 서비스보다 비용이 더 비쌉니다. (사용한 만큼만 비용을 부과하지만 예를 들어 EC2를 1시간 돌리는 것과 Lambda가 1시간 동안 작동하는걸 비교해봤을 때 Lambda가 더 비쌉니다.)
2. 요청이 올 때마다 서버가 새로 생긴 후 처리하는 방식이라 기존 서버가 띄워진 상태로 처리하는 것보다 느립니다.
3. 람다 서비스 같은 경우는 동작 시간의 상한선이 정해져있기 때문에 오랜 시간이 걸리는 작업에는 사용할 수 없습니다.
위에서 람다함수 같은 경우는 매 요청마다 새로운 서버를 생성하고 생성된 서버에 요청을 처리하기 위해 필요한 것들을 설치한 후에 요청을 처리한다고 하였습니다. 이것을 Cold Start라고도 부르는데 아무래도 Cold Start가 정말 계속 실행되면 성능상에 문제가 있을 수 있기 때문에 처음 람다 함수가 실행되고 10분정도는 종료하지 않고 기다립니다. 10분 이내에 다시 람다 함수를 실행해야하면 Cold Start를 하지않고 실행되어 있는 람다 함수가 처리하는 방식입니다.
람다는 요청이 오면 새로운 컨테이너를 생성하는 것이라 했는데 이 컨테이너는 무한히 생성되는게 아니라 1000개로 제한되어있습니다. 즉, 현재 동시에 1000개의 요청을 처리하고 있다면 이후에 오는 요청은 처리할 수가 없습니다.
** 바로 위에서 람다는 10분정도는 기다린다고 했죠? 여기서 말한 1000개는 각각 다른 람다 함수를 뜻합니다. 즉, 람다를 구현할 때 너무 많은 람다 함수를 정의하는 것에 주의해야합니다.
람다의 특징으로는 트리거를 따로 설정해줄 수 있습니다.
예를 들면 AWS의 RDS 서비스를 이용하는데 RDS에 어떤 변화가 있는 경우 이를 트리거 삼아서 람다 함수를 실행시키는 등의 설정이 가능합니다.
다음은 람다의 Layer에 대해 알아보겠습니다.
여러 개의 람다 함수가 있고 각각은 독립적으로 작동합니다. 예를 들어서 10개의 람다 함수가 있고 10개 모두 파이썬의 데이터 사이언스 패키지인 numpy, pandas, pytorch 등이 필요하다고 가정해봅시다. 각 모듈들은 요청이 올 때마다 해당 패키지들을 설치해준 후에 코드가 실행이 될텐데 이는 비효율적입니다.
이를 위해 Layer에 해당 패키지들을 설치해놓고 10개의 람다함수가 Layer를 공통적으로 이용하는 것입니다.
마지막으로 람다와 EFS(Elastic File System)의 관계에 대해 알아보겠습니다.
각 람다는 512MB의 저장 공간을 가지고 있지만 이는 용량도 적을뿐더러 휘발성입니다. 또한, 람다는 독립적이기 때문에 각 파일시스템도 서로 독립적입니다. 그러나 독립적인 람다 함수들이 공통적인 파일 시스템을 사용해야 하는 경우가 있을 수 있습니다.
이 때 EFS를 사용하면 Stateful하게 각 람다 함수들을 사용 가능합니다.
** EFS는 EC2와도 사용 가능합니다. 예를 들면 람다는 실행 시간이 15분으로 제한되어 있기 때문에 오랜 시간이 걸리는 작업은 EC2 서버에서 처리해야 할 것입니다. 이런 경우 짧은 작업은 람다에서, 오래 걸리는 작업은 EC2에서 처리하고 데이터는 EFS에 통합하는 것도 가능합니다.
'AWS' 카테고리의 다른 글
AWS KMS (0) | 2022.06.29 |
---|---|
AWS Fargate을 활용한 배포 흐름#1 (0) | 2022.06.27 |
AWS CloudFront (0) | 2022.06.27 |
AWS 로드밸런서 (0) | 2022.06.26 |
[AWS VPC] Private Subnet에서 외부 접속을 하는 원리 (0) | 2022.06.21 |