500 Internal Server Ошибка при загрузке огромного файла через Cloud Run - PullRequest
3 голосов
/ 04 марта 2020

После создания огромного изображения, содержащего один файл объемом более 30 ГБ для тестирования, я не смог загрузить этот файл после развертывания изображения в Cloud Run.

Просто чтобы прояснить изображение выполняет сборку и работает в Cloud Run, но указанный c большой файл по какой-то причине недоступен.

Вот пример файла Docker для воспроизведения этой ошибки:

FROM python:3
WORKDIR /app
RUN touch test # downloading this file works fine
RUN dd if=/dev/urandom of=file bs=1M count=32768 # this one takes a while to build and to deploy, and won't be downloadable later on.
EXPOSE 8080
CMD python -m http.server 8080 --bind 0.0.0.0

Попытка загрузки файл через wget возвращает следующее:

wget https://cloud-run-link-here.app/file
--2020-03-03 17:19:16--  https://cloud-run-link-here.app/file
Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'
Resolving cloud-run-link-here.app (bigdocker-7k3mrt42la-uc.a.run.app)... :::::0, 0.0.0.0
Connecting to cloud-run-link-here.app (cloud-run-link-here.app)|:::::0|:443... connected.
HTTP request sent, awaiting response... 500 Internal Server Error
2020-03-03 17:19:17 ERROR 500: Internal Server Error.

Локальное выполнение того же самого прекрасно работает.

Нет полезной информации о логах Cloud Run, как показано на рисунке ниже. Cloud Run logs

1 Ответ

3 голосов
/ 04 марта 2020

Максимальный размер ответа для Cloud Run составляет 32 МБ , а для HTTP-сервера в стандартной библиотеке Python не рекомендуется для производственного использования . Вполне вероятно, что он не пытается разбить на части чрезвычайно большой запрос и завершается неудачей.

Вместо этого следует рассмотреть возможность использования производственного HTTP-сервера, такого как gunicorn .

...