【问题标题】:Cloud build can't connect to replica database云构建无法连接到副本数据库
【发布时间】:2022-01-27 07:51:15
【问题描述】:

我正在使用 GCP Cloud build 服务部署 django 应用程序。在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"),
}

当我添加名为gcp-replica-2015-07-08-1508 的新mysql replica 数据库时,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-'

我通过在Cloud build 中打印DATABASES 变量来检查我的数据库配置,并且配置具有正确的数据,但是如果您查看错误,您会注意到错误返回时会在末尾带有剪切字符串!没有-1508

如果我跳过此步骤并将具有相同配置的应用程序部署到 Cloud Run 一切正常。

服务帐号具有以下角色:

复制DB Version MySQL 5.7

【问题讨论】:

    标签: mysql django google-cloud-platform google-cloud-build


    【解决方案1】:

    根据谷歌提供的Cloud Run environment上的Running Django指南,你应该使用environ来保存数据库配置。

    在一个安全的 env 文件中,保存启动 Django 所需的设置。通过Secret Manager API 检索秘密值,并使用 django-environ 包将这些值加载到 Django 环境中。

    SQL 数据库的设置存储在 settings.py 文件中。如果应用了 USE CLOUD SQL AUTH PROXY 设置,DATABASES 设置会更新以推断使用 Cloud SQL Auth 代理。

    当您使用 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 应用版本找到图像路径。

    以下是一些相关问题,其中包含您收到的相同错误消息,可能会有所帮助:

    【讨论】:

      猜你喜欢
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2021-10-30
      相关资源
      最近更新 更多