Загрузка AWS S3 Muitipart через API-шлюз или Lambda - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь создать в AWS повторно используемую безсерверную службу загрузки больших файлов (у нас есть несколько сайтов).Я хотел бы настроить API-шлюз в AWS и использовать CORS для управления тем, какие сайты можно загружать, что позволяет сайтам использовать код на стороне клиента .Вот то, что я пробовал, и препятствия, с которыми я столкнулся.Хотите знать, есть ли у кого-нибудь предлагаемые обходные пути?

  • Вызов S3 из клиентского кода загрузки потребовал бы от меня предоставления аутентификационной информации на стороне клиента, что кажется плохим
  • API Gateway не делаетпо-видимому, поддерживает вызов многоточечной S3 через тип интеграции службы AWS (URL-адрес привязан к общему URL-адресу службы S3, а IAM не поддерживается в типе интеграции HTTP)
  • Использование лямбда-функции для вызова многочастного API не будет работатьПоскольку полезная нагрузка запроса вызова может занять всего 6 МБ, а для получения минимального размера загружаемой части 5 МБ базовая скорость передачи данных превысит 6 МБ
  • . Я мог бы выполнить свою частичную загрузку.функциональность в Lambda, хранение фрагментов в S3, но я не могу понять, как объединить их вместе в памяти Lambda и в пространстве хранения tmp (по-прежнему потоки PassThrough не работают с AWS SDK)

Есть идеи?Стоит ли копаться в этом?Или для этого варианта использования без сервера нет доступа?

Таким образом, после дальнейшей работы с Amazon можно использовать предварительно подписанные URL-адреса с помощью составного API, но это не очень удобно.К таким шагам относятся следующие:

  1. Создание нового файла и разбиение его на части.
  2. Создание предварительно назначенного URL-адреса для инициирования многоэтапной загрузки.
  3. Используйте предварительно назначенный URL-адрес для начала загрузки.
  4. Создайте предварительно назначенный URL-адрес для каждой детали, используя номер детали.
  5. Используйте URL-адреса для отправки запросов PutPart.Отслеживайте Etag, который возвращается для номера детали.
  6. Объедините все части и соответствующие ETAG для формирования тела запроса.
  7. Создайте предварительно назначенный URL-адрес для завершения загрузки MP.
  8. Завершите многоэтапную загрузку, отправив запрос с предварительно заданным полным URL-адресом многоэтапной загрузки.

Примет ответ Анджело, поскольку он указывал в этом направлении, что с технической точки зрения представляется возможным

1 Ответ

0 голосов
/ 30 мая 2018

Возможно, вы сможете использовать предварительно загруженные URL для загрузки.В этом случае клиент получит доступ к вашему API, который выполнит любую необходимую проверку, а затем сгенерирует предварительно назначенный URL-адрес для S3, который будет возвращен клиенту.Затем клиент напрямую загружает на s3.

Вы можете увидеть некоторую информацию здесь: https://sanderknape.com/2017/08/using-pre-signed-urls-upload-file-private-s3-bucket/

...