API Gateway와 AWS Lambda로 Serverless API 배포하기
안녕하세요. 오늘은 aws의 API Gateway로 Lambda 함수를 호출해 서버없이 API를 배포하는 방법에 대해 알아보겠습니다.
API Gateway란?
먼저 아마존의 API Gateway란 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지관리, 모니터링 및 보안을 유지할 수 있도록 하는 완전 관리형 서비스입니다. 아마존 공식 홈페이지에서는 API를 애플리케이션이 백엔드 서비스의 데이터, 비즈니스 로직 또는 기능에 액세스할 수 있는 "정문" 역할을 한다고 표현하고 있습니다. 즉 프록시(proxy)의 역할을 한다고 볼 수 있을 것 같습니다.
이러한 API Gateway를 이용하면 RESTful 및 WebSocket API를 통합 관리할 수 있으며 최근에는 Lambda와 연계하여 서버리스(Serverless) 애플리케이션을 구현하는데 많이 사용되고 있습니다.
AWS Lambda
AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. 즉 Lambda가 지원하는 언어 중 하나로 코드를 제공하기만 하면 특별한 설정 없이 사용자가 원하는 코드를 실행할 수 있도록 제공해주는 서비스입니다. 또한 Lambda는 필요할 때만 함수를 실행하고 자동으로 확정되기 때문에 보다 더 효율적으로 사용할 수 있습니다.
공식문서에서는 아래와 같은 상황에서 Lambda를 사용하는 것을 추천하고 있습니다.
API Gateway + AWS Lambda -> Serverless API
이러한 API Gateway와 AWS Lambda를 사용하면 Serverless API를 구축할 수 있습니다. 이 때 AWS Lambda는 함수를 실행하는 역할을 하며 API Gateway는 애플리케이션에서 해당 함수를 호출할 수 있도록 하는 통로의 역할을 하게 됩니다. 구조는 아래와 같습니다.
실습
이제 이론에 대해 알았으니 Serverless API를 호출하는 과정에 대해 알아보겠습니다. 모든 작업은 아시아 태평양 서울 region(ap-northeast-2)에서 진행하겠습니다.
Lambda 생성
aws console에서 Lambda를 검색하고 함수를 생성해줍니다. 저는 런타임 환경은 노드, 아키텍쳐는 arm64를 선택했습니다.
- arm64 - AWS Graviton2 프로세서에 사용되는 64비트 ARM 아키텍처
- x86_64 - x86 기반 프로세서에 사용되는 64비트 x86 아키텍처 아키텍쳐에 대한 내용은 해당 페이지에서 더 자세히 확인할 수 있습니다.
함수를 생성하고 해당 함수에 들어가면 아래와 같은 내용을 확인할 수 있습니다. 이 때 함수의 ARN은 추후 API Gateway에서 Lambda함수를 식별할 때 사용됩니다. 그리고 함수를 수정할 경우 deploy를 해야 최신 코드의 함수를 실행할 수 있습니다.
API Gateway 생성
이제 해당 함수를 호출할 수 있도록 API Gateway를 만들어주겠습니다. aws console에 들어가 API Gateway에서 새로운 API를 생성해줍니다.
API 유형은 REST API를 선택하고 새 API를 선택한 뒤 API의 이름과 설명을 작성해줍니다.
이제 리소스를 생성해야 합니다. 리소스는 URL 경로로 지정되는 것으로 따로 생성없이 사용해도 되지만 경로 구분을 위해 리소스를 생성해주겠습니다. 리소스 생성시 작성하는 리소스 경로가 API의 경로가 되므로 이를 고려해서 작성해야 합니다.
이제 아래와 같이 test 경로가 생긴 것을 확인할 수 있습니다. 이제 리소스에 대해 수행할 수 있는 작업인 메서드(GET, POST, PUT, DELETE 등)을 생성해줍니다.
메서드를 생성할 때 유형은 Lambda 함수로 하고 Lambda 함수는 이전에 만들었던 함수를 선택해줍니다.
이제 API 배포를 눌러 배포를 진행해줍니다. 이 때 사전에 만들어진 stage가 없을 경우 새로운 stage를 생성해서 배포합니다. stage는 dev, prod, qa 등의 구분을 원하는대로 만들어 사용할 수 있습니다.
이제 스테이지 페이지에 들어가면 아래와 같이 해당 API를 호출할 수 있는 URL을 확인할 수 있습니다.
API 배포가 완료되었으므로 포스트맨에서 해당 URL을 호출하면 lambda에서 작성한 return 값을 확인할 수 있습니다.