
앞에서 살펴본 serverless(서버리스)를 언급할 때 빠지지 않는 것이 AWS Lambda이다. 그래서 이번에는 Lambda가 무엇인지 살펴보고자 한다.
Lambda는 함수의 인스턴스를 실행하여 이벤트를 처리합니다. Lambda API를 사용하여 함수를 직접 호출하거나, 함수를 호출하도록 AWS 서비스 또는 리소스를 구성할 수 있습니다.
여기서 이벤트는 문장의 '주어 + 동사' 기본 형태에서 '동사'라고 생각하면 편하다.
ex) S3 버킷에 파일을 업로드한다.
데이터베이스에서 특정 레코드를 삭제한다.
이런 이벤트가 발생하면 Lambda가 실행된다. 개발자가 Lambda에서 코드를 작성한 후 배포하면 이벤트가 발생하는 경우 Lambda 함수가 호출된다. Lambda 함수가 호출되면 코드로 원하는 로직을 실행시킬 수 있을 뿐만 아니라 또다른 AWS 리소스를 불러올 수도 있다.
Lambda 함수를 생성하고 배포했으나 실행되지 않는다면 어떠한 비용도 들지 않는다. 즉, 이벤트가 발생하고 Lambda 함수가 호출될 때만 비용이 발생한다. AWS에서는 매달 1000000개의 Lambda 함수 호출까지 무료이며, 그 이상부터 비용을 지불한다. 비용은 많이 드는 편이 아니며, 매 1000000번의 Lambda 호출 시 드는 비용은 약 0.20달러이다.
앞서 Lambda 함수는 다른 AWS 리소스를 호출한다고 했다. 만약 Lambda 함수로 인해 다른 리소스가 사용된다면 이렇게 발생한 비용은 따로 지불해야 합니다. 만약 첫 Lambda 함수 호출로 Amazon SNS 메시지를 전송한다, Lambda 함수 호출 비용은 없으나 Amazon SNS 메시지를 전송할 때 유료 기능을 사용하고 있다면 비용이 발생하기 때문에 이점을 유의하며 Lambda 함수를 사용해야 한다.
로컬에서 코딩하고 구동했을 때 런타임이 얼마나 오래 걸리든 주어진 일을 마칠 때까지 컴퓨터는 계속 돌아간다. 하지만 Lambda는 최대 300초(5분)의 런타임만 허용한다. 시간이 지나면서 더 방대한 양의 데이터를 처리할 때 타임아웃 에러가 발생할 수 있는데 그건 Lambda 함수가 5분 이상 돌아가게 되는 경우이다.
Lambda 함수는 최대 512MB의 가상 디스크 공간을 제공한다. 도커 컨테이너와 비슷한 개념이다. Lambda 함수가 구동할 때 가상 컨테이너를 통해 가상 공간이 만들어지며 여기서 Lambda 함수를 실행하면서 일시적으로 파일을 보관할 수 있다. Lambda 함수 실행이 종료되면 모두 사라지지만, 임시 저장소에 보관된 파일을 다른 AWS 리소스에 써서 콘텐츠를 안전하게 옮기면 된다. 주로 데이터 전처리 시 거치는 중간 단계 과정을 디스크에 임의로 보관하고 다시 꺼내서 사용하는 데 활용된다. 다음 파일 경로를 활용하여 Lambda 함수를 통해 파일을 읽고 쓸 수 있다.
/tmp/
tmp 폴더에 쓰인 정보는 Lambda 함수 실행이 종료되면 모두 삭제되고 똑같은 Lambda 함수를 돌려도 새로운 컨테이너가 생성되어 돌아가기 때문에 기존에 만들어진 정보는 존재하지 않는다.
마지막으로 Lambda 함수는 최대 50MB 배포 패키지를 허용한다. AWS 콘솔에서 원하는 언어를 선택한 후 Lambda 함수를 만들 수 있으며 로컬에서 다수의 파일을 하나의 압축 파일로 만든 후 배포 과정을 통해 Lambda 함수를 만들 수도 있다. 만약 패키지 크기가 50MB를 초과할 시 배포는 이루어지지 않는다. 이럴 땐 S3 버킷에 업로드한 후 AWS 콘솔에서 직접 명시해줘야 한다.
Reference
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/welcome.html, aws 공식문서
"업무에 바로 쓰는 AWS 입문", 김성민, 2023.01.10