本页介绍了如何将私有 Cloud Data Fusion 实例连接到托管 MySQL 数据库的私有 Cloud SQL 实例。类似的设置适用于 Postgres 和 SQL Server 实例。可以建立公开关联。
推荐:出于安全考虑,请使用 Cloud SQL 和 Cloud Data Fusion 的私有实例。
在 Cloud Data Fusion 和 Cloud SQL 中创建私有实例
如需从私有 Cloud Data Fusion 实例连接到私有 Cloud SQL 实例,您可以使用代理 Compute Engine 虚拟机。由于 Cloud SQL 网络未与 Cloud Data Fusion 网络直接对等互连,并且传递性对等网节无法相互通信,因此需要使用代理(请参阅 VPC 网络对等互连概览)。
如需创建私有实例,请按以下步骤操作:
如果您还没有私有 Cloud Data Fusion 实例,请创建一个。其中包括:
- 设置 VPC 网络
- 分配 IP 范围
在与 Cloud Data Fusion 实例相同的 VPC 网络中创建一个私有 Cloud SQL 实例。
实例创建完毕后,前往 Cloud SQL 实例页面,然后展开实例详情。在连接到此实例部分,复制 IP 地址和连接名称。
创建一个私有 Compute Engine 虚拟机
如需创建虚拟机,您可以在 Cloud Shell 或安装了 Google Cloud SDK 的其他环境中输入以下命令。
这些命令会创建一个同时具有内部 IP 地址和公共 IP 地址的虚拟机(--no-address
未在虚拟机创建示例命令中指定),以便虚拟机可以访问 Container Registry 以获取代理映像。您可以使用内部 IP,但还必须为虚拟机所在的子网启用专用 Google 访问通道。
导出以下环境变量:
export PROJECT=CUSTOMER_PROJECT export REGION=VM_REGION export ZONE=`gcloud compute zones list --filter="name=${REGION}" --limit 1 --uri --project=${PROJECT}| sed 's/.*\///'` export NETWORK=CUSTOMER_VPC_NETWORK_NAME export SUBNET=CUSTOMER_VPC_SUBNET_NAME export INSTANCE_NAME=COMPUTE_ENGINE_VM_NAME export SQL_CONN=SQL_INSTANCE_CONNECTION_NAME export CDF_IP_RANGE=CLOUD_DATA_FUSION_IP_RANGE export VM_IMAGE=$(gcloud compute images list --project=$PROJECT --filter=family:cos-stable --format='value(selfLink.scope())' --limit=1) export SQL_PORT=DB_PORT # MySQL 3306 # PostgreSQL 5432 # SQLServer 1433
替换以下内容:
CUSTOMER_PROJECT
:您的项目名称VM_REGION
:Compute Engine 虚拟机所在的区域CUSTOMER_VPC_NETWORK_NAME
:您的影音平台的名称CUSTOMER_VPC_SUBNET_NAME
:子网的名称COMPUTE_ENGINE_VM_NAME
:Compute Engine 虚拟机的名称SQL_INSTANCE_CONNECTION_NAME
:上一步中的连接名称CLOUD_DATA_FUSION_IP_RANGE
:IP 地址范围DB_PORT
:Cloud SQL 数据库的端口号
使用以下 gcloud CLI 命令创建防火墙规则,以允许 Cloud Data Fusion 入站流量:
gcloud compute firewall-rules create allow-private-cdf \ --allow=tcp:22,tcp:${SQL_PORT} \ --source-ranges=$CDF_IP_RANGE --network=$NETWORK --project=$PROJECT
使用以下 gcloud CLI 命令创建虚拟机:
gcloud compute --project=${PROJECT} instances create ${INSTANCE_NAME} \ --zone=${ZONE} \ --machine-type=g1-small \ --subnet=${SUBNET} \ --metadata=startup-script="docker run -d -p 0.0.0.0:${SQL_PORT}:${SQL_PORT} gcr.io/cloudsql-docker/gce-proxy:latest /cloud_sql_proxy -instances=${SQL_CONN}=tcp:0.0.0.0:${SQL_PORT}" \ --maintenance-policy=MIGRATE \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image=${VM_IMAGE} \ --image-project=cos-cloud
使用以下 gcloud CLI 命令获取虚拟机的内部 IP:
export IP=`gcloud compute \ --project=${PROJECT} instances describe ${INSTANCE_NAME} \ --zone ${ZONE} | grep "networkIP" | awk '{print $2}'`
使用以下 gcloud CLI 命令将虚拟机内部 IP 地址升级为静态 IP 地址:
gcloud compute --project=${PROJECT} addresses create mysql-proxy \ --addresses ${IP} --region ${REGION} --subnet ${SUBNET}
在设置连接时,获取要用于 Cloud Data Fusion MySQL JDBC 连接字符串的 IP:
echo ${IP}
使用静态 IP 创建虚拟机后,将该 IP 用作主机或将其输入 JDBC 连接字符串,以便从 Cloud Data Fusion 访问 MySQL 数据库。
从 Cloud Data Fusion 中访问 MySQL
您必须先从 Cloud Data Fusion Hub 安装 MySQL JDBC 驱动程序(或直接从 MySQL 社区下载),然后才能从 Cloud Data Fusion 实例连接到 MySQL 实例。
在 Cloud Data Fusion 中输入 MySQL 数据库的连接详细信息。您可以在 Wrangler 页面上输入详细信息并测试连接。
可选:连接到 MySQL 的其他方式
您可以在 Cloud Data Fusion 中通过以下方式访问 MySQL:
- 在 Studio 页面上,点击 MySQL 来源插件,然后输入连接详细信息。
在 Studio 页面上,请改用数据库源插件,该插件具有类似的属性(连接字符串、用户名、密码和连接参数)。
其他连接
虽然我们建议连接专用实例,但您也可以进行以下连接:
- 从一个公共 Cloud Data Fusion 实例到一个公共 Cloud SQL 实例(通过使用公共 Cloud SQL 代理或在已获授权的网络中将
0.0.0.0/0
范围列入许可名单)。请参阅 Cloud SQL 的公共 IP 连接选项。 - 私有 Cloud Data Fusion 实例和公共 Cloud SQL 实例(通过在已获授权的网络中使用公共 Cloud SQL 代理)。
一个公共 Cloud Data Fusion 实例和一个私有 Cloud SQL 实例。