Используйте hasura с Google Clound Run и Google Cloud SQL - PullRequest
2 голосов
/ 13 октября 2019

Документы описывают, что 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 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.

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

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

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>

Ответы [ 2 ]

3 голосов
/ 14 октября 2019

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

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

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

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

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

1 голос
/ 23 октября 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...