本页面介绍了从 App Engine 标准环境中运行的服务连接到 Cloud SQL 实例的相关信息和示例。
Cloud SQL 是一项全代管式数据库服务,可帮助您在云端设置、维护、管理和控制关系型数据库。
App Engine 是全代管式无服务器平台,可用于大规模开发和托管 Web 应用。您可以选择多种主流的语言、库和框架来开发应用,然后让 App Engine 为您预配服务器并根据需求扩缩应用实例数量。
设置 Cloud SQL 实例
- 在您要从中进行连接的 Google Cloud 项目中启用 Cloud SQL Admin API(如果您尚未执行此操作):
- 创建 Cloud SQL for PostgreSQL 实例。我们建议您在 Cloud Run 服务所在的区域中选择 Cloud SQL 实例位置,以缩短延迟时间,从而避免一些网络费用并降低跨区域故障风险。
默认情况下,Cloud SQL 会为新实例分配公共 IP 地址。 您还可以选择分配专用 IP 地址。如需详细了解这两种地址的连接方案,请参阅连接概览页面。
配置 App Engine 标准环境
App Engine 标准环境的配置步骤取决于您分配给 Cloud SQL 实例的 IP 地址类型。公共 IP(默认)
如需配置 App Engine 标准环境以允许连接到使用公共 IP 地址的 Cloud SQL 实例,请执行以下操作:
- 确保上面创建的实例具有公共 IP 地址。您可以在 Google Cloud 控制台中的实例概览页面上验证这一点。如果您需要添加一个公共 IP 地址,请参阅配置公共 IP 地址页面来查看相关说明。
- 获取实例的 INSTANCE_CONNECTION_NAME。您可以在 Google Cloud 控制台中的实例概览页面上或者通过运行以下命令找到它:
gcloud sql instances describe [INSTANCE_NAME]
。 - 确保您的应用用于对 Cloud SQL 调用进行身份验证的服务账号具有适当的 Cloud SQL 角色和权限。
- 您的服务的服务账号需要以下某个 IAM 角色:
Cloud SQL Client
(首选)Cloud SQL Editor
Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
默认情况下,应用将使用 App Engine 服务账号向连接授权。服务账号身份的格式为
PROJECT_ID@appspot.gserviceaccount.com
。如果授权服务账号与 Cloud SQL 实例分处不同的项目,则需要为这两个项目添加 Cloud SQL Admin API 和 IAM 权限。
- 您的服务的服务账号需要以下某个 IAM 角色:
专用 IP
如果授权服务账号所属的项目与包含 Cloud SQL 实例的项目不同,请执行以下操作:
- 在这两个项目中启用 Cloud SQL Admin API。
- 对于包含 Cloud SQL 实例的项目中的服务账号,添加 IAM 权限。
- 确保前面创建的 Cloud SQL 实例具有专用 IP 地址。如果您需要添加专用 IP 地址,请参阅配置专用 IP 来查看相关说明。
- 在 Cloud SQL 实例所在的同一 VPC 网络中创建无服务器 VPC 访问通道连接器。请注意以下条件:
- 除非您使用共享 VPC,否则连接器必须与使用它的资源位于同一项目和区域中,但该连接器可向其他区域中的资源发送流量。
- 无服务器 VPC 访问通道支持与使用 Cloud VPN 和 VPC 网络对等互连连接的 VPC 网络进行通信。
- 无服务器 VPC 访问通道不支持旧版网络。
- 将 App Engine 标准环境配置为使用该连接器。
- 使用实例的专用 IP 地址和端口
5432
进行连接。
连接到 Cloud SQL
配置 App Engine 标准环境后,您可以连接到 Cloud SQL 实例。
公共 IP(默认)
对于公共 IP 路径,App Engine 标准环境提供了加密功能,并通过两种方式使用 Cloud SQL Auth 代理进行连接:
- 通过 Unix 套接字
- 使用 Cloud SQL 连接器
专用 IP
对于专用 IP 路径,您的应用会通过 VPC 网络直接连接到您的实例。此方法使用 TCP 直接连接到 Cloud SQL 实例,无需使用 Cloud SQL Auth 代理。
使用 TCP 连接
使用作为主机的 Cloud SQL 实例的专用 IP 地址和端口 5432
进行连接。
Python
如需了解 Web 应用环境下的此代码段,请查看 GitHub 上的 README。
Java
如需了解 Web 应用环境下的此代码段,请查看 GitHub 上的 README。
注意:
- CLOUD_SQL_CONNECTION_NAME 应表示为 <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>
- 使用参数 ipTypes=PRIVATE 将强制 SocketFactory 与实例的关联专用 IP 连接
- 如需查看 pom.xml 文件的 JDBC 套接字工厂版本的要求,请点击此处。
Node.js
如需了解 Web 应用环境下的此代码段,请查看 GitHub 上的 README。
Go
如需了解 Web 应用环境下的此代码段,请查看 GitHub 上的 README。
C#
如需了解 Web 应用环境下的此代码段,请查看 GitHub 上的 README。
Ruby
如需了解 Web 应用环境下的此代码段,请查看 GitHub 上的 README。
PHP
如需了解 Web 应用环境下的此代码段,请查看 GitHub 上的 README。
最佳做法和其他信息
在本地测试应用时,您可以使用 Cloud SQL Auth 代理。如需了解详细说明,请参阅快速入门:使用 Cloud SQL Auth 代理。
连接池
与底层数据库的连接可能会被数据库服务器本身或底层基础架构断开。为了缓解此问题,我们建议您使用支持连接池和自动重新连接的客户端库。
连接限制
每个在标准环境中运行的 App Engine 实例与其他实例的并发连接数不能超过 100 个。对于 PHP 5.5 应用,并发连接数上限为 60 个。此限制适用于单个应用实例。这意味着 App Engine 应用的每个实例都可以与数据库建立这么多连接,并且在扩容时,每个部署的连接总数可以随之增加。如需了解详情,请参阅扩缩元素。
您可以使用连接池来限制每个实例使用的最大连接数。如需查看有关如何限制连接数的详细示例,请参阅管理数据库连接页面。
App Engine 应用受请求时间限制的约束,具体取决于使用情况和环境。如需了解详情,请参阅实例在 App Engine 标准环境标准和柔性环境中的管理方式。
API 配额限制
App Engine 提供了一种使用 Cloud SQL Auth 代理进行连接的机制,该代理使用 Cloud SQL Admin API。API 配额限制适用于 Cloud SQL Auth 代理。Cloud SQL Admin API 启动时,使用的配额为 2,之后平均每小时为 2。默认配额为每位用户每分钟 180。App Engine 应用还受 App Engine 配额页面上所述的其他配额和限制的约束。