Cold Start
우선 Lambda에서 가장 중요한 개념은 Cold Start입니다. ColdStart는 EC2인스턴스가 최초로 만들어 지고 API Call이 되어질 떄 환경이 구축되는 시간입니다. 이 Cold Start 시간을 줄이기 위한 AWS의 노력이 많았습니다.
막 EC2를 10분동안 유지시키고 이 시간에 다시 요청이 들어오면 이를 재사용 하는 방법으로 말이죠. 또한 5분마다 무조건 한 번씩 Trigger를 시켜서 환경을 유지시키는 방법입니다. 하지만 이전에도 말했듯이 이러면 Lambda의 장점을 다 없애버리는 행위입니다.
그리고 이전에는 Lambda의 코드 사이즈가 매우 작았습니다. 하지만 머신러닝 학습 같은 요청을 하게 되면 함수 코드의 사이즈와 외부 패키지 사이즈가 매우 커지게 됩니다. 따라서 이러한 부분을 아주 많이 고려해 주어야 합니다.
또한 Lambda의 Scaling구조는 이와 같습니다. 직관적으로 이해가 될거라 믿습니다. 또한 Lambda는 최대의 컨테이너의 갯수가 정해져 있어, 전체 서비스를 Lambda로 구현하는 것은 매우 좋지 못한 선택입니다.
그리고 Reserved concurrency를 설정할 수 있습니다. 이는 많이쓰이는 API와 많이 쓰이지 않는 API에 할당하는 인스턴스를 설정하는 방법입니다.
버전관리와 Alias
Alias는 버전을 포인팅 하는 것입니다. 이전에 canary배포를 할 때에를 보면 Alias에 여러개의 버전을 포인팅 시킬 수도 있습니다.
환경변수 설정
AWS Lambda내에서 환경변수를 설정할 수 있습니다. 그리고 이 정보를 코드 내로 불러올 수 있습니다. 민감한 정보를 넣는 것이 좋습니다.
Layers
만약에 lambda 함수 3개가 다 똑같은 의존성을 가지고 있다고 해 봅시다. 그리고 람다에다가 이와 관련된 zip파일을 올려야 하는데, 중복되는 패키지가 있어 매우 비효율적이게 됩니다. 그리고 Cold Start의 시간도 늘어나게 되어 비효율적이게 됩니다. 그래서 이러한 비효율성을 해결하기 위해서 Layers라는 개념이 등장했습니다.
이는 어떠한 환경적인 부분을 하나로 퉁 칠 수 있게 하는 UI라고 보시면 됩니다. 만약 Layer1에 위에서 필요한 패키지를 등록하고 Lambda 함수 3개를 이 Layer에 연결만 하면 따로 zip파일을 연결 안해도 되는 것입니다.
Step Function
이와 같은 마이크로 서비스가 있다고 해 봅시다. 만약 시험지를 업로드하고, 이를 S3에 저장하고, 이 올린 시험지가 진짜 시험지가 맞는지 검수하는 과정을 1 -> 2 -> 3차례대로 거칩니다. 그리고 검수를 통과하면 4로 가서 다른 시험지를 볼 수 있는 권한을 주고, 아니라면 다시 1로 돌아가게 하는 프로세스를 거쳐야 한다고 해 봅시다.
이를 마이크로 서비스로 구현하면 당연히 RabbitMQ를 통해서 유기적으로 소통해야 합니다. 하지만 이를 짜는 것은 쉽지 않습니다. 그런데, AWS Lambda에는 이를 도와주는 서비스가 있는데 이것이 Step Functions입니다.
이와 같이 Step Function으로 짤 수 있습니다. Lambda의 큰 특성 중 하나가 독립성이라 했는데, 이 독립성 때문에 위 과정이 쉽게 구현이 되는 것입니다.
AWS Lambda와 EFS
EFS는 Lambda가 너무 독립적이기 때문에 필요한 기능입니다.
Lambda 함수 1, 2, 3이 있다고 하면, 각각의 파일 시스템도 따로 있습니다. 그리고 용량도 매우 적어서 매우 좋지 않습니다. 그리고 함수 1, 2, 3이 실행이 완료되고 멈추면 파일 시스템이 날라가는 휘발성입니다. 이러한 Stateless를 Stateful하게 사용할 수 있는 것이 Elastic File System입니다.
이를 사용하게 되면, 모든 Lambda함수들이 같은 파일시스템이 접근할 수 있게 하면 다음과 같은 장점이 있을 수 있습니다. Lambda는 15분내에 요청이 끝나지 않으면 멈춘다고 했습니다. 따라서 머신러닝과 같이 시간이 많이 필요한 요청에는 접학하지 않습니다. 그런데, 이를 외부 EC2에서 실행시키게 한다음에, 이 결과를 EFS로 저장하게 되면, 이야기가 달라지게 되는 것입니다.
그래서 Lambda Function에서는 연산이 적고 시간이 오래 걸리지 않고, 간헐적인 요청만 처리할 수 있게 됩니다.
이제 다음시간부터는 이 모든 내용을 간단히 실습해 보도록 하겠습니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - (AWS Lambda) 환경변수 설정 (0) | 2022.07.19 |
---|---|
[ DevOps ] - (AWS Lambda) 버전관리와 Alias (0) | 2022.07.19 |
[ DevOps ] - (API 게이트웨이) Cors (0) | 2022.07.19 |
[ DevOps ] - (API 게이트웨이) Canary 배포 (0) | 2022.07.19 |
[ DevOps ] - (API 게이트웨이) Lambda와 Rest API Gateway 연결 (0) | 2022.07.19 |