原文标题 :How to Connect to GCP Cloud SQL Instances in Cloud Run Servies
如何在 Cloud Run Servies 中连接到 GCP Cloud SQL 实例
在几分钟内连接到具有私有 IP 的 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 地址。
创建 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 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 服务
最后,让我们创建一个 Cloud Run 服务并使用刚刚创建的 VPC 连接器将其连接到我们的 Cloud SQL 实例。尝试在GCP平台找到“Cloud Run”,点击“CREATE SERVICE”新建一个:
重要的是,选择与您的 Cloud SQL 实例和 VPC 连接器相同的区域。有关如何自动部署 Cloud Run 服务的更详细介绍,这篇文章可能会有所帮助。[0]
出于演示目的,我们通常会选择“允许所有流量”和“允许未经身份验证的调用”。如果需要,您可以使用 IAM 添加更细粒度的身份验证。
现在展开“容器、变量和秘密、连接、安全”部分并指定连接和环境变量。让我们先设置连接。单击“连接”选项卡,然后单击“添加连接”以添加新连接。选择要连接的 Cloud SQL 实例。然后选择上一步中创建的“VPC 连接器”。请注意,如果连接器的区域与正在创建的 Cloud Run 服务的区域不同,则不会显示 VPC 连接器。
然后我们需要为我们的数据库连接创建一些环境变量,这些环境变量将在我们的 Cloud Run 服务中使用:
非常重要!我们需要将我们的 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 进行连接。
文章出处登录后可见!