AWS Lambda Java函数成功,但超时

AWS Lambda Java函数成功,但超时,java,amazon-web-services,amazon-s3,aws-lambda,Java,Amazon Web Services,Amazon S3,Aws Lambda,我创建了一个基本的AWS Lambda java函数来将xml消息转换为json。该功能由S3事件触发(消息被转换并丢弃在不同的S3存储桶中)。它看起来很成功,我可以在cloudwatch中看到步骤,转换后的消息位于S3目标存储桶中。但是,我在cloud watch日志中看到超时警告(将超时设置为15秒)。我肯定错过了什么,当谈到Lambda时,我肯定是个新手。我是否需要提供已完成或成功的上下文?如有任何建议或提示,将不胜感激 代码片段: public void msgConvertTo

我创建了一个基本的AWS Lambda java函数来将xml消息转换为json。该功能由S3事件触发(消息被转换并丢弃在不同的S3存储桶中)。它看起来很成功,我可以在cloudwatch中看到步骤,转换后的消息位于S3目标存储桶中。但是,我在cloud watch日志中看到超时警告(将超时设置为15秒)。我肯定错过了什么,当谈到Lambda时,我肯定是个新手。我是否需要提供已完成或成功的上下文?如有任何建议或提示,将不胜感激

代码片段:

    public void msgConvertToJson(S3Event s3event, Context context) {

    final String key = s3event.getRecords().get(0).getS3().getObject().getKey();
    final String bucketName = s3event.getRecords().get(0).getS3().getBucket().getName();
    log.info("key: " + key + " bucketName:" + bucketName);
    String action = "";


    try {

        //Attempt to retrieve the message from S3 on notification
        log.info("attempting to get message");
        action = "get";
        final String message = s3Client.getObjectAsString(bucketName, key);

        //Attempt to parse and convert the message to JSON
        log.info("attempting to parse message");
        String msgJson = new MessageParser(message).getMessageJson();

        //Attempt to write the converted message to a new S3 bucket
        final String parsedBucket = "parsed-" + bucketName;
        final String newKey = key.replace(".xml",".json");
        log.info("newKey: " + newKey + " parsedBucketName:" + parsedBucket);
        log.info("attempting to put message");
        action = "put";

        s3Client.putObject(parsedBucket, newKey, msgJson );

    } catch (AmazonServiceException ase) {
        log.error("Caught an AmazonServiceException trying to " + action +  " file " + key + ", which " +
                "means your request made it " +
                "to Amazon S3, but was rejected with an error response" +
                " for some reason.");
        log.error("Error Message:    " + ase.getMessage());
        log.error("HTTP Status Code: " + ase.getStatusCode());
        log.error("AWS Error Code:   " + ase.getErrorCode());
        log.error("Error Type:       " + ase.getErrorType());
        log.error("Request ID:       " + ase.getRequestId());
    } catch (AmazonClientException ace) {
        log.error("Caught an AmazonClientException while trying to " + action +  " file " + key + ", which " +
                "means the client encountered " +
                "an internal error while trying to " +
                "communicate with S3, " +
                "such as not being able to access the network.");
        log.error("Error Message: " + ace.getMessage());
    }
}

事实证明,只是超时时间太短了。JVM的冷启动时间肯定比我想象的要长。我只是假设我的代码中有另一个问题。将内存提升到192,超时时间提升到45秒。希望这对其他人有帮助


非常不幸的是,有人给我指出了错误的信息(NodeJS),而不是Java

事实证明,只是超时时间太短了。JVM的冷启动时间肯定比我想象的要长。我只是假设我的代码中有另一个问题。将内存提升到192,超时时间提升到45秒。希望这对其他人有帮助


非常不幸的是,有人给我指出了错误的信息(NodeJS),而不是Java

“我需要提供一个已完成或成功的上下文吗?”是的,请阅读文档@MarkB这是我在发布问题之前查看的内容。我看不到任何地方(可能会忽略它)会说你需要在上下文中加入一个完成或成功声明。这个例子也没有说明这一点。也许是因为我包含了上下文参数,而我不需要?@MarkB这对Node来说很有意义。我的函数是一个Java函数。“我需要提供完成或成功的上下文吗?”是的,请阅读文档@MarkB这是我在发布问题之前看到的内容。我看不到任何地方(可能会忽略它)会说你需要在上下文中加入一个完成或成功声明。这个例子也没有说明这一点。也许是因为我包含了上下文参数,而我不需要?@MarkB这对Node来说很有意义。我的函数是Java函数。