티스토리 뷰
1. Lambda 함수 생성
2. JAVA 패키지 빌드
3. 배포 패키지 업로드 및 핸들러 메서드 정의
4. 테스트 이벤트 생성 및 테스트
1. Lambda 함수 생성
Function name을 작성, Runtime에 Java를 선택, Permissions에 적절한 role을 선택해 줍니다.
2. JAVA 패키지 빌드
blank-java 코드를 다운 받습니다.
dependencies {
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
implementation 'com.amazonaws:aws-lambda-java-events:3.1.0'
runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.2.0'
}
task buildZip(type: Zip) {
from compileJava
from processResources
into('lib') {
from configurations.runtimeClasspath
}
}
해당 코드에는 Lambda에서 Java를 수행하기 위해서 필수로 필요한 java-core 라이브러리가
그리고 이벤트와 로그 기록을 위한 java-events, log4j2 라이브러리 등이 추가 되어 있습니다.
build.gradle 파일에 단일 zip 파일로 컴파일 해주는 buildZip task를 추가해줍니다.
➜ blank-java git:(main) ✗ ls build/distributions
blank-java.zip
buildZip task로 빌드를 합니다.
3. 배포 패키지 업로드 및 핸들러 메서드 정의
콘솔에 Function code > Actions > Upload a .zip or .jar file 을 선택하여 blank-java.zip 파일을 업로드 해줍니다.
그리고, 핸들러 메서드를 입력해 줍니다.( example.Handler::handleRequest )
package example;
import com.amazonaws.services.lambda.runtime.Context
import com.amazonaws.services.lambda.runtime.RequestHandler
import com.amazonaws.services.lambda.runtime.LambdaLogger
...
// Handler value: example.Handler
public class Handler implements RequestHandler<SQSEvent, String>{
Gson gson = new GsonBuilder().setPrettyPrinting().create();
@Override
public String handleRequest(SQSEvent event, Context context)
{
String response = new String();
// call Lambda API
logger.info("Getting account settings");
CompletableFuture<GetAccountSettingsResponse> accountSettings =
lambdaClient.getAccountSettings(GetAccountSettingsRequest.builder().build());
// log execution details
logger.info("ENVIRONMENT VARIABLES: {}", gson.toJson(System.getenv()));
logger.info("CONTEXT: {}", gson.toJson(context));
logger.info("EVENT: {}", gson.toJson(event));
// process event
for(SQSMessage msg : event.getRecords()){
logger.info(msg.getBody());
}
...
return response;
}
}
핸들러 메서드는 이벤트, 컨텍스트를 입력으로 받아 이를 로그로 출력하고 문자열을 반환합니다.
4. 테스트 이벤트 생성 및 테스트
{
"Records": [
{
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
"receiptHandle": "MessageReceiptHandle",
"body": "Hello from SQS!",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1523232000000",
"SenderId": "123456789012",
"ApproximateFirstReceiveTimestamp": "1523232000001"
},
"messageAttributes": {},
"md5OfBody": "7b270e59b47ff90a553787216d55d91d",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:MyQueue",
"awsRegion": "us-west-2"
}
]
}
Lambda Function console의 "Configure test event" 메뉴에 위의 json 으로 이벤트를 생성하여,
해당 이벤트로 테스트를 수행합니다.
tocol=https, host=lambda.ap-northeast-2.amazonaws.com, encodedPath=/2016-08-19/account-settings/, headers=[amz-sdk-invocation-id, User-Agent, X-Amzn-Trace-Id], queryParameters=[])
2021-02-09 03:11:52 a12a73fb-a66f-4114-b63f-f707bf8fc24f INFO Handler - ENVIRONMENT VARIABLES: {
"PATH": "/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin",
"LAMBDA_TASK_ROOT": "/var/task",
"AWS_LAMBDA_FUNCTION_MEMORY_SIZE": "512",
"TZ": ":UTC",
...
"AWS_LAMBDA_FUNCTION_NAME": "goatee-Java"
}
2021-02-09 03:11:52 a12a73fb-a66f-4114-b63f-f707bf8fc24f INFO Handler - CONTEXT: {
"memoryLimit": 512,
"awsRequestId": "a12a73fb-a66f-4114-b63f-f707bf8fc24f",
"logGroupName": "/aws/lambda/goatee-Java",
...
"logger": {}
}
2021-02-09 03:11:52 a12a73fb-a66f-4114-b63f-f707bf8fc24f INFO Handler - EVENT: {
"records": [
{
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
"receiptHandle": "MessageReceiptHandle",
"body": "Hello from SQS!",
"md5OfBody": "7b270e59b47ff90a553787216d55d91d",
"eventSourceArn": "arn:aws:sqs:us-west-2:123456789012:MyQueue",
"eventSource": "aws:sqs",
"awsRegion": "us-west-2",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1523232000000",
"SenderId": "123456789012",
"ApproximateFirstReceiveTimestamp": "1523232000001"
},
"messageAttributes": {}
}
]
}
2021-02-09 03:11:52 a12a73fb-a66f-4114-b63f-f707bf8fc24f INFO Handler - Hello from SQS!
2021-02-09 03:11:52 DEBUG request - Received successful response: 200
2021-02-09 03:11:52 a12a73fb-a66f-4114-b63f-f707bf8fc24f INFO Handler - Account usage: {
"totalCodeSize": 46129154,
"functionCount": 13
}
END RequestId: a12a73fb-a66f-4114-b63f-f707bf8fc24f
REPORT RequestId: a12a73fb-a66f-4114-b63f-f707bf8fc24f Duration: 112.84 ms Billed Duration: 113 ms Memory Size: 512 MB Max Memory Used: 238 MB
테스트를 수행하면 위와 같이 로그가 출력 됩니다.
로그에 event 값이 잘 전달되어 출력되는 것을 확인할 수 있습니다.
참조
docs.aws.amazon.com/lambda/latest/dg/lambda-java.html
docs.aws.amazon.com/ko_kr/lambda/latest/dg/java-handler.html
'Cloud Platform > AWS' 카테고리의 다른 글
EC2에 AWS X-Ray 적용하기 (1) - 데몬 실행 및 Requests 추적 (0) | 2022.03.11 |
---|---|
AWS S3 객체 업로드 및 권한 설정 - JAVA (0) | 2022.01.04 |
sam build 에러 (0) | 2021.02.15 |
AWS Toolkit ( IntelliJ ) 으로 Lambda 로컬 테스트 (0) | 2021.02.09 |
AWS ssh permission error (0) | 2021.01.26 |
- Total
- Today
- Yesterday
- JSON
- scala
- plugin
- Size
- Index
- SpringBoot
- logstash
- gradle
- elasticsearch
- Filter
- error
- docker
- spring boot
- AWS
- intellij
- tomcat
- Postman
- Git
- Container
- apm
- Log
- install
- Kibana
- JPA
- maven
- Spark
- spring
- Java
- Linux
- mac
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |