Ошибка подключения к Google Cloud Postgres с GORM v2 после обновления GORM
После обновления до версий Gorm:
gorm.io/driver/postgres v1.0.2
gorm.io/gorm v1.20.2
Не удается подключиться к Google Cloud SQL PostgreSQL v12
Соединение работало без проблем на более старых версиях GORM с:
db, err := gorm.Open("postgres", "host=/cloudsql/project_id:us-central1:sql_instance_name port=5432 user=... dbname=... password=... sslmode=disable")
Новая версия GORM работает при локальной установке (mac) localhost_golang / localhost_postgres
КОД в Google Cloud:
dsn := ""
dsn += "user=postgres "
dsn += "password=admin_password_here "
dsn += "host=/cloudsql/project_id:us-central1:sql_instance_name "
dsn += "dbname=db_name "
dsn += "port=5432 "
dsn += "sslmode=disable "
fmt.Println("dsn:%v", dsn)
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
ОШИБКА в Google Cloud:
[0 мин. [31 мин. [Ошибка] [0 мин. Не удалось инициализировать базу данных, возникла ошибка, не удалось подключиться к
host=/cloudsql/project_id:us-central1:sql_instance_name user=postgres database=db_name
: ошибка набора (наберите unix /cloudsql/project_id:us-central1:sql_instance_name/.s.PGSQL.5432: connect: соединение отклонено)
Спасибо!
1 ответ
Учетной записи службы App Engine по умолчанию требуются соответствующие роли, хотя на странице "Подключения CLoud SQL" указано "Авторизация App Engine". Все приложения в этом проекте авторизованы по умолчанию. https://cloud.google.com/sql/docs/postgres/connect-app-engine-standard?_ga=2.121100104.-1170262708.1601472976
Чтобы настроить стандартную среду App Engine для подключения к экземпляру Cloud SQL с использованием общедоступного IP-адреса:
Убедитесь, что у созданного выше экземпляра есть общедоступный IP-адрес. Вы можете проверить это на странице обзора вашего экземпляра в Google Cloud Console. Если вам нужно добавить его, см. Инструкции на странице "Настройка общедоступного IP-адреса".
Получите INSTANCE_CONNECTION_NAME для своего экземпляра. Его можно найти на странице обзора вашего экземпляра в Google Cloud Console. или выполнив следующую команду: экземпляры gcloud sql описывают [INSTANCE_NAME].
Убедитесь, что учетная запись службы, которую ваше приложение использует для аутентификации вызовов Cloud SQL, имеет соответствующую роль и разрешения Cloud SQL. Учетной записи службы для вашей службы требуется одна из следующих ролей IAM:
- Cloud SQL Client (preferred)
- Cloud SQL Editor
- Cloud SQL Admin
Или вы можете вручную назначить следующие разрешения IAM:
- cloudsql.instances.connect
- cloudsql.instances.get
Подробные инструкции по добавлению ролей IAM в учетную запись службы см. В разделе Предоставление ролей учетным записям службы. По умолчанию ваше приложение авторизует ваши подключения с помощью учетной записи службы App Engine. Идентификатор учетной записи службы имеет формат PROJECT_ID@appspot.gserviceaccount.com.
Если авторизационная сервисная учетная запись принадлежит другому проекту, нежели экземпляр Cloud SQL, то для обоих проектов необходимо будет добавить разрешения Cloud SQL Admin API и IAM.