КОНТЕКСТ:
Я пытаюсь прочитать файл csv на AWS s3, вычислить его данные и записать результаты на другом csv в том же контейнере s3.
Я попробовал следующий код, чтобы создать класс, который будет читать мои Main
, с аргументами, хранящимися в текстовом файле с именем lambdaCmd.txt
.Каждый раз, когда lambdaCmd.txt
изменяется, запускается лямбда-функция, и содержимое lambdaCmd.txt
передается следующему классу через параметр s3event
:
public class LambdaCmd implements RequestHandler<S3Event, Void>{
static final Logger LOGGER = LogManager.getLogger(LambdaCmd.class);
@Override
public Void handleRequest(S3Event s3event, Context context) {
//Getting my txt file's path
S3EventNotification.S3EventNotificationRecord record = s3event.getRecords().get(0);
String bkt = record.getS3().getBucket().getName();
String key = record.getS3().getObject().getKey().replace('+', ' ');
try {
key = URLDecoder.decode(key, "UTF-8");
} catch (UnsupportedEncodingException ex) {
LOGGER.error(ex);
}
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build();
try {
//Getting my text file as a String Stream
InputStreamReader cmdStream =
new InputStreamReader(s3Client.getObject(bkt, key).getObjectContent());
BufferedReader br = new BufferedReader(cmdStream);
//Parsing the command in cmdStream
//...
//The command is now "String[] cmdArray" to be passed to my main
MyMain.main(cmdArray);
//The main function reads and write from s3 with a similar use of s3Client
br.close();
} catch (IOException | IllegalArgumentException | NullPointerException ex) {
LOGGER.error(ex);
}
return null;
}
}
ПРОБЛЕМА:
После регистрации некоторых отладочных сообщений в этом коде я выяснил, что лямбда-функция останавливается на этой строке:
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build();
Вот журнал CloudWatch (я скрываю личную информацию с помощью ##########
):
START RequestId: ########## Version: $LATEST
16:12:11.596 [main] DEBUG path.to.mylambdaclass.LambdaCmd - LambdaCmd started
16:12:11.616 [main] DEBUG path.to.mylambdaclass.LambdaCmd - Just before creating s3Client
END RequestId: ##########
REPORT RequestId: ########## Duration: 12398.45 ms Billed Duration: 12400 ms Memory Size: 128 MB Max Memory Used: 67 MB
У меня также есть сообщение журнала сразу после создания s3Client
, но оно не печатается в журналах.
ВОПРОС:
Почему моя лямбда преждевременно заканчивается?Я неправильно использую некоторые объекты?