Amazon SQS вызывает лямбда-функцию - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь вызвать функцию через триггер amazon sqs.Триггер работает нормально, но сообщение не передается в функцию my.

Вот моя лямбда-функция

import java.text.SimpleDateFormat;
import java.util.Calendar;

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

public class x implements RequestHandler<RequestClass, ResponseClass> {
    private LambdaLogger logger;

    public void log(String message) {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
        logger.log(sdf.format(cal.getTime()) + "  " + message+"\n");
    }

    public ResponseClass handleRequest(RequestClass request, Context context) {
        this.logger = context.getLogger();
        log("Request " + request);
        if (request == null || (request.getFilename() == null && request.getRecords() == null)) {
            log("No file was passed in");
            throw new RuntimeException("No file was passed in");
        }


        return new ResponseClass(null);
    }
}

И класс запроса https://pastebin.com/Q1G6bnrA

Записи всегда нулевые, когда я вижу логи.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Следующий код работает нормально для меня:

package au.com.redbarn.aws.lambda2lambda_via_sqs;

import java.util.List;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;

import lombok.extern.log4j.Log4j2;

@Log4j2
public class SQSConsumerLambda implements RequestHandler<SQSEvent, String> {

    @Override
    public String handleRequest(SQSEvent input, Context context) {

        log.info("message received");

        List<SQSMessage> records = input.getRecords();

        for (SQSMessage record : records) {
            log.info(record.getBody());
        }

        return "Ok";
    }
}

Возможно, попробуйте использовать SQSEvent вместо своего RequestClass.

0 голосов
/ 29 октября 2018

Позаботились ли вы о разрешениях роли Lambda для выполнения?

С здесь :

Разрешения роли выполнения

Для управления сообщениями в очереди Amazon SQS Lambda необходимы следующие разрешения.Добавьте их в роль выполнения вашей функции.

  • sqs: ReceiveMessage
  • sqs: DeleteMessage
  • sqs: GetQueueAttributes
...