Java Amazon Lambda在尝试为DynamoDB初始化客户端时超时
我在Amazon的Lambda服务上上传了以下Java类:Java Amazon Lambda在尝试为DynamoDB初始化客户端时超时,java,amazon-web-services,amazon-dynamodb,aws-lambda,Java,Amazon Web Services,Amazon Dynamodb,Aws Lambda,我在Amazon的Lambda服务上上传了以下Java类: public class DevicePutHandler implements RequestHandler<DeviceRequest, Device> { private static final Logger log = Logger.getLogger(DevicePutHandler.class); public Device handleRequest(DeviceRequest reques
public class DevicePutHandler implements RequestHandler<DeviceRequest, Device> {
private static final Logger log = Logger.getLogger(DevicePutHandler.class);
public Device handleRequest(DeviceRequest request, Context context) {
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient();
DynamoDBMapper mapper = new DynamoDBMapper(client);
if (request == null) {
log.info("The request had a value of null.");
return null;
}
log.info("Retrieving device");
Device deviceRetrieved = mapper.load(Device.class, request.getDeviceId());
log.info("Updating device properties");
deviceRetrieved.setBuilding(request.getBuilding());
deviceRetrieved.setMotionPresent(request.getMotionPresent());
mapper.save(deviceRetrieved);
log.info("Updated device has been saved");
return deviceRetrieved;
}
}
以下是我试图测试Lambda的JSON输入:
{
"deviceId": "test_device_name",
"building": "building1",
"motionPresent": false
}
没有抛出任何异常,我尝试将其包装在一个try/catch块中,lambda超时是唯一发生的事情。在初始化DynamoDB客户机之前的一开始,我就尝试使用log/print语句来查看请求是否可以正确读取,以及它是否能够正确解析JSON字段。我还将客户机构建器分离出来,发现构建器对象可以初始化,但是超时来自于构建器调用build来创建客户机
如果有人对为什么会发生这种超时有任何见解,请让我知道 结果表明,通过增加超时周期和分配的内存,问题得到了解决。不知道为什么它会工作,因为lambda总是表示它的内存使用量低于之前设置的限制,但是很好。希望将来Amazon能够提供更好的错误反馈,指示lambda是否需要更多的资源来运行。结果表明,通过增加超时周期和分配的内存,问题得到了解决。不知道为什么它会工作,因为lambda总是表示它的内存使用量低于之前设置的限制,但是很好。希望将来Amazon能够提供更好的错误反馈,指示lambda是否需要更多资源来运行。是否超过lambda超时?或者在VPC中运行,没有出站internet访问或VPC端点到DynamoDB?错误只是说任务在3.00秒后超时。如果我更改超时时间,它将一直运行,直到超过我设置的值。我没有在VPC中配置任何东西。是否超过Lambda超时?或者在VPC中运行,没有出站internet访问或VPC端点到DynamoDB?错误只是说任务在3.00秒后超时。如果我更改超时时间,它将一直运行,直到超过我设置的值。我没有在VPC中配置任何东西。当您增加内存分配时,您也会增加分配给lambda的CPU量,这可能会导致lambda睡不着。我和urs有完全相同的问题。这是我的存储库。如果我增加mem的大小,那么它将成功执行。在aws lambda方面,这应该是错误的,他们应该提供更好的日志记录,或者修复该问题。我为亚马逊工作过,我可以在内部提交一个问题。稍后,当你增加内存分配时,你还会增加分配给lambda的CPU量,这可能会导致你的lambda睡不着。我和urs的问题完全一样。这是我的存储库。如果我增加mem的大小,那么它将成功执行。在aws lambda方面,这应该是错误的,他们应该提供更好的日志记录,或者修复该问题。我为亚马逊工作过,我可以在内部提交一个问题,稍后会用更多信息更新这篇文章
@DynamoDBTable(tableName="DeviceTable")
public class Device {
private String deviceID;
private String building;
private String queue;
private boolean motionPresent;
@DynamoDBHashKey(attributeName="Device ID")
public String getDeviceID() {
return deviceID;
}
public void setDeviceID(String deviceID) {
this.deviceID = deviceID;
}
@DynamoDBAttribute(attributeName="Motion Present")
public boolean getMotionPresent() {
return motionPresent;
}
public void setMotionPresent(boolean motionPresent) {
this.motionPresent = motionPresent;
}
@DynamoDBAttribute(attributeName="Building")
public String getBuilding() {
return this.building;
}
public void setBuilding(String building) {
this.building = building;
}
@DynamoDBAttribute(attributeName="Queue")
public String getQueue() {
return this.queue;
}
public void setQueue(String queue) {
this.queue = queue;
}
}
{
"deviceId": "test_device_name",
"building": "building1",
"motionPresent": false
}