[AWS] Lambda

xgro·2022년 6월 21일
0

AWS

목록 보기
3/19

📌 AWS Lambda란?

Lambda는 AWS가 제공하는 서버리스 FaaS 솔루션으로, 함수의 인스턴스를 실행하여 이벤트를 처리합니다.

FaaS란?

  • FaaS는 자체 서버 시스템이나 수명이 긴 서버 애플리케이션을 관리하지 않고 백엔드 코드를 실행하는 것
  • FaaS는 런타임(node.js, Java 등)에 대한 사전 준비가 필요하지 않음
  • FaaS 기능에는 특히 상태 및 실행 기간과 관련하여 상당한 아키텍처 제한이 있음
  • 수평적 확장은 완전 자동이며 탄력적이며 공급자가 관리함
  • FaaS의 기능은 일반적으로 공급자가 정의한 이벤트 유형에 의해 트리거됨
    • HTTP 요청에 대한 응답으로 트리거되도록 만들 수 있음

👉 AWS Lambda의 특징

  • 서버를 프로비저닝하거나 관리할 필요 없이 작성한 코드를 백엔드 서비스로서 배포할 수 있게 해줍니다.
  • Lambda 함수를 실행하려면, 애플리케이션 또는 백엔드 서비스의 코드를 작성한 뒤 이벤트 트리거만 정의하면 됩니다.
    • 이벤트 트리거의 대표적인 예: Amazon S3 업로드나 DynamoDB 업데이터, Kinesis 스트리밍, API 게이트웨이 요청
    • 이벤트 주도 아키텍처(Event Driven Architecture)를 구성할 수 있습니다.
  • 높은 가용성을 제공합니다.

👉 AWS Lambda의 단점

  • 24시간 내내 돌아가고 있는 상태가 아니고, 요청이 올때 AWS가 Lambda를 깨우는데 시간을 사용하기 때문에 응답의 속도에 차이가 있다. 요청이 적을 때는 의미가 없지만 요청이 많을 때는 이 차이가 응답 속도에 영향을 준다.

  • 클라우드 공급자인 AWS에 의존성이 높아진다.
    백엔드를 AWS Lambda에 배포했을 때 다른 플랫폼으로 옮기고 싶을 때, 한 서버리스에서 다른 쪽 서버리스로 마이그레이션 하는 것이 쉽지 않다.
    EC2와 같은 서버를 사용할 경우, EC2 내에서 실행되는 WAS 프로그램을 다른 클라우드 사업자의 컴퓨팅 리소스로 옮겨 실행하기만 하면 되지만, 서버리스는 클라우드 사업자의 요구사항에 맞는 코드가 작성되어야 함.

📌 AWS Lambda 함수

  • AWS Lambda에서 실행하는 코드는 'Lambda 함수'로 업로드 됩니다.
  • 각 함수에는 이름과 설명, 진입점, 리소스 요구 사항 등 연관된 구성 정보가 포함되어 있습니다.
  • 코드는 Stateless 스타일로 작성되어야 합니다. 즉, 기본 컴퓨팅 인프라에 대한 선호도가 없다고 가정해야 합니다.
  • 로컬 파일 시스템 액세스, 하위 프로세스 및 유사한 아티팩트는 요청 수명 기간 이상 확장될 수 없으며, 모든 지속 상태는 Amazon S3, Amazon DynamoDB, Amazon EFS 또는 다른 인터넷 사용 스토리지 서비스에 저장되어야 합니다.

Q. Lambda 함수가 Stateless여야 하는 이유가 무엇인가요?
A. 함수를 상태 비저장으로 유지하면 AWS Lambda에서 필요한 만큼 함수 사본을 빠르게 시작하여 수신 이벤트 비율에 따라 조정할 수 있습니다. 비록 AWS Lambda의 프로그래밍 모델은 상태 비저장이지만, 코드를 통해 Amazon S3 또는 Amazon DynamoDB 등 다른 웹 서비스를 호출하면 상태 저장 데이터에 액세스할 수 있습니다.

📌 AWS Lambda 함수 작성

Node.js 또는 Python을 사용하는 경우 AWS Lambda 콘솔의 코드 편집기를 사용하여 함수 코드를 작성하고 테스트할 수 있습니다. 이렇게 함수를 작성하고 테스트하여 IDE와 유사한 환경에서 함수 실행 결과를 볼 수 있습니다.

"새로 작성"을 통해 생성된 함수 코드를 살펴봅시다.

exports.handler = async (event, context) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

Lambda 함수의 핸들러(handler)는 이벤트를 처리하는 함수입니다. 함수가 호출되면 Lambda는 핸들러 메서드를 실행합니다.

이 때 전달되는 3개의 인수(parameter)는 다음과 같습니다.

  1. event:
    첫 번째 인수는 호출자로부터의 정보가 포함된 event 객체. 이 정보는 함수를 호출할 때 호출자가 JSON 형식 문자열로 전달하고, 런타임은 이 정보를 객체로 변환한다. AWS 서비스가 함수를 호출할 때, 이벤트 구조는 서비스별로 다르다.
  2. context:
    두 번째 인수는 컨텍스트 객체이며, 호출, 함수 및 실행 환경에 대한 정보가 포함되어 있음.
  3. callback:
    세 번째 인수는 callback이다. 비동기 응답을 전송하기 위해 필요하며, 위 코드와 같이 async 키워드를 이용해 promise 객체를 대신하서 사용할 수 있다.

응답 객체는 상태코드와 함께 응답을 JSON 문자열 형태로 반환해야 한다.

📌 트리거

트리거는 Lambda 함수를 호출하는 리소스 또는 구성입니다. 트리거에는 이벤트 소스를 제공하는 AWS 서비스가 포함될 수 있다.

Lambda와 함께 사용하는 서비스에 따라 호출은 일반적으로 두 가지 방법 중 하나로 작동한다.
1. 이벤트가 호출을 유도하거나,
2. Lambda가 대기열 또는 데이터 스트림을 폴링하고 대기열 또는 데이터 스트림의 활동에 대한 응답으로 함수를 호출한다.

✅ 레퍼런스 참조

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/welcome.html
https://shouldroforion.medium.com/battle-of-the-serverless-part-2-aws-lambda-cold-start-times-1d770ef3a7dc

profile
안녕하세요! DevOps 엔지니어 이재찬입니다. 블로그에 대한 피드백은 언제나 환영합니다! 기술, 개발, 운영에 관한 다양한 주제로 함께 나누며, 더 나은 협업과 효율적인 개발 환경을 만드는 과정에 대해 인사이트를 나누고 싶습니다. 함께 여행하는 기분으로, 즐겁게 읽어주시면 감사하겠습니다! 🚀

0개의 댓글