首页 > 解决方案 > AWS Lambda在Java中添加两个数字

问题描述

我想知道如何读取多个输入并对这些输入执行操作。我希望我的 aws lambda 函数读取两个输入整数并将这些整数相加并返回总和。

我是 aws lambda 的新手。

我的代码:

package com.amazonaws.lambda.demo;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import com.fasterxml.jackson.databind.ObjectMapper;

public class AWSCalculator implements RequestStreamHandler {

    private ObjectMapper mapper = new ObjectMapper();

    @Override
    public void handleRequest(final InputStream inputStream, final OutputStream outputStream,
                              final Context context) throws IOException {
        LambdaLogger logger = context.getLogger();
        logger.log("Loading Java Lambda handler of ProxyWithStream");

        DataObject data = mapper.readValue(inputStream, DataObject.class);
        data.calculateResults(context);
        OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");
        writer.write(mapper.writeValueAsString(data));
        logger.log(mapper.writeValueAsString(data));

        writer.close();
    }
}


package com.amazonaws.lambda.demo;

import java.util.logging.Logger;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DataObject {
    @JsonProperty("Number1")
    int number1;
    @JsonProperty("Number2")
    int number2;
    int sum;
    int product;
    int difference;
    float quotient;

    public void calculateResults(Context context) {

        LambdaLogger log = context.getLogger();


        sum = number1 + number2;
        product = number1 * number2;
        difference = Math.abs(number1 - number2);
        quotient = (float) number1 / (float) number2;

        Logger.getLogger("The Sum is : " + String.valueOf(sum));   


    }
}

如何从 lambda 函数读取输入?

标签: amazon-web-servicesaws-lambda

解决方案


你只有一个小问题。在您的DataObject班级中,您没有正确登录。您传入Context以获取LambdaLogger然后Loggerjava.util.logging包中使用。更改代码:

Logger.getLogger("The Sum is : " + String.valueOf(sum));   

成为

log.log("The Sum is : " + sum);

通过使用LambdaLogger您的输出到 CloudWatch 更容易。我也删除了它,String.valueOf因为它不需要。

一旦你这样做了,你的代码就可以正常工作了。我通过 AWS 控制台运行它,输入如下:

{
  "Number1": 5,
  "Number2": 3
}

在 CloudWatch 日志中我得到:

在此处输入图像描述


推荐阅读