Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Amazon Lambda在尝试为DynamoDB初始化客户端时超时_Java_Amazon Web Services_Amazon Dynamodb_Aws Lambda - Fatal编程技术网

Java Amazon Lambda在尝试为DynamoDB初始化客户端时超时

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

我在Amazon的Lambda服务上上传了以下Java类:

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
}