AWS Лямбда, добавив два числа в Java - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу знать, как читать несколько входов и выполнять операции с этими входами. Я хочу, чтобы моя aws лямбда-функция считывала два входных целых числа, добавляла эти целые числа и возвращала сумму.

Я новичок в aws лямбда-выражении.

Мой код:

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));   


    }
}

как читать входные данные из лямбда-функции?

1 Ответ

0 голосов
/ 13 апреля 2020

У вас просто небольшая проблема. В вашем классе DataObject вы не правильно регистрируетесь. Вы передаете Context, чтобы получить LambdaLogger, но затем используете Logger из пакета java.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 получил:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...