본문 바로가기

AWS

AWS Lambda란 ?

Lambda란 ? 

  • 컨테이너 기반 서버리스 Faas 컴퓨팅 서비스
    • 서버리스 : 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드/실행할 수 있도록 하는 클라우드 모델
      • BaaS (Backend as a Service)
        • 애플리케이션에 필요한 다양한 기능들을 API로 제공해 줌으로서 서버 개발을 하지 않고도 기능을 사용할 수 있다
        • ex) firebase
      • Faas (Function as a Service)
        • 프로젝트를 함수 단위로 만들어서 컴퓨팅 자원에 함수를 등록하고 실행되는 횟수만큼 비용 지불
        • 확장성에 대해 고민할 필요 없다. 호출된 횟수만큼 비용 지불하면 된다
        • 함수에서 사용할 수 있는 메모리/처리 시간에 제한이 있다
  • 이벤트를 감지해 아마존 리눅스 환경의 Micro VM을 띄우고 함수를 실행해 결과를 처리한다
  • 병렬로 실행되며, 각 트리거는 개별적으로 처리되어 높은 정확도, 속도 가짐
  • Lamda Edge를 통한 사용자와 가까운 location의 서버에서 실행
  • 실행시 컨테이너 기반으로 프로세스가 올라간다.
  • 각 요청은 하나의 Lamda 함수를 지닌 단일 인스턴스에서 제공한다
  • 동시성 : 컨테이너가 동시에 몇 개 실행되는지
    • 동시성 제어 방법
      • 예약된 동시성 (Reserved Concurrency)
        • 함수에 대한 최대 동시 인스턴스 보장
        • 한 함수가 동시성을 예약하면 다른 함수는 해당 동시성 사용 불가
      • 프로비저닝된 동시성 (Provisioned Concurrency)
        • 함수의 호출에 즉시 응답할 준비가 되도록 요청된 수의 실행 환경을 초기화
  • 서울 리전은 Burst quota가 500개다
    • Burst quota : 처음 Lambda를 트리거했을 때 동시에 실행할 수 있는 컨테이너의 갯수 제한. 최초 버스터 이후 매분 500개의 추가 인스턴스까지 확장될 수 있다 
  • AWS 서비스와 Saas 애플리케이션에서 Lambda를 트리거 할 수 있다
  • 기본적으로 Java, Go, PowerShell, Node.js, C#, Python 및 Ruby 코드를 지원하며, 그 밖에 프로그래밍 언어를 사용해 함수를 작성할 수 있도록 Runtime API도 제공
  • 컨테이너 이미지로 함수를 패키징하고 배포할 수 있다 
  • Amazon RDS 프록시를 사용해 RDB에 대한 수천 개의 동시 연결을 효율적으로 관리하므로 RDB와 상호 작용하는 확장성이 높고 안전하다
  • AWS Step Functions 워크플로를 구축하면 복잡하고 장기간 실행되는 테스크를 다수의 Lambda 함수로 구축할 수 있다 
  • Runtime을 사용하여 각각 다른 언어로 작성한 코드를 동일한 실행환경에서 실행할 수 있다. Runtime은 AWS Lambda 서비스와 함수 코드 사이에 위치해 이벤트와 컨텍스트 정보 등 응답을 중계해주는 역할을 한다
  • Full cold start : Lambda가 실행되면서 코드를 다운로드 하고 실행환경을 구성
  • Partial cold start : 런타임을 준비하는 과정
  • Warm start :  함수가 실행될 때 
  • 서비스를 호출하는 방법은 Synchronous와 Asynchronous가 있다. Synchronous는 클라이언트가 람다 함수에 이벤트를 보내고 클라이언트는 함수의 응답을 받을 수 있다. 이때 파라미터 값을 invoke로 실행한다. 비동기식은 클라이언트의 요청 이벤트와 람다 함수 사이에 대기열을 이용하는 것이다. 이때 클라이언트는 성공 응답만 받고 호출 유형 파라미터 값을 Event로 설정해야 한다.
  • 비동기식으로 진행할 때 오류가 발생하면 이벤트를 대기열로 다시 보내고 재시도를 한다. 이벤트는 대기열에서 삭제될 수 있다. 그렇기 때문에 동시성을 어떻게 조절하느냐에 따라 이벤트를 보장할 수 있다
  • 메모리만 설정하고 다른 리소스(CPU성능, 네트워크 대역폭..)는 설정한 메모리 값에 따라 자동적으로 할당된다. 할당되는 리소스 정보는 제공해주지 않는다    
  • 환경 변수를 설정해 코드에서 사용할 수 있다 
  • 함수를 게시할 때마다 새 버전으로 생성되어 히스토리로 남길 수 있다 
  • JSON 형식의 테스트 데이터를 이용해 함수를 테스트할 수 있다
  • 함수들이 공통적으로 사용하는 모듈 단위가 있다면 패키징 해서 Layer로 재사용할 수 있다
  • AWS EFS(Elastic File System)을 사용해 무거운 패키지를 사용할 수 있다

내부 구조

  • 람다가 실행되면 아마존 리눅스 OS 기반의 Micro VM이 실행된다. 환경 변수 등 실행 환경을 맞추고, 지정한 언어별 런타임 환경을 준비한다. 그리고 작성한 함수를 실행한다 

  • Compute substrte : 함수가 실행될 Micro VM
  • Excecution Environment : 환경 변수 등의 실행환경
  • Language runtime : 언어별 런타임 
  • Function : 함수

장점

  • 빠른 개발, 배포
  • 자동으로 Auto-Scaling이 되서 운영 관리 부담 줄어듦
  • 필요할 때만 함수를 호출하므로 비용 절감

단점

  • 함수가 호출되면 새로운 컨테이너를 띄우는 방식이기 때문에 별도의 상태 저장을 하지 않는다.
  • DB connection 유지 같은 기능은 수행하지 못한다
  • 리전별로 동시 실행 함수 개수를 1000으로 제한한다. 부하테스트는 실행 테스트를 높여 Dos 공격을 만들 수 있다
  • 하나의 함수가 한 번 호출될 때 메모리는 최대 10GB, 처리시간은 최대 15분까지 가능하다
  • cold start
    • 람다는 컨테이너를 생성해서 함수를 실행하는데까지 걸리는 시간
    • 람다 함수를 호출하면 요청은 람다를 실제로 수행하는 실행환경(execution environment)로 전달된다.
    • 이 함수가 특정 시간 동안 사용된 적 없거나 함수가 업데이트되었다면 AWS는 내부적으로 새로운 실행환경을 만들고 람다 함수를 install 한다
    • 해결방안: 람다를 주기적으로 호출, 람다 메모리 스펙 높이기, 프로비저닝(사용자의 요구에 맞는 시스템을 제공할 수 있도록 만들어 놓는 것)된 동시성 활성화 https://aws.amazon.com/ko/blogs/korea/new-provisioned-concurrency-for-lambda-functions/
  • 로그 보기가 불편 (CloudWatch를 통해 볼 수 있지만 불편)
  • 서비스 제공사에 의존적

추천 사례

  • 단기간 이벤트성 트래픽을 감당하는 경우
    • 필요할 때 동적으로 자원 할당받아 사용하기 때문에 급격한 트래픽 변화에 유연
  • 반복적인 배치 처리 형태의 기능 개발
    • 라이브 스트리밍에 대한 로그 분석, 음성이나 텍스트를 기반으로 학습된 데이터를 제공하는 인공지능 기능
  • 관리보다 개발에 집중할 경우
  • 파일 업로드 기능 / 썸네일 생성 기능
  • 크롤링, 배치, 스케줄러

'AWS' 카테고리의 다른 글

AWS 주요 서비스 정리 (1)  (0) 2022.01.21