Используйте hasura с Google Cloud Run и Google Cloud SQL

В документации описывается, что hasura нужна строка подключения postgres с HASURA_GRAPHQL_DATABASE_URL env var.

Пример:

docker run -d -p 8080:8080 \
  -e HASURA_GRAPHQL_DATABASE_URL=postgres://username:password@hostname:port/dbname \
  hasura/graphql-engine:latest

Похоже, что моя проблема в том, что имя подключения экземпляра сервера для Google Cloud sql выглядит как PROJECT_ID:REGION:INSTANCE_ID не TCP

Из облака запустите документы (https://cloud.google.com/sql/docs/postgres/connect-run) У меня получился такой пример:

postgres://<db_user>:<db_pass>@/<db_name>?unix_sock=/cloudsql/<cloud_sql_instance_name>/.s.PGSQL.5432 но похоже, что это не работает. Идеи?

В настоящее время я добавляю cloud_sql_proxy в качестве обходного пути к контейнеру, чтобы я мог подключиться к TCP 127.0.0.1:5432, но я ищу прямое подключение к google-cloud-sql.

// РЕДАКТИРОВАТЬ Спасибо за комментарии, beta8 в основном помогала, но я также пропустил параметр set-cloudsql-instances: https://cloud.google.com/sdk/gcloud/reference/beta/run/deploy#--set-cloudsql-instance

Моя полная команда запуска из облака:

gcloud beta run deploy \
    --image gcr.io/<PROJECT_ID>/graphql-server:latest \
    --region <CLOUD_RUN_REGION> \
    --platform managed \
    --set-env-vars HASURA_GRAPHQL_DATABASE_URL="postgres://<DB_USER>:<DB_PASS>@/<DB_NAME>?host=/cloudsql/<PROJECT_ID>:<CLOUD_SQL_REGION>:<INSTANCE_ID>" \
    --timeout 900 \
    --set-cloudsql-instances <PROJECT_ID>:<CLOUD_SQL_REGION>:<INSTANCE_ID>

person wiesson    schedule 13.10.2019    source источник


Ответы (2)


Согласно v1.0.0-beta.8, который лучше поддерживает параметры строки подключения Postgres, мне удалось заставить работать соединение unix, от Cloud Run до Cloud SQL, без встраивания прокси в контейнер.

Соединение должно выглядеть примерно так:

postgres://<user>:<password>@/<database>?host=/cloudsql/<instance_name>

Обратите внимание, что клиент добавит за вас суффикс /.s.PGSQL.5432.

Убедитесь, что вы добавили также разрешение клиента Cloud SQL.

person Matheus Schettino    schedule 22.10.2019
comment
Я получаю эту ошибку: {code: postgres-error, error: connection error, internal: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/cloudsql/<instance_name>/.s.PGSQL.5432"? , path: $} - имя экземпляра должно быть правильным. Идеи? Я добавил разрешения sql для облака. - person wiesson; 23.10.2019
comment
Я создам репо для воспроизведения, и мы сможем обсудить это оттуда. Буду обновлять здесь, как только сделаю это завтра. - person Matheus Schettino; 24.10.2019
comment
Искали такое решение неделями! Спасибо :) - person David Oliveira; 29.05.2020
comment
Более подробная информация о том, как использовать это решение, находится в этом репозитории: github.com/n3n/hasura-cloud- запустить - person Karol Zlot; 19.07.2020

Если для базы данных Hasura требуется именно такой формат строки подключения, вы можете его использовать. Однако вы не можете использовать поддержку Cloud Run в Cloud SQL. Вам нужно будет внести в белый список весь Интернет, чтобы ваш экземпляр Cloud Run мог подключиться. Cloud Run не публикует блоки адресов CIDR. Этот метод не рекомендуется.

Метод Unix Socket предназначен для Cloud SQL Proxy, который поддерживает Cloud Run. Это метод подключения, который используется внутри вашего контейнера, когда Cloud Run управляет подключением к Cloud SQL. Обратите внимание: для этого метода имена хостов на основе IP не поддерживаются вашим клиентом для подключения к прокси-серверу Cloud SQL Cloud Run.

Вы можете встроить прокси-сервер Cloud SQL прямо в свой контейнер. Затем вы можете использовать 127.0.0.1 в качестве части имени хоста для строки подключения. Для этого потребуется создать сценарий оболочки в качестве точки входа в Cloud Run для запуска как прокси-сервера, так и вашего приложения. Исходя из вашего сценария, рекомендую этот метод.

Прокси-сервер Cloud SQL написан на Go, и его исходный код опубликован.

Если вы решили встроить прокси, не забудьте добавить роль клиента Cloud SQL в учетную запись службы Cloud Run.

person John Hanley    schedule 14.10.2019
comment
В настоящее время в новейших версиях прокси-сервера Cloud SQL не требуется. - person Karol Zlot; 19.07.2020