У меня есть изображение с относительно длительным временем запуска ~ 5 секунд. Другими словами, сервер Flask запущен и работает, но я загружаю некоторые данные в глобальные переменные, поэтому сервер на данный момент не работает. Если я пингую конечную точку Google Cloud Run в течение этого времени, время ожидания соединения будет
upstream request timeout
. Чтобы избежать этого, я добавил проверку работоспособности docker, которая вызывает конечную точку на моем сервере. Этот HTTP-запрос имеет время ожидания 2 секунды. Если время ожидания истекло, это означает, что сервер все еще загружает эти глобальные файлы, и конечная точка еще не готова к приему запросов. Это отлично работает в разработке, но не в Cloud Run. Cloud Run начинает отправлять трафик c на мой сервер до того, как он завершит загрузку, а затем, до того, как состояние контейнера HEALTHCHECK станет действительно "здоровым".
Мой вопрос
Как я могу отложить Cloud Run от доставки traffi c до моего контейнера до его полной настройки?
Edit> answer
В моем случае (с использованием Python + Gunicorn) я смог решить эту проблему с помощью шаблон "фабрики приложений" . То есть, запустите Gunicorn с
$ gunicorn 'test:create_app()'
Где функция create_app()
возвращает приложение Flask.
Моя гипотеза о том, почему это работает, потому что до тех пор, пока эта функция не вернется, Gunicorn будет еще не прослушивает порт, к которому он привязан, и Cloud Run не начнет отправлять трафик c в ваш новый работающий контейнер, пока это не так.