반응형

Lambda?

Amazon Web Services에서 제공하는 서비리스 컴퓨팅 서비스

  • Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 로깅 등 모든 컴퓨팅 리소스를 관리
  • Lambda를 사용하면 거의 모든 유형의 애플리케이션 또는 백엔드 서비스에 대한 코드를 실행 가능
  • 단, Lambda가 지원하는 언어 중 하나로 코드를 작성해야 함
  • 이러한 Serverless 컴퓨팅은 애플리케이션을 실행하기 위한 별도의 서버 셋업 없이 곧바로 코드를 실행해주는 서비스를 의미하며, 고정 비용 없이 사용 시간에 대해서만 비용이 발생



Lambda는 언제 써야하나?

코드를 계속 실행시키기 보다 특정한 시기에 실행을 시켜야하는 경우에 유용

  • 서버를 띄우지 않고 간단한 코드를 실행 시키고 싶은 경우
  • 특정 기간 또는 특정 주기로 코드를 실행 시키고 싶은 경우
  • 특정 트리거가 발생할 때 특정 코드를 실행 시키고 싶은 경우
  • 유지보수, 기능추가에 효율적이기에 관리보다 개발에 집중할 경우



Lambda 장/단점

장점

  • 비용 절감 : 서버를 켜두지 않고 않고 필요할 때만 함수를 호출하여 처리
  • 인프라 운영비 절감 : 조건없이 자동으로 오토스케일링되기에 서버를 관리할 필요가 없어 인프라 운영에 대한 부담이 감소

단점

  • Resource limit : 하나의 Lambda 함수당 메모리 사용량은 최대 10GB, 처리 시간은 최대 15분
  • 해당 함수 및 모든 익스텐션의 압축 해제된 총 크기는 250MB를 초과할 수 없음
  • Stateless : Lambda 함수 호출 시 새로운 컨테이너를 띄우는 방식이기에 별도의 상태를 저장하지 않음
  • (이전 이벤트의 실행 context에 대한 access 권한이 없다보니 DB connection을 유지하는 것 같은 기능 수행 불가)
  • ColdStart : Lambda를 오래 사용하지 않고 있다가 오랜만에 실행 시 초기 구성 설정으로 인한 딜레이 발생즉, Lambda를 실행하기 위해 컨테이너를 띄어야 하는데, 사용하고 있지 않은 경우 해당 Lambda는 잠시 종료되어있는 상태를 유지, 따라서 오랜만에 사용 시 실행 환경 구성을 위해 시간이 소요
    • Lambda를 주기적으로 호출 : 주기적 호출을 통해 Lambda를 지속 가능하지만 불필요하게 지속만을 위해 호출을 하기에 비용 발생
    • Lambda 메모리 ↑ : Lambda의 메모리를 늘리면 스펙이 향상되어 ColdStart 딜레이가 줄어들 수 있음
    • 프로비저닝된 동시성 활성화 : 함수의 호출에 바로 응답할 수 있게 미리 준비하는 옵션, 해당 옵션 활성화 시 딜레이가 줄어들지만 추가적인 비용 발생
    • ⚠️ 하지만, 늘 ColdStart를 하진 않음 (참고)하지만 함수 코드를 작성할 때 Lambda가 이후 함수 호출을 위해 실행 환경을 자동으로 재사용한다고 가정해서는 안됨
    • 다른 요인으로 인해 Lambda가 새 실행 환경을 생성해야 할 수 있으며 이 경우 DB connection 실패 같은 예기치 못한 결과가 발생 가능
    • 각 실행 환경은 /tmp 디렉터리에 1MB 단위로 512MB와 10,240MB를 1MB 단위로 디스크 공간을 제공 디렉터리 콘텐츠는 실행 환경이 일시 중지되어도 그대로 유지되기 때문에 일시적인 캐시를 여러 호출에서 사용 가능
  • 💡 ColdStart 해결 방법
  • 💡 Lambda Lifecycle : 소스코드 다운로드 → 실행 환경 구성(컨테이너 시작) → 런타임 동작 → 코드 실행 → 종료



동시성 제한

Lambda는 각 리전별로 동시에 실행할 수 있는 Lambda 함수의 개수를 최대 1000개로 제한

  • 따라서 request수가 이를 넘어가면 Lambda가 실행되지 않을 수도 있음
  • 동시성이란 특정 시간에 Lambda 함수가 처리할 수 있는 request의 수
  • 이때 Lambda는 기본적으로 1개의 워커를 가지고있는 컨테이너 개념
  • 따라서 request에 의해 Lambda가 호출되면 하나의 컨테이너를 띄워 작업을 처리 → 동시성↑

 

 

[출처]
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/lambda-runtime-environment.html
https://aws.amazon.com/ko/blogs/compute/container-reuse-in-lambda/
https://aws.amazon.com/ko/lambda/faqs/
https://pearlluck.tistory.com/637

반응형

'Applied > AWS' 카테고리의 다른 글

[AWS] KMS(Key Management Service) 실습  (0) 2022.11.30
Yaml 파일이란?  (0) 2022.09.20
[EKS] Kubenetes 명령어 연습하기  (0) 2022.09.14
AWS aurora database 개념  (0) 2022.09.08
AWS DynamoDB 개념  (0) 2022.09.07