Не удается подключиться к серверу MySQL в Django 2.xx Python AppEngine - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь использовать облачный экземпляр SQL / mysql для моей учетной записи APPEngine.Приложение представляет собой приложение Python django-2.1.5 appengine.Я создал экземпляр MYSQL в облаке Google.

Я добавил следующее в свой файл app.yaml, скопированный из подробностей экземпляра SQL:

beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT>
  • Я дал права на мой проект appengine xxx-appвладелец ххх- app@appspot.gserviceaccount.com Cloud SQL Client прав.Я создал учетную запись пользователя БД, специфичную для приложения XYZ, которая может подключаться ко всем хостам (* опция)

  • Подробности моего подключения в settings.py следующие:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'my-db',
            'USER': 'appengine',
            'PASSWORD': 'xxx',
            'HOST': '111.111.11.11', # used actual ip
            'PORT': '3306'
        }
    }
DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/<your-project-id>:<your-cloud-sql-instance>',
            'NAME': '<your-database-name>',
            'USER': 'root',
        }
    }
  • Я не могу подключиться также и из локальной сети.Однако, если я наберу Add Network моего локального IP-адреса, а затем попытаюсь подключиться к локальным соединениям.Приложение работает нормально локально после добавления сети локального IP-адреса с использованием нотации CIDR.

Мои проблемы:

  • Я не могу подключиться к Cloud SQL без добавленияAppEngine назначил IP-адрес.Это дает мне ошибку:
OperationalError: (2003, "Can't connect to MySQL server on '0.0.0.0' ([Errno 111] Connection refused)")
  • Где я могу найти назначенный IP-адрес устройства.Я не против, даже если это временно.Я понимаю, что если мне нужен статический IP-адрес, мне нужно создать экземпляр виртуальной машины Compute.

1 Ответ

0 голосов
/ 06 февраля 2019

App Engine не имеет никаких гарантий относительно IP-адреса конкретного экземпляра и может измениться в любое время.Поскольку это безсерверная платформа, она абстрагирует инфраструктуру, чтобы вы могли сосредоточиться на своем приложении.

При использовании App Engine Flex возможны два варианта: сокет домена Unix и порт TCP.То, какой App Engine предоставляет для вас, зависит от того, как вы указываете его в своем app.yaml:

  • cloud_sql_instances: <INSTANCE_CONNECTION_NAME> предоставляет сокет Unix на /cloudsql/<INSTANCE_CONNECTION_NAME>
  • cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT> обеспечиваетлокальный порт tcp (127.0.0.1:<TCP_PORT>).

Дополнительную информацию об этом можно найти на странице Подключение из App Engine .

...