Проблемы с подключением от App Engine к CloudSQL с использованием частного IP и бессерверного доступа VPC

#google-app-engine #google-cloud-platform #google-cloud-sql #serverless #google-vpc

#google-app-engine #google-облачная платформа #google-cloud-sql #бессерверный #google-vpc

Вопрос:

Я делаю PoC для подключения Google App Engine к CloudSQL instance запуску Private IP на SharedVPC . Образец приложения для тестирования из
https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/cloud-sql/mysql/sqlalchemy/README.md

Мой Serverless VPC Connector Range заключается в следующем

  $ gcloud compute networks vpc-access connectors list --region=us-central1
  CONNECTOR_ID       REGION       NETWORK          IP_CIDR_RANGE    MIN_THROUGHPUT  MAX_THROUGHPUT  STATE
  testserverlessvpc  us-central1  kube-shared-vpc  192.168.60.0/28  200             300             READY
  

Private IP Range заключается в следующем

      $ gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
  NAME                 ADDRESS/RANGE     TYPE      PURPOSE      NETWORK           REGION  SUBNET  STATUS
 cloudsqltestrangenew  10.0.100.0/20    INTERNAL  VPC_PEERING  kube-shared-vpc                   RESERVED
  

MySQL пример выглядит следующим образом

 $ gcloud sql instances list
 NAME       DATABASE_VERSION  LOCATION       TIER         PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
 mysql2           MYSQL_5_7         us-central1-b  db-f1-micro  -            10.0.100.5       RUNNABLE
  

app.standard.yaml заключается в следующем

  runtime: python37

 service: appcentralpri
 env_variables:
     CLOUD_SQL_CONNECTION_NAME: projectname:us-central1:mysql2
     DB_USER: guestdb
     DB_PASS: password
     DB_NAME: testdb
     DB_HOST: 10.0.100.5:3306

     vpc_access_connector:
     name: projects/hostproject-26a2/locations/us-central1/connectors/testserverlessvpc
  

Развертывание прошло нормально, ошибок в журнале не обнаружено

     gcloud app deploy app.standard.yaml
  

Однако, когда я пытаюсь подключиться к конечной точке приложения, страница недоступна с надписью «Сервер не найден»

Я дал VPC Access и Network Compute User роль ниже App Engine Default Service account на VPC Host Project

       <hostproject>-26a2@appspot.gserviceaccount.com 
  

Обновления

Также добавлено ниже в app.yaml, но не повезло

  env_variables:
   GAE_USE_SOCKETS_HTTPLIB : 'anyvalue'
  

https://cloud.google.com/appengine/docs/standard/python/sockets#making_httplib_use_sockets

Та же настройка для CloudRun и CloudSQL работала для меня, но с трудом GAE . Есть предложения по решению этой проблемы?

Ответ №1:

Ваш файл app.yaml неправильно отформатирован. vpc_access_connector: Необходимость быть на корневом уровне. Здесь оно принимается как значение переменной среды.

 runtime: python37

 service: appcentralpri
 env_variables:
     CLOUD_SQL_CONNECTION_NAME: projectname:us-central1:mysql2
     DB_USER: guestdb
     DB_PASS: password
     DB_NAME: testdb
     DB_HOST: 10.0.100.5:3306

 vpc_access_connector:
     name: projects/hostproject-26a2/locations/us-central1/connectors/testserverlessvpc
  

Комментарии:

1. Спасибо. Пробовал, но безуспешно

2. Зачем вам CLOUD_SQL_CONNECTION_NAME env var? Можете ли вы поделиться своим кодом, в котором вы устанавливаете параметры подключения?

3. Ниже приведен исходный код приложения github.com/GoogleCloudPlatform/python-docs-samples/blob/master /…

4. И работает ли развертывание в облаке в том же проекте и с использованием того же соединителя? Хммм. Странно… Можете ли вы объяснить, почему вы установили пиринг? Это между какими сетями?

5. Не уверен, что следил за вашим последним комментарием. В любом случае, можете ли вы объяснить, где вы развернули свой рабочий облачный запуск? С тем же соединителем VPC и в том же проекте, что и App Engine?