Облачная сборка не может подключиться к базе данных реплики

Я развертываю приложение django с помощью службы GCP Cloud build. В cloudbuild.yaml я определяю шаг для применения миграций с помощью gcr.io/google-appengine/exec-wrapper инструмента:

- id: "apply migrations"
    name: "gcr.io/google-appengine/exec-wrapper"
    args:
      [
          "-i",
          "gcr.io/$PROJECT_ID/${_SERVICE_NAME}",
          "-s",
          "${PROJECT_ID}:${_REGION}:${_DB_INSTANCE_NAME}",
          "-e",
          "GOOGLE_CLOUD_SECRETS_NAME=${_GOOGLE_CLOUD_SECRETS_NAME}",
          "-e",
          "DJANGO_SETTINGS_MODULE=${_DJANGO_SETTINGS_MODULE}",
          "--",
          "python",
          "manage.py",
          "migrate",
      ]

Все работает нормально с одной базой данных "default". Затем:

DATABASES = {
    "default": env.db("DATABASE_URL"),
    "replica": env.db("REPLICA_DATABASE_URL"),
}

Когда я добавил новую базу данных mysql replica с именем gcp-replica-2015-07-08-1508, служба Cloud build начала отказывать с ошибкой:

django.db.utils.OperationalError: 

(2002, "Can't connect to local MySQL server through socket 

'/cloudsql/myproject-228819:us-central1:gcp-replica-2015-07-08-'

Я проверил конфигурацию моей базы данных, напечатав DATABASES переменную в Cloud build и конфигурация имеет правильные данные, но если вы посмотрите на ошибку, вы заметите, что ошибка возвращается с обрезанной строкой в конце ! без -1508

Если я пропущу этот шаг и разверну свое приложение с тем же конфигом на Cloud Run все работает нормально.

Учетная запись службы имеет следующие роли:

enter image description here

Реплика DB Version MySQL 5.7

Согласно руководству Running Django on the Cloud Run environment, предоставленному Google, для сохранения конфигурации базы данных следует использовать environ.

В защищенном env-файле сохраните настройки, необходимые для запуска Django. Значение секрета извлекается через API Secret Manager, а значения загружаются в среду Django с помощью пакета django-environ.

Настройка для вашей базы данных SQL хранится в файле settings.py. Настройка DATABASES обновляется, чтобы предполагать использование прокси Cloud SQL Auth, если применяется настройка USE CLOUD SQL AUTH PROXY.

Когда вы используете gcr.io/google-appengine/exec-wrapper, и он предназначен для запуска в качестве шага в задании Cloud Build, вы должны отправить в качестве аргументов путь к развернутому образу приложения, любые переменные окружения, которые необходимо установить, любые экземпляры Cloud SQL, которые необходимо сделать доступными, и команду для запуска. Вот пример конфигурации Cloud Build:

шагов:

name: "gcr.io/google-appengine/exec-wrapper"
  args: ["-i", "gcr.io/my-project/appengine/some-long-name",
         "-e", "ENV_VARIABLE_1=value1", "-e", "ENV_2=value2",
         "-s", "my-project:us-central1:my_cloudsql_instance",
         "--", "bundle", "exec", "rake", "db:migrate"]

Вы можете найти путь к изображению, используя описанные версии приложения gcloud.

Вот некоторые связанные вопросы с тем же сообщением об ошибке, которое вы получаете, которые, возможно, могут помочь:

Вернуться на верх