Как подключиться к Google CloudSQL PostgresSQL - PullRequest
1 голос
/ 14 марта 2019

Я попытался подключиться к Google CloudSQL PostgresSQL, используя Gorm Golang, и похоже, что он не работает.

Вот код

func InitDB() *gorm.DB {

    psqlInfo := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_NAME"))
    db, err := gorm.Open("postgres", psqlInfo)
    if err != nil {
        fmt.Println("Failed to connect to the Database")
    }
    fmt.Println("Connected to the Database")
    DB = db
    return DB
}

Если я использую конфигурацию localhost, все работает нормально. Смотрите мой .env файл для конфигурации cloudSQL

DB_HOST=trader-234509:us-central1:testv1
DB_PORT=5432
DB_USER=username
DB_NAME=testv1
DB_PASSWORD=

Ошибка говорит

dial tcp: lookup trader-234509: us-central1: testv1: такого хоста нет паника: ошибка во время выполнения: неверный адрес памяти или разыменование нулевого указателя [сигнал SIGSEGV: код нарушения сегментации = 0x1 addr = 0x40 pc = 0x164681d]

Мой локальный конфиг (Этот работает нормально)

DB_HOST=localhost
DB_PORT=5432
DB_USER=username
DB_NAME=test
DB_PASSWORD=

Я сделал что-то не так?

1 Ответ

0 голосов
/ 19 марта 2019

Cloud SQL пока не поддерживает прямое подключение к имени экземпляра для стороннего приложения, для подробностей: https://cloud.google.com/sql/docs/mysql/connect-external-app

Исходя из моего опыта, есть 2 решения:

  1. В соответствии с приведенной выше инструкцией вы можете настроить облачный прокси-сервер, выполнив следующие шаги, и поток соединений будет следующим: приложение Golang -> облачный прокси-сервер -> облачный SQL. Этот подход является гибким, и вы можете контролировать соединение с помощью брандмауэра.,Но вы должны потратить дополнительные $$ на обслуживание сервера и этого экземпляра облачного прокси. Я также слышал, что у облачного прокси могут быть проблемы с производительностью, но у меня пока нет точных доказательств

  2. Назначьте частный IP-адрес экземпляру Cloud SQL, см. https://cloud.google.com/sql/docs/mysql/private-ip,, чтобы приложение могло обращаться к БД напрямую, используя этот IP-адрес.Компромисс очевиден: приложение должно находиться в одной сети проекта, но это гораздо более удобный подход, особенно.все ваши приложения размещены в одной сети

Я не пробовал подход с публичным IP-доступом, поскольку Cloud Proxy - это то, что мне нужно, если требуется удаленное сетевое соединение

Короче говоря, вам нужно развернуть свой код на виртуальной машине или в другой управляемой службе Google, используя вариант 2, или настроить облачный прокси-сервер для поддержки локальной отладки для варианта 1Надеюсь, это поможет

...