Amazon SQS 调用 lambda 函数



>我正在尝试通过 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

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

您是否处理了 Lambda 的执行角色权限?

从这里:

执行角色权限

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

  • sqs:接收消息
  • sqs:删除消息
  • sqs:GetQueueAttributes

以下代码对我来说工作正常:

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

最新更新