В настоящее время я использую TransferManager для загрузки всех файлов в корзине S3 из функции Lambda.
// Initialize
TransferManagerBuilder txBuilder = TransferManagerBuilder.standard();
// txBuilder.setExecutorFactory(() -> Executors.newFixedThreadPool(50));
TransferManager tx = txBuilder.build();
final Path tmpDir = Files.createTempDirectory("/tmp/s3_download/");
// Download
MultipleFileDownload download = tx.downloadDirectory(bucketName,
bucketKey,
new File(tmpDir.toUri()));
download.waitForCompletion();
return Files.list(tmpDir.resolve(bucketKey)).collect(Collectors.toList());
Кажется, требуется около 300 seconds
, чтобы загрузить 10,000 files
(размер ~20KB each
), что дает мне скорость передачи около 666 KBps
. Увеличение размера пула потоков вообще не влияет на скорость передачи.
Конечная точка S3 и лямбда-функция находятся в одном регионе AWS и в одной учетной записи AWS.
Как я могу оптимизировать загрузки S3?