如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

在几分钟内连接到具有私有 IP 的 Cloud SQL 实例 – 如果您使用 Google Cloud Platform (GCP),通常在您的 Cloud Run 服务中访问 Cloud SQL。这应该是一件容易的事,因为 Cloud SQL 和 Cloud Run 都在同一个网络中。然而,当你自己做的时候,你可能无法……

原文标题How to Connect to GCP Cloud SQL Instances in Cloud Run Servies

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

在几分钟内连接到具有私有 IP 的 Cloud SQL 实例

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

如果您使用 Google Cloud Platform (GCP),通常会在您的 Cloud Run 服务中访问 Cloud SQL。这应该是一件容易的事,因为 Cloud SQL 和 Cloud Run 都在同一个网络中。但是,当你自己做时,你可能无法在短时间内成功,因为网上的许多文档要么过时,要么过于复杂。经过几个小时的反复试验,我终于让它工作了。我认为写下我的解决方案是值得的,这样也可以为其他人节省一些时间。如果你做对了,其实很简单。

设置 Cloud SQL

由于 Cloud SQL 和 Cloud Run 都在 Google Cloud Platform 上,因此最好通过私有 IP 进行连接,以最大限度地减少网络延迟。如果尚未启用,请启用“私有 IP”选项。记下稍后将使用的网络和私有 IP 地址。

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

创建 VPC 连接器

虚拟私有云 (VPC) 是物理网络的虚拟版本,在 Google 的生产网络内部实现,可用于连接平台上创建的所有类型的资源。这实际上是一个非常复杂和抽象的概念。目前,您只需了解无服务器 VPC 访问允许 Cloud Functions、Cloud Run 服务和 App Engine 应用程序使用其私有 IP 访问 VPC 网络中的资源。让我们创建一个 VPC 连接器,我们的 Cloud Run 服务可以使用它来连接到我们的 Cloud SQL 实例。[0]

在顶部搜索框中搜索“Serverless VPC 访问”,然后选择“Serverless VPC 访问(VPC 网络)”。然后点击“CREATE CONNECTOR”创建一个新的VPC连接器:

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

填写表格如下:

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例
  • 给它一个唯一的名字。
  • 选择与您的 Cloud SQL 实例和 Cloud Run 服务相同的区域。这非常重要,否则您无法使用此连接器连接到 Cloud SQL 实例。
  • 选择与您的 Cloud SQL 实例相同的网络。如果您有多个网络,这也很重要。
  • 为“子网”选择“自定义 IP 范围”。
  • 指定 IP 范围以覆盖 Cloud SQL 实例的私有 IP 地址。对于此示例,它设置为“10.104.0.0”。 IP 范围不能与现有范围冲突。

现在您可以单击“创建”来创建 VPC 连接器。需要注意的是,VPC 连接器不是免费的。它们实际上使用起来非常昂贵。因此,请记住在不再需要它们时将其删除。

配置 Cloud Run 服务帐号

Cloud Run 服务帐号(默认为 Compute Engine 默认服务帐号)应具有 Cloud SQL 客户端角色,并有权连接到 Cloud SQL。

在 IAM 页面上,搜索“Compute Engine 默认服务帐户”,然后单击铅笔按钮为其添加 Cloud SQL 客户端角色:

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

创建 Cloud Run 服务

最后,让我们创建一个 Cloud Run 服务并使用刚刚创建的 VPC 连接器将其连接到我们的 Cloud SQL 实例。尝试在GCP平台找到“Cloud Run”,点击“CREATE SERVICE”新建一个:

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

重要的是,选择与您的 Cloud SQL 实例和 VPC 连接器相同的区域。有关如何自动部署 Cloud Run 服务的更详细介绍,这篇文章可能会有所帮助。[0]

出于演示目的,我们通常会选择“允许所有流量”和“允许未经身份验证的调用”。如果需要,您可以使用 IAM 添加更细粒度的身份验证。

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

现在展开“容器、变量和秘密、连接、安全”部分并指定连接和环境变量。让我们先设置连接。单击“连接”选项卡,然后单击“添加连接”以添加新连接。选择要连接的 Cloud SQL 实例。然后选择上一步中创建的“VPC 连接器”。请注意,如果连接器的区域与正在创建的 Cloud Run 服务的区域不同,则不会显示 VPC 连接器。

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

然后我们需要为我们的数据库连接创建一些环境变量,这些环境变量将在我们的 Cloud Run 服务中使用:

如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例

非常重要!我们需要将我们的 Cloud SQL 实例的私有 IP 地址指定为 DB 主机,而不是像某些教程中显示的“127.0.0.1”或“localhost”,否则它将不起作用。

环境变量将在您的 Cloud Run 服务的代码中用于连接到 Cloud SQL 实例。如果您使用 SQLAlchemy 连接到 MySQL 数据库,代码将如下所示:

如果需要,您可以查看相应的文章,了解如何使用 SQLAlchemy 执行普通 SQL 查询和创建 ORM 模型。[0][1]

现在您应该可以从 Cloud Run 服务连接到您的 Cloud SQL 实例了。试试!

Conclusion

如果我们在 Cloud Run 上托管我们的后端代码,我们需要连接到 Cloud SQL 是很常见的。然而,尽管看起来微不足道,但有很多陷阱会导致连接失败。在本文中,我们介绍了一般设置过程,并强调了可能导致数小时挣扎时间的陷阱。这篇文章的主要内容如下:

  • SQL 实例的网络和 VPC 连接器的网络应该相同。
  • SQL 实例、VPC 连接器和 Cloud Run 服务的区域应相同。
  • Cloud Run 服务中应使用 SQL 实例的私有 IP 进行连接。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年6月14日 下午3:24
下一篇 2022年6月14日 下午3:36