환율 정보를 가져오는 작은 서비스를 개발해야 하는데 이번 기회에 AWS Lambda 를 이용해보기로 하였다.
참고 자료를 찾아보는데 Java를 이용해서 AWS Lambda 서비스를 만든 사례를 찾기 어려워 꽤나 헤매었다;
환율을 가져오는 자세한 로직은 제외하고, 설정 및 테스트 부분만 포스팅해보겠다.
CloudWatch Events를 Trigger로 하여 정해진 시간에 한번씩 Currency 정보를 가져오게끔 하였다.
런타임 설정
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Map;
// Handler value: example.Handler
public class CurrencyHandler implements RequestHandler<Map<String,String>, String>{
Gson gson = new GsonBuilder().setPrettyPrinting().create();
@Override
public String handleRequest(Map<String,String> event, Context context)
{
LambdaLogger logger = context.getLogger();
String response = "200 OK";
// log execution details
logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv()));
logger.log("CONTEXT: " + gson.toJson(context));
// process event
logger.log("EVENT: " + gson.toJson(event));
logger.log("EVENT TYPE: " + event.getClass());
return response;
}
}
pom.xml
plugins {
id 'org.springframework.boot' version '2.4.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'XXX'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation platform('software.amazon.awssdk:bom:2.10.73')
implementation 'software.amazon.awssdk:lambda'
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
implementation 'com.amazonaws:aws-lambda-java-events:3.1.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'org.apache.logging.log4j:log4j-api:2.13.0'
implementation 'org.apache.logging.log4j:log4j-core:2.13.0'
runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:2.13.0'
runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.2.0'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
}
test {
useJUnitPlatform()
}
task buildZip(type: Zip) {
from compileJava
from processResources
into('lib') {
from configurations.runtimeClasspath
}
}
중요한 포인트는 소스 파일을 AWS Lambda에 올릴 때 사이즈가 50MB 이 넘어가면 S3에 소스코드를 올려야 한다.
이때 zip으로 package한 결과물을 올려야 하는데 이 부분에서 애를 많이 먹었다 :,-(
배포를 jar로만 했었는데 zip으로 하는 방법도 몰랐고, 그렇게 해야하는 건 줄도 몰랐다 ^^;;;
pom.xml에 zip으로 빌드한다는 내용을 입력하고, 'gradle buildZip'를 하면
프로젝트\build\distributions 디렉토리 내 zip으로 빌드된 파일이 생성되고 이것을 S3에 올리면 된다.
'AWS' 카테고리의 다른 글
Amazon SageMaker 모델 학습 방법 소개 (0) | 2022.03.23 |
---|---|
Amazon Linux 2 EC2에 Jenkins 설치 (0) | 2022.01.17 |
[Elasitcsearch] 문자열 Data Type (0) | 2019.09.30 |
[Elasticsearch 6.5] Basic Concetps 엘라스틱서치 기본 개념 (0) | 2019.09.25 |
[Elasticsearch 6.5] API Convention - Common options (0) | 2019.09.25 |