Отсутствует сокет для подключения к Cloud SQL из стандартной среды Google App Engine - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь подключить приложение Python 3.7 GAE в стандартной среде к базе данных Cloud SQL Postgres 9.6.Процедура описана в этом doc .

К сожалению, сокет UNIX /cloudsql/<DB_CONNECTION_NAME>, который обычно используется для подключения к базе данных, не существует в экземпляре GAE (папка /cloudsqlпусто).

Дополнительная информация о том, что я пробовал:

  • приложение GAE и экземпляр SQL-облака находятся в одном проекте и регионе (я пробовал в europe-west1 и europe-west3)
  • Я добавил и удалил ключ beta_settings -> cloud_sql_instances в файле конфигурации app.yaml, но безрезультатно.Из того, что я понял, это все равно должно быть необходимо только в гибкой среде
  • Я активировал пользовательский интерфейс администратора Cloud SQL

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

SO вопросы по этой проблеме либо устарели, либо остались без ответа, либо не решают проблему в моей среде.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Основываясь на аналогичной проблеме, наиболее вероятная основная причина подробно описана здесь: https://issuetracker.google.com/117804657#comment16

Другие возможные причины, согласно обсуждению, могут быть:

  • Отсутствие общедоступного IP-адреса в экземпляре SQL
  • Спецификация порта в настройках конфигурации

Вот несколько рекомендаций:

  • Запустите приложение локально, чтобы убедиться, что оно работает перед развертыванием в App Engine.
  • Дважды проверьте конфигурацию Cloud SQL (например, имя пользователя, пароль, имя подключения экземпляра) в файле app.yaml.
  • Убедитесь, что Google Cloud SQL API включен.
  • Попробуйте воссоздать экземпляр Cloud SQL.

Простое воссоздание экземпляра или базы данных Cloud SQL работало в других случаях, так как изменения в настройках быстрого запуска по умолчанию могут быть затруднены для отслеживания.

Приветствия

0 голосов
/ 06 апреля 2019

Я могу получить соединение, работающее со следующей конфигурацией:

PROJECT=[[YOUR-PROJECT-ID]]
REGION=europe-west3
INSTANCE=instance-01

и:

import os

from flask import Flask

import psycopg2

db_user = os.environ.get('CLOUD_SQL_USERNAME')
db_pass = os.environ.get('CLOUD_SQL_PASSWORD')
db_name = os.environ.get('CLOUD_SQL_DATABASE')
db_conn = os.environ.get('CLOUD_SQL_INSTANCE')

app = Flask(__name__)


@app.route('/')
def main():
    host = '/cloudsql/{}'.format(db_conn)

    cnx = psycopg2.connect(
        dbname=db_name,
        user=db_user,
        password=db_pass,
        host=host
    )
    with cnx.cursor() as cursor:
        cursor.execute('SELECT NOW() as now;')
        result = cursor.fetchall()
    current_time = result[0][0]
    cnx.commit()
    cnx.close()

    return str(current_time)

и:

flask==1.0.2
psycopg2==2.8

и, с${VARIABLE} заменено значением:

runtime: python37
env_variables:
  CLOUD_SQL_INSTANCE: "${PROJECT}:${REGION}:${INSTANCE}"
  CLOUD_SQL_USERNAME: ${USERNAME}
  CLOUD_SQL_PASSWORD: ${PASSWORD}
  CLOUD_SQL_DATABASE: ${DATABASE}
...