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