【问题标题】:Amazon SQS call lambda functionAmazon SQS 调用 lambda 函数
【发布时间】:2019-03-27 21:25:54
【问题描述】:

我正在尝试通过 amazon sqs 触发器触发功能。触发器工作正常,但消息没有传递到 my 函数中。

这是我的 lambda 函数

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

当我看到日志时,记录总是空的。

【问题讨论】:

    标签: java aws-lambda amazon-sqs


    【解决方案1】:

    您是否注意过 Lambda 的执行角色权限?

    来自here

    执行角色权限

    Lambda 需要以下权限来管理您的 Amazon SQS 队列中的消息。将它们添加到您的函数的执行角色中。

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

    【讨论】:

      【解决方案2】:

      以下代码对我来说很好用:

      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

      【讨论】:

        猜你喜欢
        • 2018-12-15
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 2016-01-19
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 2021-07-21
        相关资源
        最近更新 更多