我试图从我的本地机器(本地)使用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资源。
提前感谢!
2条答案
按热度按时间ulmd4ohb1#
您可以使用SSH反向隧道从Google Cloud外部连接到配置了私有IP地址的Cloud SQL。这需要Compute Engine示例提供SSH隧道。
9cbw7uwe2#
如果您需要在没有VPN或Bastion主机的情况下从本地计算机连接,您可以将Cloud SQL示例配置为具有公共IP地址。但是,出于安全原因,这对于生产数据库来说不是一个好主意。
https://cloud.google.com/sql/docs/postgres/configure-ssl-instance