【问题标题】:Can you have two Google Cloud Projects that talk to the same Cloud SQL Database?您能否拥有两个与同一个 Cloud SQL 数据库通信的 Google Cloud 项目?
【发布时间】:2020-08-02 08:00:15
【问题描述】:

我刚刚在 Google Cloud 中创建了一个项目,并将 Cloud SQL 数据库实例附加到该项目。我能够部署一个连接到该数据库的 Django 应用程序就好了。

但是,我想创建一个单独的 Django 应用程序/项目,它附加到我的第一个 Django 应用程序所附加的同一个 Cloud SQL 数据库。

这可能吗?

一个 Django 应用程序负责网页抓取并向数据库提供常量数据,而我的第二个 Django 应用程序(我已经部署的那个)分析并返回该数据的 json。将这两个应用程序分开是有利的,因为如果我需要修改我的网络抓取算法,整个应用程序不会停机。

【问题讨论】:

  • 您如何访问您的数据库?通过IP?通过 Cloud SQL 代理?通过嵌入式连接定义(在 App Engin、Cloud Run 或 Cloud Function 中)?
  • 本地连接数据库,我目前正在使用代理。有没有办法可以部署一个单独的 Django 应用程序,它有一个单独的域,连接到同一个 Cloud SQL 实例?

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


【解决方案1】:

您可以为这两个应用程序使用 cloudsql 代理。此外,只要您使用 service account 授权您的两个应用程序都可以访问 cloudsql 就可以了。

【讨论】:

  • 似乎 cloudsql 代理用于从本地计算机连接到 Cloud SQL DB。我想部署一个单独的 django 应用程序,它有一个单独的域,可以连接到同一个数据库实例。
  • 您使用的是哪种部署机制?如果您使用的是 kubernetes,您可以为 cloudsql 代理创建部署 + 服务,并且您的两个应用程序都可以引用该服务。
  • 我在 App Engine 标准环境中运行 Django。似乎在这种机制中,每个项目(域)都附加到一个 SQL 实例。
  • 有没有提到的文件?我刚刚检查过,只要您的应用程序有权连接到 cloudsql(即使它位于不同的项目中)。你见过这个吗? cloud.google.com/sql/docs/mysql/connect-app-engine#python 我相信每个实例都以 ::. 命名
【解决方案2】:

您可以在当前项目或外部项目中使用所需的数据库。如果您使用 Cloud SQL 代理,您的应用的服务帐号

  • 默认 AppENGine 服务帐户(如果在 App Engine 上)
  • 或 Compute Engine 默认服务帐号
    • 除非您在组件(Cloud Run、计算引擎)上定义了特定的服务帐户
    • 如果可能的话,我强烈建议在组件上使用特定的服务帐户(App Engine 不可能)

要授予服务帐户的角色如下:roles/cloudsql.client

但是,我建议您明智地考虑您的设计。当前的趋势是将 1 个数据库锁定到 1 个服务(或微服务)。

考虑架构更新:当您更新架构或其中一个时,需要在 2 个服务之间进行同步更新,否则另一个应用程序将失败。

在回滚的情况下,两个应用程序都需要回滚。

如果有 2 个团队,每个应用一个,他们的发布计划必须同步,您将失去速度和敏捷性。

也许,它符合您的要求,或者您可以在数据库(其他模式)内复制数据。如你所愿。

【讨论】:

  • Guillaume,我有一个在 App Engine 标准环境上运行的 Django 应用程序,它与 Cloud SQL DB 相关联。这个应用程序是一个从数据库中查询数据并以 JSON 格式返回的 API。我想在一个单独的域上部署一个单独的 Django 应用程序,该应用程序不断地从网络上抓取数据并将其输入到同一个 Cloud SQL 实例中。这可能吗?
  • 当然有可能。我刚刚警告过你未来更新的困难!
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2021-10-13
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
相关资源
最近更新 更多