AWS Lambda(Serverless) API 서버 구축해보기
구성 Skill : API Gateway + Lambda + S3
Serverless
: 사용자가 Server를 직접 프로비저닝하거나 운영 및 관리할 필요 없이, 서비스를 구축하고 코드를 실행할 수 있도록 구조화하는 아키텍처이다.
그러므로 인프라의 운영 및 관리에 대한 부담을 덜어주고, 서비스에 집중 가능
출처 : AWS
https://aws.amazon.com/ko/blogs/korea/using-aws-lambda-within-your-game/
Provisioning 프로비저닝
: IT 인프라를 생성하고 설정하는 프로세스, 서버, 애플리케이션 네트워크 구성, 스토리지 등을 배포하는 초기 과정
출처 : Red Hat
AWS Lambda
: 서버리스 아키텍처의 핵심으로 서버에 대한 걱정 없이 코드를 실행할 수 있도록 제공하는 서비스라고 정의 되어 있으며,
서버리스는 서버의 관리 주체가 AWS에 있음을 의미하며, 함수 단위로 AWS 서버에 업로드하여 요청 발생 시 맞는 Lambda 함수를 실행시켜주는 방식
AWS API Gateway
: REST 및 WebSocket API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 AWS 서비스
HTTP 기반, 상태 비저장(Stateless) 서버 통신, 표준 HTTP 메소드(GET, POST, PUT, PATCH, DELETE)를 가진 RESTful API를 생성
클라이언트와 서버 간에 상태를 저장하는 전이중 통신을 지원, 수신 메시지를 메시지 콘텐츠에 따라 라우팅하는 WebSocket API를 생성
API Gateway는 최대 수십만 개의 동시 API 호출 허용 및 처리에 관련된 모든 작업을 다룹니다.
쉽게 말하자면 백엔드 서비스에 접근하도록 HTTP EndPoint 역할을 제공하는 서비스이며 로직(Lambda 등)액세스할 수 있게 해주는 게이트 역할이다.
클라이언트 요청에 맞게 API Gateway가 해당 요청에 매칭되는 로직을 실행시켜 주는 방식으로 동작한다.
출처 : AWS
https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/welcome.html
Lambda 기반의 RESTful한 방식의 Web API 형태의 서비리스 아키텍처 예시
1. Gradle 설정 및 JAVA 소스
build.gradle
User.java
UserCheckResponse.java
AWS Lambda Handler
Spring Cloud Function AWS에서 제공하는 Handler를 상속 받은 클래스 구현 필요
해당 클래스가 AWS Lambda에서 프로젝트 내에 구현된 Lambda를 실행하는 Handler이다.
상속 받는 SpringBootStreamHandler 클래스를 확인해 보면 handleRequest 메소드가 존재하는데
해당 메소드에서 맞는 Handler를 통해 Lambda 코드가 실행된다.
SpringBootStreamHandler.class
spring-cloud-function-adapter-aws 라이브러리에 포함
LoginLambda.java
Spring Cloud Function 프레임워크 환경에서
Function, Consumer, Supplier와 같은 함수형 인터페이스 로 구현하여
AWS Lambda 환경에서 Bean으로 인식하여 Spring Boot 애플리케이션에서 실행되어야 한다.
src 구조
2. S3 생성 및 소스 업로드
S3의 버킷 생성시 버킷 이름은 유일한 이름 값으로 한 다음 다른 설정은 default 값으로 하고 생성
zip 형식으로 build한 프로젝트 파일을 버킷에 업로드
S3 URI를 복사해놓자. 나중에 Lambda에서 연결할 때 필요
3. Lambda 생성
함수 생성
jdk 11 사용하여 Java 11로 설정하여 생성
4. API Gateway 생성
REST API 생성
리소스 생성
메서드 생성
메서드 유형 ANY, DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT 선택하고
유형은 Lambda 선택하여 함수는 해당 리전에 맞는 Lambda 선택하여 생성
이렇게 생성하고 난 후 Lambda 콘솔 확인해보면 트리거에 API Gateway 연결된 걸 확인 할 수 있다.
5. Lambda와 S3 연결
Lambda에 S3에 있는 S3 URI를 통해 코드 업로드
Handler 정보 수정
Lambda 코드내 FUNCTION_NAME은 @Bean 생성 이름과
MAIN_CLASS는 실행 애플리케이션 main 메소드 클래스 이름으로 환경변수 설정
Lambda 테스트
Lambda 테스트 결과
6. API Gateway와 Lambda+S3 테스트
7. API Gateway 배포
API를 스테이지에 배포
API Gateway URL를 통해 접근
8. API 테스트 동작 및 정상 동작 확인
POSTMAN이나 Talend API Tester와 같은 API Tester로 api 호출해본다.
저는 기존에 Talend API Tester를 크롬 확장프로그램에 설치해놓아서 이걸 사용해보겠다. 취향 차이니 아무거나 사용하시면 된다.
참고
https://docs.spring.io/spring-cloud-function/reference/adapters/aws-intro.html
https://siyoon210.tistory.com/174
https://siyoon210.tistory.com/174
'Cloud > Amazon Web Service' 카테고리의 다른 글
AWS S3 이미지 파일 리사이징 업로드 (0) | 2023.11.24 |
---|