build.gradle에서
라이브러리는 org.springframework.cloud:spring-cloud-config-server
를 사용한다.
ext {
set('springCloudVersion', "Greenwich.SR1")
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
dependencies {
// ... 생략
// Spring Cloud Function 을 위한 의존성
implementation 'org.springframework.cloud:spring-cloud-function-adapter-aws'
// AWS Lambda 에 배포하기 위한 의존성
implementation group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.1'
// AWS Lambda 이벤트를 다루기 위한 의존성
implementation group: 'com.amazonaws', name: 'aws-lambda-java-events', version: '3.9.0'
}
Bean
으로 등록되어야 한다. (@Component
)Function
, Consumer
, Supplier
와 같은 함수형 인터페이스를 구현해야 한다. @Component // 하나의 함수
public class StringCheck implements Function<StringRequest, StringResponse> {
@Override
public StringResponse apply(StringRequest stringRequest) {
String input = stringRequest.getInput();
if (input.length() != stringRequest.getLength()) {
return new StringResponse(false);
}
return new StringResponse(true);
}
}
@Getter
public class StringRequest {
private String input;
private int length;
}
@AllArgsConstructor
@Getter
public class StringResponse {
private boolean check;
}
implementation 'org.springframework.cloud:spring-cloud-starter-function-web'
요청 URL
- POST http://localhost:8080/
- POST http://localhost:8080/stringValidator
{
"input": "test",
"length": 6
}
{
"check": false
}
import org.springframework.cloud.function.adapter.aws.SpringBootStreamHandler;
public class LambdaHandler extends SpringBootStreamHandler {
}
SpringBootStreamHandler
를 보면 InputStream과 OutputStream을 입력 받고 적절한 핸들러를 찾아서 실행하는 handleRequest
를 확인할 수 있다.
zip
파일로 만들기 위해 build.gradle에 task 추가task buildZip(type: Zip) {
from compileJava
from processResources
into('lib') {
from configurations.runtimeClasspath
}
}
sudo ./gradlew buildZip
명령을 실행하면 ./build/distributions
디렉토리에 zip 파일이 생성된다.해당 링크로 들어가서 람다 함수를 생성한다.
프로젝트 내의 Handler 클래스 위치를 입력한다. ([런타임 설정] 탭 > [Handler])
[구성] > [환경 변수] > [편집] 에서 환경 변수 수정하기
FUNCTION_NAME : 원하는 Bean 이름, MAIN_CLASS : main 메서드가 위치한 클래스명
[테스트] 탭에서
{
"input": "val",
"length": 3
}
위의 내용을 입력하고 테스트를 해보자
응답 결과를 확인해보자 원하는 응답을 확인할 수 있다.
틀린 문자열 길이를 입력했을 때 테스트를 해보자.
{
"input": "val",
"length": 5
}
성공 ~_~
진짜 진짜 감사해요!! 저 계속 이거 실패했는데 겨우 성공했어요!!!!