Похоже что ваша логика верная за исключением одного момента, судя по
документации, амазон не умеет отдавать потоки, но поддерживает заголовок Range в запросе. Вы можете качать контент с сервера амазона чанками по мере надобности, и отдавать эти чанки пользователю
через стрим. Вам остается правильно рассчитать размер чанка и момент когда надо начинать качать следующий чанк (иначе памяти не хватит). К счастью
writable.write()
возвращает false в случае если данные которые вы передали попадут в буфер на отправку, а не будут отправлены сразу.
Если у вас есть более конкретные вопросы, лучше создайте их отдельно.