Несколько комментариев.
Нам нужно получить очень большой набор данных (сотни тысяч записей) из стороннего API, который доставляет записи с разбивкой на страницы в максимальных группах по 50;
Это означает около «тысячи» вызовов стороннего API. В другом месте вопроса вы упоминаете «несколько часов». Подходит ли эта нагрузка поставщику с этим API? Только одна вещь, о которой стоит подумать, если вы этого не сделали.
Выполнение вызовов API в рекурсивной лямбда-функции (из-за разбивки на страницы);
Be крайне осторожно с рекурсивными вызовами лямбда-функции, т. е. лямбда-функции, которая вызывает себя асинхронно. Может случиться так, что из-за ошибки Lambda никогда не перестанет вызывать себя, и тогда вы попадете в бесконечные циклы Lambda Calls и увеличиваете расходы ... Его можно остановить, но это PITA.
Сохранение результатов вызова в корзине S3 в виде одного или нескольких файлов json;
Если вы хотите использовать S3, я бы, вероятно, предложил сохранить данные объединены в меньшее количество файлов. Вы не упомянули размер каждой части данных, но тонны крошечных файлов не идеальны для S3. С другой стороны, только один гиганти c (например, большие десятки или сотни ГБ или более) не идеален для последующей обработки (даже если S3 справится с этим без проблем).
Я бы посоветовал вам изучить две вещи:
- Шаговые функции.
Поскольку вы Чтобы иметь дело с разбивкой на страницы стороннего API, вы можете определить конечный автомат в Step Functions, который будет вызывать вашу лямбду за вас. Lambda сделает свое дело (загрузит кучу записей, сохранит их где-нибудь ) и вернет либо количество загруженных записей, либо количество ожидающих записей, что-то в этом роде. Затем конечный автомат пошаговых функций будет отвечать за logi c принятия решения о том, вызывать ли Download Lambda снова (возможно, даже с параметрами, основанными на значении, возвращенном предыдущим вызовом), или если это было сделано.
Таким образом, у вас есть хорошее разделение проблем: c Лямбда-функция супер, она просто поглощает материал; и вы разделяете logi разбиения на страницы c (и, возможно, даже logi «параллелизм» или «синхронизацию» c, если вас по какой-то причине просят «замедлить» ваши вызовы стороннего API). *
Kinesis Firehose Kinesis Firehose - конвейер потоковой передачи данных. По сути, вы настраиваете поток пожарных шлангов, чтобы агрегировать записи для вас и сбрасывать их «где-то» (например, S3 является допустимой целью). Вы выбираете способ агрегирования (например, время, объем данных). И вы даже можете настроить Firehose для вызова лямбда-функции для преобразования каждой записи для вас перед хранением (здесь вы можете, например, добавить свои 2 уникальных идентификатора).