postgresql 我可以使用Python从我的计算机(本地)使用私有IP连接到云SQL postgres吗?

omjgkv6w  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(131)

我试图从我的本地机器(本地)使用Python代码连接到云SQL PostgreSQL示例,并使用我的云SQL示例的私有IP。

from google.cloud.sql.connector import Connector, IPTypes
import pg8000

import sqlalchemy
from sqlalchemy import text

def connect_with_connector_auto_iam_authn():

instance_connection_name = "connection name"
db_user = "SA name" # e.g. 'my-db-user'
db_name = "postgres"  # e.g. 'my-database'

ip_type = IPTypes.PRIVATE

# initialize Cloud SQL Python Connector object
connector = Connector()

def getconn() -> pg8000.dbapi.Connection:
    conn: pg8000.dbapi.Connection = connector.connect(
        instance_connection_name,
        "pg8000",
        user=db_user,
        password="",
        db=db_name,
        enable_iam_auth=True,
        ip_type=ip_type
    )
    return conn
# The Cloud SQL Python Connector can be used with SQLAlchemy
# using the 'creator' argument to 'create_engine'
pool = sqlalchemy.create_engine(
    "postgresql+pg8000://",
    creator=getconn, pool_pre_ping=True
)

with pool.connect() as conn:
    results = conn.execute(text("SELECT current_user, current_database();"))
    for row in results:
        print(row)
print("connected")

return "connected"

connect_with_connector_auto_iam_authn()

字符串
我收到以下错误消息:

  • 超时错误:[WinError 10060]连接尝试失败,因为连接的一方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应上述异常是以下异常的直接原因:*
  • sqlalchemy.exc.InterfaceError:(pg8000.exceptions.InterfaceError)无法创建到主机10.82.1.2和端口3307的连接(超时为None,source_address为None)。*

我在想,也许我不能从我的机器上使用私有IP,使用私有IP的唯一方法是在同一个VPC内,这意味着使用另一个GCP资源。
提前感谢!

ulmd4ohb

ulmd4ohb1#

您可以使用SSH反向隧道从Google Cloud外部连接到配置了私有IP地址的Cloud SQL。这需要Compute Engine示例提供SSH隧道。

9cbw7uwe

9cbw7uwe2#

如果您需要在没有VPN或Bastion主机的情况下从本地计算机连接,您可以将Cloud SQL示例配置为具有公共IP地址。但是,出于安全原因,这对于生产数据库来说不是一个好主意。
https://cloud.google.com/sql/docs/postgres/configure-ssl-instance

相关问题