요즘 AWS 인프라 중에서 많이 다루는 것이 Lambda여서 그런지 Lambda 내부 동작에 대해서 궁금증이 생겼다. Lambda는 어떻게 짧은 시간에 독립된 환경을 구성하고 코드를 실행키는 지 찾아봤다. 그러던 중 2018년 AWS 기술 블로그에서 확인할 수 있었다. 

AWS에서 오픈소스로 개발한 firecracker라는 가상화 기술이다. firecracker 문서 내용에 따르면, Lambda 혹은 Fargate같은 서버리스 서비스를 위해서 KVM을 기반으로 경량 가상화인 microVM을 만들어 125ms 만에 코드를 실행할 환경을 제공한다고 한다. Virtual Box로 VM을 생성했을 때 15초 ~ 1분 정도 걸렸었는데, 얼마나 놀라운 기술인가..! 그래서 단순히 firecracker를 실행해보는 게 아니라 실제로 Lambda와 같은 서비스를 만들어보려고 한다.

 

아키텍처

내가 생각할 때 필요한 것은 아래와 같다.

 

1. A 인스턴스: 사용자의 요청을 받고 알맞은 VM을 생성할 수 있는 인스턴스로 요청을 보내는 web application 실행하는 인스턴스

2. B 인스턴스: 요청을 받아 firecracker가 구동하는 Web Application이 있고, 실제로 VM이 생성되는 인스턴스

3. DynamoDB: B인스턴스의 남은 가용 자원(vcpu, memory)을 기록, Warm Up을 활용하기 위한 정보 기록

 

여기서 DynamoDB를 사용한 이유는 B 인스턴스의 가용 자원을 모니터링해서 부족한 경우 새로운 인스턴스를 프로비저닝하고, 줄이는 작업과 Warm Up을 구현하기 위함이다.

 

그래서 최종적인 아키텍처는 아래와 같다. 

 

다만 Web Application과 firecracker가 실행되는 인스턴스의 스케일 업은 추후에 확장하는 것으로 하고, firecraker가 정상 동작하여 코드를 실행하는 지를 먼저 구현하여 놓치는 부분이 있는지 확인할 예정이다.