Загрузка файла из Интернета в ведро S3

Я хотел бы получить файл прямо из Интернета и вставить его в ведро S3, чтобы затем скопировать его в PIG-кластер. Из-за размера файла и моего не очень хорошего подключения к Интернету загрузка файла сначала на мой компьютер, а затем загрузка его на Amazon может не быть вариантом.

Можно ли каким-то образом захватить файл в Интернете и вставить его прямо в S3?

Ответ 1

[2017 править] Я дал оригинальный ответ еще в 2013 году. Сегодня я бы рекомендовал использовать AWS Lambda, чтобы загрузить файл и поместить его на S3. Это желаемый эффект - разместить объект на S3 без участия сервера.

[Исходный ответ] Это невозможно сделать напрямую.

Почему бы не сделать это с экземпляром EC2 вместо локального ПК? Скорость загрузки от EC2 до S3 в том же регионе очень хорошая.

относительно чтения/записи потока из/в s3 Я использую python smart_open

Ответ 2

Для любого (как я) менее опытного, вот более подробное описание процесса через EC2:

  • Запустите экземпляр Amazon EC2 в том же регионе, что и целевой S3-ведро. Самый маленький доступный (по умолчанию Amazon Linux) экземпляр должен быть прекрасным, но не забудьте предоставить ему достаточно места для хранения ваших файлов. Если вам нужна скорость передачи данных выше ~ 20 Мбайт/с, рассмотрите возможность выбора экземпляра с большими трубами.

  • Запустите SSH-подключение к новому экземпляру EC2, затем загрузите файл (ы), например, используя wget. (Например, чтобы загрузить весь каталог через FTP, вы можете использовать wget -r ftp://name:[email protected]/somedir/.)

  • Используя AWS CLI (см. Документация Amazon), загрузите файл в свой ведро S3. Например, aws s3 cp myfolder s3://mybucket/myfolder --recursive (для всего каталога). (Прежде чем эта команда будет работать, вам необходимо добавить свои учетные данные безопасности S3 в файл конфигурации, как описано в документации Amazon.)

  • Завершить/уничтожить экземпляр EC2.

Ответ 3

Загрузите данные через curl и переместите содержимое прямо на S3. Данные передаются непосредственно на S3 и не сохраняются локально, избегая проблем с памятью.

curl "https://download-link-address/" | aws s3 cp - s3://aws-bucket/data-file

Как было сказано выше, если скорость загрузки слишком медленная на вашем локальном компьютере, запустите экземпляр EC2, ssh и выполните указанную выше команду.