本页面介绍如何将私有 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 地址的虚拟机(未在示例虚拟机创建命令中指定 --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 社区下载内容)安装 MySQL JDBC 驱动程序,然后才能从 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 实例。