devops

AWS Lambda & API Gateway 본문

DevOps/AWS

AWS Lambda & API Gateway

vata500 2022. 6. 21. 10:26
반응형

Lambda

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

FaaS

  • FaaS는 자체 서버시스템이나, 수명이 긴 서버 어플리케이션을 관리하지 않고 백엔드 코드만 실행하는 것
  • 런타임에 대한 사전 세팅 및 준비가 노필요
  • 기능에는 상태 및 실행 기간과 관련 아키텍처 제한이 많다.
  • 수평적 확장은 완전 자동이며 탄력적으로 공급자가 관리할 수 있다.
  • 기능은 일반적으로 공급자가 정의한 이벤트 유형에 의해서 트리거된다. 

Lambda 특징

  • 서버를 프로비저닝하거나 관리할 필요없다. 작성한 코드를 백엔드 서비스로 배포할 수 있다.
  • Lambda를 실행하려면 어플리케이션이나 백엔드 서비스의 코드를 작성하고 이벤트 트리거만 정의하면 된다.(Amazon S3 업로드, Dynamo DB 업데이트, Kinesis 스트리밍 등 요청, 이벤트 주도 아키텍처도 구성 가능)
  • 높은 가용성을 제공한다.

Lambda 단점

  • 24시간 내내 돌아가는 것이아니다. 그래서 요청이 올때 AWS가 Lambda를 실행하는 시간을 사용하여 응답속도가 느릴 수 있다.
  • 요청이 적을 때는 문제가 없으나, 많을 때는 응답속도에 영향을 준다.
  • 그래서 함수가 멈추지않고 대기하는 기능을 추가할 수도 있다.
  • 지나치게 AWS에 의존한다. 백엔드를 AWS Lambda에 배포한 후, 다른 곳으로 마이그레이션하는 것이 쉽지않다.
  • EC2와 같은 서버 사용 시 EC2 내에서 실행되는 AWS를 다른 클라우드 사업자의 컴퓨팅 리소스로 옮기는 것은 쉬우나, 서버리스는 클라우드 사업자의 요구사항에 맞는 코드가 작성되어야 한다.

Lambda 함수

Lambda 실행 코드는 Lambda 함수로 업로드된다. 각 함수에는 이름과 설명, 진입점, 리소스 요구 사항 등 연관된 구성 정보가 포함되어 있다.

코드는 Stateless 스타일로 작성되어야 한다. (기본 컴퓨팅 인프라에 대한 선호도가 없다고 가정)

로컬 파일 시스템 액세스, 하위 프로세스 및 아티팩트는 요청 수명 기간 이상 확장될 수 없다. 또한, 모든 지속 상태는 S3, DynamicDB, EFS, 다른 인터넷 스토리지 서비스에 저장되어야 한다.

* Lambda 함수가 Stateless여야 하는 이유는 함수 사본을 빠르게 시작해 수신 이벤트 비율에 따라 조정가능하다. 또한, 코드를 통해서 S3와 DynamicDB를 호출하면 상태 저장 데이터에 액세스할 수 있다.

Lambda 함수 작성

Node.js와 Python의 경우 Lambda 콘솔의 코드 편집기로 함수 코드를 작성하고 테스트 가능하다. 함수로 테스트하여 IDE와 유사한 환경에서 함수 실행 결과를 확인할 수 있다.

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

Lambda 함수의 핸들러는 이벤트를 처리하는 함수다. 함수가 호출되면 Lambda는 핸들러 메서드를 실행한다.

- event : 호출자로부터 정보가 포함된 event 객체다. 이 정보는 함수를 호출할 때 JSON 형식 문자열로 전달, 런타임은 이 정보를 객체로 변환한다. AWS가 함수를 호출할 때 이벤트 구조는 서비스별로 다르다.

- context : 컨텍스트 객체는 호출, 함수 및 실행 환경에 대한 정보를 포함한다.

- callback : 비동기 응답을 전송하기 위해 필요하다. (async 키워드로 promise를 대신해서 사용가능)

트리거

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

1) 이벤트가 호출을 유도
2) Lambda가 대기열, 데이터 스트림을 폴링하고 대기열 또는 데이터 스트림의 활동에 대한 응답으로 함수 호출

Lambda 함수 로깅(Node.js)

Lambda는 다른 AWS 서비스와 통합하여 Lambda 함수를 모니터링하고 문제해결하는 데 도움을 준다. Lambda는 자동으로 Lambda 함수를 모니터링하고 CloudWatch를 통해서 측정치를 보고한다.

실행 시 코드를 모니터링할 수 있게 Lambda에서는 요청 수와 요청당 호출 기간, 오류를 유발하는 요청 수를 자동으로 추적 가능하다.

+ 코드에 Console.log 구문 삽입하거나 코드의 모든 로그를 /aws/lambda/<함수 이름> 으로 CloudWatch Logs 그룹에 푸시하면 log확인 가능하다.


API Gateway

AWS API Gateway

API Gateway는 경로와 엔드포인트로 구성된 HTTP 서버를 말한다. 경로는 경로를 처리하는 리소스와 연결되며, 서버리스 아키텍처에서 이 핸들러는 FaaS 기능을 사용한다. 쉽게 말해서, API Gateway는 각 API 요청의 관문 역할을 한다.

API Gateway가 요청을 수신하면 요청과 일치하는 라우팅 구성을 갖고 관련 FaaS 기능을 호출한다. 일반적으로 API Gateway는 HTTP 요청 매개변수에서 FaaS 기능을 간결한 입력으로의 매핑을 허용하거나 전체 HTTP 요청이 일반적으로 JSON 객체로 전달되게 허용한다.

FaaS 기능은 로직을 실행하고 결과를 API Gateway에 반환하며, 이 결과를 원래 호출자에게 다시 전달하는 HTTP 응답으로 변환한다.

API Gateway가 중요한 이유

마이크로서비스 아키텍처가 부상하면서 MSA 구성에 접목되는 서비스가 API Gateway다. API Gateway는 마이크로서비스를 연결하는 중간다리 역할을 담당하고 현재는 MSA에 핵심 기능이 되었다.

API Gateway 사용이유

마이크로서비스는 어플리케이션을 느슨하게 결합된 여러 서비스로 분해할 수 있다. 그러나 고객이 어플리케이션에 빠르고 안전하게 액세스하는 것이 어려워질 수 있는데, 이를 API Gateway가 해결해준다.

고객이 각 마이크로서비스 액세스를 개별적으로 요청하지만 게이트웨이는 요청에 대한 Entrypoint로 해당 요청을 적절한 서비스에 연결하고 결과를 수집하여 요청자에게 전달해준다. (이를 라우팅이라고 함)

API 게이트웨이는 중요하다. 고객을 서비스와 연결하는 주요 프록시의 역할로써 인증, 메트릭 수집, 입력 유효성 검사 및 응답 변환 등 관리와 보안 기능을 지원한다.

 

반응형
Comments