AWS 람다로 서버리스 서비스 만들기 (1) 로컬에서 테스트에 이어 작성합니다.
목차
1. 세팅
2. 적용
세팅
기존 환경
Java11, SpringBoot 2.7.11
1. build.gradle 에 다음 의존성을 추가합니다.
implementation 'org.springframework.cloud:spring-cloud-function-adapter-aws:3.2.8'
implementation group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.1'
implementation group: 'com.amazonaws', name: 'aws-lambda-java-events', version: '3.9.0'
아마도 cloud-function 버전이 4.x.x 을 넘으면 SpringBootStreamHandler가 아닌 FunctionInvoke이 들어오게 되어 제가 진행하는 방법과는 다르게 진행하셔야 할 거에요.
2. 프로젝트 Zip 파일을 만들어야 하기 때문에 다음 Task도 build.gradle에 추가해줍니다.
task buildZip(type: Zip) {
from compileJava
from processResources
into('lib') {
from configurations.runtimeClasspath
}
}
3. 마지막으로 AWS Lambda가 람다 함수를 인식할 수 있는 핸들러를 하나 만들어줍니다.
클래스를 만들고 내부에 어떤 것을 구현할 필요는 없습니다. 작성만 하면 됩니다.
적용
1. AWS lambda 서비스로 들어가서 함수를 생성합니다.
2. 런타임할 언어를 선택합시다. 아마존에서는 Java11 까지 제공합니다.
런타임 언어를 설정하고 함수 생성 버튼을 누릅니다. (스크린샷에는 짤려있는데 우측 하단에 있습니다.)
3. 코드 소스 업로드, 핸들러 설정이 필요합니다.
코드 소스 업로드
Java는 코드 소스 편집기 지원이 되지 않기 때문에 람다 함수가 담겨있는 프로젝트를 업로드해야 합니다. 배포 파일이 10MB가 넘으면 S3로 전달할 것을 권장하지만 우선 람다를 통해 업로드하겠습니다.
세팅에서 build.gradle에 배포 Zip 파일을 만들기 위해 Task를 추가했습니다. 터미널을 열어 ./gradlew buildZip 명령을 해줍시다.
build 폴더 내부에 zip 파일이 만들어졌습니다. 이 zip 파일을 업로드해주면 됩니다.
핸들러 설정
핸들러는 위에서 SpringBootStreamHandler를 상속받는 클래스를 적으면 된다.
4. 환경 변수 설정
FUNCTION_NAME에는 실행시킬 함수 / MAIN_CLASS 에는 프로젝트 시작 클래스를 입력해주면 된다.
이제 준비가 끝났으니 한 번 테스트해보자.
1편에서는 아래와 같은 함수를 만들어두었다. AWS lambda를 통해서 해당 메서드를 실행시켜볼 것이다.
json 형식으로 HTTP 바디에 담을 메시지를 작성해보자.
실제 결과를 보면 해당 함수가 제대로 호출됐음을 알 수 있다.
다음 시간(언제가 될 지는 모르겠지만)에는 될 줄 모르겠지만 1편에서 언급한 AWS lambda를 통해 스케줄러 기능을 만들 예정입니다.
'개발일기장' 카테고리의 다른 글
xuni - Spring Rest Docs 도입하기 (0) | 2023.04.27 |
---|---|
실행 분석 계획을 통해 인덱스 성능을 알아보자(삽질했어요.) (0) | 2023.04.24 |
AWS 람다로 서버리스 서비스 만들기 (1) 로컬에서 테스트 (0) | 2023.04.21 |
도메인 주도 개발 시작하기 정리 - CQRS 패턴 (0) | 2023.04.16 |
DDD 아주 살짝 맛보고 후기 남기기 (0) | 2023.04.16 |