我正在使用Cloud SQL中的PostgreSQL以及psycopg2
库从我的python代码连接到数据库。我当前拥有的与 VPC 网络相关联,我的谷歌计算引擎也在该 VPC 中。因此,在这种情况下,我连接到此云 sql 实例的配置可以使用私有 IP,我的配置如下所示:
config['db-cloudsql'] = {
"host" : "10.x.x.x" # cloud sql private ip address
"user" : "postgres"
"password" :"xxxxx"
"database" : "postgres"
}
但是现在我有另一个来自另一个 VPC 网络的虚拟机实例需要访问这个云 sql 实例。我知道我可以使用公共 IP 访问云 sql 实例。(通过将我的虚拟机添加到授权网络(但此 VM 需要经常访问云 SQL 实例。所以我不确定使用公共 ip 访问的成本是否会高于使用私有 ip 访问的成本(找不到任何相关文档(。我尝试对等 2 个 VPC 网络以使用私有 IP 进行访问,但只是发现我无法使用此方法通过本文档中的私有 ip 连接到 sql
我从文档中发现我可以将instance connection name
用作我的配置的主机,因此它应该是这样的:
config['db-cloudsql'] = {
"host" : "project-name:asia-southeast1:mydbname" #instance connection name
"user" : "postgres"
"password" :"xxxxx"
"database" : "postgres"
}
我还没有尝试过这种方法,它可能不起作用,但如果它以某种方式起作用,它在成本方面与使用公共 ip 地址有何不同?
谢谢
您的问题似乎归结为两部分:
是否有公共 IP 或私有 IP 的替代方案?
不。您必须使用其中一个来连接到您的云 SQL 实例。私有 IP 允许从 VPC 访问,公有 IP 几乎在其他任何地方都使用。
公共 IP 与私有 IP 的成本
您可以在此处找到费用明细。简而言之,公共 IP 实际上没有任何额外费用。您必须在实例空闲时每小时支付 .01 USD(以保留公有 IP 地址(,就像私有 IP 一样,您需要承担区域之间的网络出口费用。
我可以使用实例连接名称作为配置的主机
这是不正确的。如果您使用云 SQL 代理进行连接,它可以创建一个可用于连接到实例的 Unix 域套接字(/cloudsql/INSTANCE_CONNECTION_NAME
(。但是,代理仅对您的连接进行身份验证 - 它仍然需要有效的连接路径(公共与专用(。
正如您在此 PostgreSQL 定价文档中所看到的,当您在 Cloud SQL 端使用公共 IP 或连接名称时,定价没有差异。如果要尽可能降低成本,可以尝试将计算引擎实例保留在同一区域,或者至少与云 SQL 实例位于同一大洲。