본문 바로가기

AWS Lambda ƛ/Lambda & SpringBoot

SpringBoot 프로젝트를 AWS Lambda로 실행하기 (2)

# 생성한 SpringBoot 프로젝트를 AWS Lambda에서 실행하기

2023.05.26 - [AWS Lambda ƛ/Lambda & SpringBoot] - SpringBoot 프로젝트를 AWS Lambda로 실행하기 (1)

- 첫번째 과정은 위의 링크를 참고한다.

1. SpringBoot 코드를 zip으로 빌드하기

- 코드가 존재하는 폴더로 이동한다. 이동 후 아래의 명령어를 실행하여 코드를 zip 파일로 생성한다.

생성 경로 : ./build/distributions/{file_name}.zip

실행 코드 : gradlew buildZip or ./gradlew buildZip

- gradlew buildZip 명령을 실행하면 ./build/distributions 디렉토리에 zip 파일이 생성된다.

실행 화면

2. AWS Lambda 함수 생성하기

- AWS Lambda 서비스로 이동 후 아래와 같이 함수를 생성한다.

중간에 실행 역할이 있는데 해당 역할은 AWS Lambda FullAccess 정도의 권한을 주고 신규로 생성을 하거나, 기존에 생성된 권한이 있다면 선택하여 실행하면 된다. (권한 생성은  AWS IAM에서 진행한다.)

- JAVA 버전은 현재 11과 8버전만 지원된다. (추후에 업데이트가 될거 같은데 현재는 그렇다.)

3. 코드 업로드하기

함수를 생성 후 build하여 zip파일로 생성된 코드를 업로드 해야한다.

- AWS Lambda 함수를 클릭하면 아래와 같이 코스소스 라는 항목이 존재한다.

여기서 아래와 같이 S3에서 코드를 업로드 하여 위치만 지정해주거나 직접 빌드한 파일을 올릴 수 있다.

- 여기서는 직접 빌드한 파일을 업로드 하여 실행하는 것으로 진행한다.

4. 런타임 설정에서 SpringBoot 코드에서 설정한 핸들러 정보를 넣어준다.

그리고 저장을 클릭하여 저장한다.

-  핸들러 내용 : com.example.demo.LambdaHandlers

- 그리고 구성 탭으로 이동 후 일반 구성을 클릭한다. 편집으로 들어가면 실행 시간을 조정 할 수 있다.

- 아래와 같이 제한 시간을 15분으로 설정한다. (최대가 15분이다.)

5. 환경 변수 설정

AWS Lamda 함수 → 구성 → 환경변수로 이동한다. 이동 후 아래와 같이 입력해 준다.

함수 이름과 메인 클래스를 지정하여 업로드한 코드가 찾아 갈수 있도록 구성한다.

핸들러 이름과 환경 변수의 이름은 아래와 같이 SpringBoot 코드를 참고한다.

- 람다 핸들러

환경 변수 내용은 아래와 같다.

- 함수 이름

- 메인 클래스

- 설정은 모두 끝났다. 테스트를 진행한다.

6. AWS Lambda 테스트 하기

- 테스트 탭으로 이동하여 아래와 같이 코드를 입력한다.

- 코드

{
  "name": "Seungkim",
  "age": 38
}

결과는 아래와 같다.

- 문제는 함수를 실행하는데 약 23초가 걸린것... 이 간단한 프로그램을 실행시키는데 23초가 걸린다면 좀 문제가 있는거 같은데 한번 실행하면 바로 꺼지지 않고 계속 응답을 해주는거 같다. 얼마만에 꺼지는지는 확인이 필요하다.

한번 람다 함수를 실행 후 재 실행 하면 아래와 같이 응답시간이 매우 빠르다.

하지만 일정 시간이 지나면 람다 함수는 꺼지는거 같은데, 함수를 실행하는 스팟 인스턴스가 내려가고 다시 올라오는데 시간이 23초가량 소요되는거 같다.

- 여기까지 마무리하고, 다음 3편에는 앞단에 AWS API Gateway를 붙여서 GET, POST 등 REST API를 호출해보자.