Все, что вы делаете, должно будет загрузить файл, разделить его и повторно загрузить.Единственный вопрос - , где , и задействован ли локальный диск.
Джон Ротенштейн привел вам пример использования локального диска в экземпляре EC2.Это дает преимущество работы в центрах обработки данных AWS, поэтому он получает высокоскоростное соединение, но имеет ограничения, которые: (1) вам нужно место на диске для хранения исходного файла и его частей, и (2) вам нужен экземпляр EC2где вы можете сделать это.
Одна небольшая оптимизация состоит в том, чтобы избежать локальной копии большого файла, используя дефис в качестве пункта назначения s3 cp
: это отправит вывод стандартному выводу, и выможет затем передать его в split
(здесь я также использую дефис, чтобы сказать split для чтения из стандартного ввода):
aws s3 cp s3://my-bucket/big-file.txt - | split -l 1000 - output.
aws s3 cp output.* s3://dest-bucket/
Опять же, для этого требуется экземпляр EC2, иместо для хранения выходных файлов.Однако есть флаг split
, который позволит вам запустить команду оболочки для каждого файла в разбиении:
aws s3 cp s3://src-bucket/src-file - | split -b 1000 --filter 'aws s3 cp - s3://dst-bucket/result.$FILE' -
Итак, теперь вы устранили проблему с локальным хранилищем, но осталисьс вопросом где его запустить.Я бы порекомендовал AWS Batch , который может раскрутить экземпляр EC2 всего за время, необходимое для выполнения команды.
Конечно, вы можете написать скрипт Python для этогоЛямбда, и это было бы преимуществом автоматического запуска при загрузке исходного файла на S3.Я не очень знаком с Python SDK (boto), но похоже, что get_object вернет тело исходного файла в виде потока байтов , который затем можно перебрать какстрок, накапливая сколько угодно строк в каждом выходном файле.