WiseN

[Re18특집] Application Load Balancer에서 Lambda 함수 호출 지원

Dec 19,2018   |   AWS

작성자_이 홍섭

페이스북 공유하기 트위터 공유하기
Blog thumbnail

여기서 다루는 내용



· 서론
· 주요 기능 및 동작 테스트
· 정리





서론






안녕하십니까, GS네오텍 이홍섭입니다.

이번 Re:Invent 2018에서 Application Load Balancer가 Lambda 함수를 호출하여 HTTP/HTTPS 요청을 처리할 수 있게 되었습니다.

이제는 ALB가 EC2, Container, Lambda 등에서 제공하는 모든 요청에 대해 HTTP Endpoint를 제공할 수 있습니다.

오늘은 이 기능에 대해서 살펴보고자 합니다.





주요기능 및 동작 테스트






서비스의 특징은 다음과 같습니다.


  • 서버리스 어플리케이션에 접근하는 유저가 Lambda함수를 통해 HTTP/HTTPS 요청을 처리할 수 있음

  • ALB 규칙을 사용하여 path 또는 header 값을 기준으로 HTTP 요청을 보낼 수 있음

  • ALB는 요청 본문, 메타데이터가 포함된 이벤트와 람다를 동시에 호출함

  • ALB의 가격 차이는 없으나 ALB의 대상을 람다로 지정하였을 때 LCU(Load balancer Capacity Units)의 시간당 처리율이 0.4GB 포함됨

  • 지원 리전 : US East (N. Virginia, Ohio), US West (Northern California, Oregon), Asia Pacific (Seoul, Singapore, Sydney, Mumbai, Tokyo), Canada (Central), EU (Frankfurt, Ireland, London), Paris), South America (São Paulo), and GovCloud (US-West)


이 기능의 큰 장점은 서버리스 서비스를 이용하는 유저가 Lambda를 외부에서 간단하게 호출할 수 있다는 점입니다.

쉽게 이해하기 위해 외부에서 DynamoDB의 테이블 리스트를 읽어오는 테스트를 준비하였습니다.

참고로 테스트는 서울 리전에서 진행하겠습니다.


※ Lambda Role

테스트를 진행할 때 가장 중요한건 권한을 최소화하는 것입니다.

DynamoDB 테이블 읽기-권한만 필요하기 때문에 위 그림처럼 AmazonDynamoDBReadOnlyAccess을 선택하여 역할을 생성합니다.


※ DynamoDB Table List

Lambda 함수에서 읽어올 DynamoDB 테이블을 생성해 둡니다. GSNTable1부터 4까지 미리 생성하였습니다.


※ 데모로 사용할 Lambda Function

간단한 코드입니다.
접근하는 계정 정보를 설정한 이후에 DynamoDB의 테이블을 읽어서 화면에 찍어내는 것이 끝입니다.

(런타임 환경 : Python 2.7)


※ Routing Configuration

업데이트된 ALB 속성을 확인해보겠습니다.

어려운 부분은 없습니다. 간단하게 대상 유형에서 Lambda 함수를 선택하고 경로를 지정해주면 됩니다.

여기서 특이점으로 Health check가 가능하기 때문에 상태확인이 가능합니다.


※ Create Target Group

Lambda 함수를 등록하는 것도 어렵지 않습니다.

목록에서 선택하거나 ARN으로 등록해도 되며 나중에 추가하는 것도 가능합니다.


※ Target Status Check

※ ALB 요청에 대한 응답

대상 등록에서 Health check의 상태가 healthy로 확인이 되었다면
위 그림처럼 DynamoDB 테이블 리스트가 제대로 나열됨을 확인할 수 있습니다.





정리






이 기능에도 물론 제약사항이 존재합니다.

제한되는 부분은 ALB가 Lambda 함수를 대상으로 하는 Target Group 요청을 JSON 형태로 주고받을 때 주로 발생합니다.


  • Lambda 함수에 보낼 수 있는 본문 요청(JSON)의 크기는 최대 1M로 제한

  • Lambda 함수가 보낼 수 있는 응답(JSON) 크기는 최대 1M로 제한

  • WebSocket은 지원하지 않으며 업데이트 요청도 400으로 거절됨



지금까지 Application Load Balancer으로 Lambda 함수 호출하는 기능을 알아보았습니다.

기존에 HTTP/HTTPS를 통해 Lambda 기능을 호출하기 위해서는 API Gateway를 사용하거나 다른 프락시 솔루션이 필요했습니다.
그러나 이번에 추가로 나온 기능을 통해 Lambda 함수를 간편하게 호출할 수 있게 되었습니다.

ALB를 활용하여 서비스하는 서버리스 컴퓨팅 분야에서 운영하거나 혹은 모니터링 기능을 단순화할 수 있을 것으로 보이네요.

마칩니다. 끝!