반응형

Java에서 AWS lambda로 internal invoke 시켜 node를 이용하여 수신할 수 있는 코드 예시를 보여드리고자 합니다.

 

Java 코드에서 호출하는 Lambda 함수에 필요한 모든 정보는 withPayload 메서드를 통해 JSON 형식의 문자열로 전달할 수 있습니다.

 

참고로, AWS Lambda를 호출할 때 HTTP 요청과 다르기에 헤더를 삽입할 순 없습니다.

 

import com.amazonaws.services.lambda.AWSLambda;
import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;

public class LambdaInvoker {
    public static void main(String[] args) {
        // AWSLambda 클라이언트 생성
        AWSLambda lambdaClient = AWSLambdaClientBuilder.defaultClient();

        // Lambda 함수 호출을 위한 InvokeRequest 객체 생성
        InvokeRequest invokeRequest = new InvokeRequest()
                .withFunctionName("YourLambdaFunctionName")
                .withPayload("{ \"sender\": \"JavaApplication\", 'key1': 'value1', 'key2': 'value2' }"); // 송신자 정보 추가

        // Lambda 함수 호출
        InvokeResult invokeResult = lambdaClient.invoke(invokeRequest);

        // 결과 출력
        String response = new String(invokeResult.getPayload().array());
        System.out.println(response);
    }
}

 

 

 

Node에서는 다음과 같이 데이터를 수신 할 수 있습니다.

 

Lambda 함수를 구성하여 API Gateway의 이벤트를 직접 처리할 수 있고 이는 Lambda 함수가 API Gateway와 연동될 때 표준적인 방법으로 활용됩니다.

 

exports.handler = async (event) => {
    console.log("이벤트: ", event);

    // API Gateway 이벤트에서 바디 추출
    const body = JSON.parse(event.body);
    console.log('Received data:', body);

    // 송신자 정보가 있는 경우 출력
    if (body.sender) {
        console.log('Data sent by:', body.sender);
    }

    // 함수의 결과 반환
    return {
        statusCode: 200,
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
            message: "Data received successfully"
        })
    };
};

 

이 코드는 API Gateway로부터 전달된 이벤트를 처리합니다. 

 

event.body는 요청 본문을 포함하고 있으며, 이는 문자열로 전달되므로 JSON.parse를 사용하여 객체로 변환해야 합니다. 

반응형