如何从 JAVA 调用 AWS lambda 函数?

Posted

技术标签:

【中文标题】如何从 JAVA 调用 AWS lambda 函数?【英文标题】:How to call AWS lambda function from JAVA? 【发布时间】:2021-12-17 08:27:29 【问题描述】:

我有多个 lambda 函数(get、post ...),我想返回一个 JSON 或 JSON 字符串。如何从不需要任何参数/有效负载的 JAVA 代码中调用“get”(“Get”lambda 返回对象列表)函数?它也返回:

StatusCode: 200,Payload: 敏感数据已编辑,ExecutedVersion: $LATEST

Lambda 具有所需的权限:

lambda:InvokeFunction lambda:InvokeAsync

方法:

public String invokeLambda(String operationName, JSONObject jsonObject) throws JSONException 
    AWSLambda lambdaClient = AWSLambdaClientBuilder.defaultClient();
    InvokeRequest request = new InvokeRequest();
    request.withInvocationType(InvocationType.RequestResponse);
    request.withFunctionName(operationName)
            .withPayload(payload);
    InvokeResult invoke = lambdaClient.invoke(request);
    return invoke.toString();

【问题讨论】:

【参考方案1】:

如果您正在使用AWS SDK 2.0,您可以像这样调用 lambda 函数

    public static void invokeFunction(LambdaClient awsLambda, String functionName) 

         InvokeResponse res = null ;
        try 
            //Need a SdkBytes instance for the payload
            String json = "\"Hello \":\"Paris\"";
            SdkBytes payload = SdkBytes.fromUtf8String(json) ;

            //Setup an InvokeRequest
            InvokeRequest request = InvokeRequest.builder()
                    .functionName(functionName)
                    .payload(payload)
                    .build();

            res = awsLambda.invoke(request);
            String value = res.payload().asUtf8String() ;
            System.out.println(value);

         catch(LambdaException e) 
            System.err.println(e.getMessage());
            System.exit(1);
        
    

见here

然后,您可以使用 ObjectMapper 或类似的类将 json 字符串解析为对象。

【讨论】:

以上是关于如何从 JAVA 调用 AWS lambda 函数?的主要内容,如果未能解决你的问题,请参考以下文章