Ошибка при подключении к Cloud SQL, Cloud Run и Django

У меня есть приложение, работающее на Django в Cloud Run, которое подключается к базе данных PostgreSQL, размещенной на Cloud SQL. В настоящее время оно работает и настроено следующим образом:

DATABASES = {'default': env.db()}

DATABASES['default']['OPTIONS'] = {
    'pool': {
        'min_size': 5,
        'max_size': 20
    }
}

Эта конфигурация работает, но количество активных соединений остается высоким. Когда я удаляю конфигурацию пула, я получаю несколько ошибок.

2025/04/12 16:24:15 Cloud SQL connection failed. Please see https://cloud.google.com/sql/docs/mysql/connect-run for additional details: failed to get instance: Refresh error: failed to get instance metadata (connection name = "xxx"): googleapi: Error 429: Quota exceeded for quota metric 'Connect Queries' and limit 'Connect Queries per minute per user per region' of service 'sqladmin.googleapis.com' for consumer 'xxx'.

Даже после настройки CONN_MAX_AGE он продолжает выдавать ошибки. Я пробовал настроить pgBouncer, но безуспешно из-за необходимости получения прав, которые невозможно получить на Cloud SQL. Наконец, я запускаю Django следующим образом:

WEB_CONCURRENCY=${WEB_CONCURRENCY:-4}
THREADS=${THREADS:-8}

exec /usr/local/bin/gunicorn project.asgi:application \
    --bind "0.0.0.0:$PORT" \
    --workers "$WEB_CONCURRENCY" \
    --worker-class uvicorn.workers.UvicornWorker \
    --threads "$THREADS" \
    --timeout 0

Кто-нибудь сталкивался с подобным или имеет решение для этого?

Я сосредоточусь на распространенном сообщении об ошибке:

Cloud SQL connection failed. Please see https://cloud.google.com/sql/docs/mysql/connect-run for additional details

  • Слишком общий, чтобы на нем заострять внимание, но для совместного использования – тайм-ауты при переходе от Cloud Run к Cloud SQL могут возникать по целому ряду причин, поскольку существует множество различных способов установить это соединение (общедоступный IP/ частный IP, TCP, Unix, Cloud SQL connector). Каждый способ установления соединения может по-разному приводить к возникновению тайм-аута, и настройки, которые мы можем рекомендовать, будут немного отличаться в зависимости от используемого языка / метода подключения.

Error 429: Quota exceeded for quota metric 'Connect Queries' and limit 'Connect Queries per minute per user per region' of service 'sqladmin.googleapis.com' for consumer 'xxx'

  • Этот вариант более подробный, и, похоже, вы превысили лимит квоты. Я бы рекомендовал отправить запрос на увеличение квоты в команду Cloud SQL team и посмотреть, смогут ли они одобрить это или предоставить дополнительную информацию.
Вернуться на верх