티스토리 뷰

728x90
반응형

API Gateway

Amazon API Gateway

Amazon API Gateway는 사용자가 쉽게 API를 생성, 게시, 관리, 모니터링, 보안까지 관리가 가능한 완전관리형 서비스이다. Amazon API Gateway는 트래픽 관리, CORS 지원, 권한 부여 및 액세스 제어, 제한 모니터링 및 API 버전 관리 등 최대 수십만 개의 동시 API 호출을 수신 및 처리하는 데 관계된 모든 작업을 처리한다. 선택 옵션으로는 REST API, WebSocket API, HTTP API가 있다.

REST API

REST는 'Representational State Transfer'의 약자이다. (대표적인 상태 전달)

REST API 특징

  • 클라이언트/서버
    REST 서버는 API를 제공하고 이를 클라이언트에서는 사용자 인증이나 컨텍스트 등을 직접 관리하는 구조가 된다. 이 때 각각의 역할이 명확하기에 서로 의존성이 낮다.
  • 무상태(Stateless)
    상태가 존재하지 않는다. 이는 상태 값을 갖고 있지 않으며, 요청받은 정보에 대해서 주고받기만 한다.
  • 캐싱 처리 가능(Cacheable)
    HTTP를 이용하기 때문에 HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱을 구현할 수 있다. 캐시를 사용하면 응답시간이 빠르며, 서버의 자원 사용률이 향상하는 등의 장점이 있다.
  • 계층화
    REST 서버는 다중 계층으로 구성할 수 있다. 이에 보안, 암호화 계층, 로드 벨런싱을 추가하여 구조적으로 유연하게 관리할 수 있다. 또한 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있다.
  • Code-On-Demand
    이는 필수적이지 않지만 서버로부터 스크립트를 받아 클라이언트에서 실행하는 것이다.
  • 인터페이스의 일관성
    REST는 URI로 지정한 자원에 대해 통일하여 한정적인 인터페이스로 수행하는 아키텍처 스타일을 의미한다. 우리는 어떠한 서버 언어를 사용하거나 어느 플랫폼을 사용하는지에 따라 영향을 받지 않고 사용가능하다.

인터페이스의 일관성 제약조건

  • Identification of resources
    Resource를 URI로 식별한다.
  • Manipulation of resources through representations
    Representations은 GET, POST, PUT, DELETE
  • Self-Descriptive Messages
    메시지만으로 어떤 기능인지 이해할 수 있어야 한다.

AWS Lambda

AWS Lambda란

AWS Lambda란 아마존 웹 서비스에서 제공하는 FaaS 서비스이다.

AWS Lambda의 동작

AWS Lambda는 이벤트를 감지하여 아마존 리눅스 환경의 Micro VM을 띄우고 함수를 실행한다. 그리고 결과를 처리한다. 함수가 실행될 때 필요한 환경이 있는데, 이것을 런타임이라고 한다. 런타임은 어떤 언어로 작성하는지에 따라 다르며, 그 환경에 따라 성능 차이가 있다.

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

AWS Lambda의 Cold Start 그리고 Warm Start

Lambda가 실행되면 작성한 코드를 다운로드한다. 그리고 실행환경을 구성한다. 이때를 Full cold start라고 한다. 런타임을 준비하는 과정은 Partial cold start라고 한다. 마지막으로 함수가 실행될 때를 Warm start라고 한다.

이처럼 함수가 실행될 때 순서가 정해져 있고 이에 따라 지연시간이 발생한다. Micro VM이 올라갔다가 내려간 뒤 다시 실행하면 Full cold start부터 시작한다. 만약 VM이 유지되는 시간 이전에 재요청하면 Partial cold start가 바로 진행되어 지연시간을 줄일 수 있다.

지속적인 호출을 통해 구동되어 있는 Micro VM을 유지하면 cold start를 줄일 수 있다. 이를 보통 5분마다 호출하라고 AWS는 권하고 있다.

Provisioned Concurrency on AWS Lambda 서비스도 있다. 프로비저닝 동시성인데 함수를 지속적으로 초기화하고 아주 빠르게 준비하여 Cold start를 줄인다.

AWS Lambda의 런타임

AWS Lambda에서는 런타임을 사용하여 각각 다른 언어들로 작성한 코드도 동일한 기본 실행환경에서 실행할 수 있다. 런타임은 AWS Lambda 서비스와 작성한 함수코드 사이에 위치해 이벤트와 컨텍스트 정보 등 응답을 중계해주는 역할을 한다. 기본적으로 제공하는 런타임 환경이 있고, 직접 필요한 런타임 환경을 만들어 사용할 수 있다.

제공하는 런타임 환경에는 여러 언어를 지원한다. 함수를 생성할 때 런타임을 선택할 수 있고, 필요시 런타임 환경을 변경할 수 있다. 제공하는 런타임 환경에서는 각 언어의 버전별 또는 운영체제의 수명이 60일 이내로 예정될 때 마이그레이션 안내 메일을 발송해준다. 런타임 지원이 중단되면 AWS Lambda는 호출을 비활성화 한다. 사용 중단된 런타임은 보안 업데이트 기술지원을 받을 수 없기에 마이그레이션이 필수적이다.

AWS Lambda의 Event

Lambda 함수로 서비스를 호출하는 방법은 동기식과 비동기식이 있다.

동기식은 클라이언트가 람다 함수에 이벤트를 보내고 클라이언트는 함수의 응답을 받을 수 있다. 동기식으로 호출할 경우 파라미터 값을 invoke로 실행한다(invoke?).

비동기식은 클라이언트의 요청 이벤트와 람다 함수 사이에 대기열을 이용하는 것이다. 이때 클라이언트는 성공응답만 받는다. 비동기식으로 호출할 경우에는 호출유형 파라미터 값을 Event로 설정해야 한다. 동시성 설정이 작게 되어 있을 경우나 서버 오류일 때는 이벤트를 대기열로 다시 보내고 이는 최대 6시간 동안 재시도를 한다. 그리고 이벤트는 대기열에서 삭제될 수 있다.

결국 이런 상황을 조금 더 섬세하게 컨트롤 하기 위해서는 오류 처리를 구성하고 재시도 횟수를 줄이거나 처리되지 않은 이벤트를 체크해야 한다. 이 때 다른 AWS 서비스를 같이써서 해결을 하기도 한다(ex: SQS).

동시성이란 동시에 요청을 처리할 수 있는 함수의 수이다. 이는 리전에 따라 한도가 다르다. 동시성 설정이 중요한 이유는 병목현상이 일어날 수 있는 흐름을 예상한다면 동시성의 최대 인스턴스 수를 지정함으로써 안전한 서비스를 유지할 수 있다. 만약 동시성을 10개로 잡았는데 10개의 인스턴스로 처리할 수 없는 양이 되었을 때 오류 코드 번호 492를 리턴한다.

버저닝(Versioning)

AWS Lambda는 버저닝을 지원한다. 함수를 게시할 때마다 새 버전으로 생성되어 히스토리로 남길 수 있다. 필요시 백업용으로 사용이 가능하여 함수 관리가 용이하다. 만약 배포를 잘못한 경우 비저닝으로 생성해둔 과거의 버전으로 롤백이 가능하다. 버전이 저장되면 소스코드에 대한 수정은 불가능하다.

계층(Layer)

AWS Lambda는 라이브러리를 패키징하여 계층으로 사용할 수 있다. 예를 들어 공통적으로 사용하는 모듈단위가 있다면, 패키징해서 레이어로 재사용할 수 있다는 것.

레이어를 사용하지 않으면 하나의 함수 용량이 클 수 있으며, 비슷한 용도로 사용되는 함수들에 대해서도 각각의 함수가 허용되는 용량보다 클 수 있다. 또한 패키징한 라이브러리의 버전이 올라가면 신규 라이브러리에 대해 기존에 등록한 레이어에 추가하여 버전을 올리면 되지만 각각의 함수에 라이브러리를 참조하도록 구성하면 함수를 모두 하나식 수정해야하는 번거로움이 있다.

레이어는 하나의 함수에서 최대 5개를 사용할 수 있고, 버저닝을 지원한다.

파일 시스템(File System)

2020년 6월 부터 Lambda에서 AWS EFS(Elastic File System)를 사용할 수 있게 되었다. 기존에 용량 제한이 있는 Lambda를 파일 시스템을 사용함으로써 용량에 제한이 없어졌다. 이를 통해 무거운 라이브러리 패키지를 사용하는 것이 가능하게 되었다. 예를 들면 PyTorch 같은 무거운 라이브러리 패키지를 AWS EFS에 세팅한다. 이를 Lambda에서 사용하여 미리 학습된 모델을 이용하여 다양한 기능을 구현할 수 있다.





출처
AWS Lambda로 시작하는 서버리스(김민준 저, 비제이퍼블릭)
example

728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
링크