Ошибка подключения к 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.

Другие вопросы по тегам