このページでは、プライベート 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 VM を使用します。Cloud SQL ネットワークが Cloud Data Fusion ネットワークと直接ピアリングされておらず、推移的ピアが相互に通信できないため、プロキシが必要です(VPC ネットワーク ピアリングの概要をご覧ください)。
プライベート インスタンスを作成する手順は次のとおりです。
まだ作成していない場合は、プライベート Cloud Data Fusion インスタンスを作成します。これには以下の内容が含まれます。
- VPC ネットワークの設定
- IP 範囲の割り当て
Cloud Data Fusion インスタンスと同じ VPC ネットワークにプライベート Cloud SQL インスタンスを作成します。
インスタンスが作成されたら、Cloud SQL の [インスタンス] ページに移動し、[インスタンスの詳細] を開きます。[このインスタンスに接続] セクションで、IP と接続名をコピーします。
プライベート Compute Engine VM を作成する
VM を作成するには、Cloud Shell または Google Cloud SDK がインストールされている別の環境で次のコマンドを入力します。
このコマンドは、内部 IP アドレスとパブリック IP アドレスの両方を持つ VM を作成します(--no-address
は VM 作成サンプル コマンドで指定されていません)。これにより、VM は Container Registry にアクセスしてプロキシ イメージを取得できます。内部 IP を使用できますが、VM が配置されているサブネットの限定公開の 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 VM が配置されているリージョンCUSTOMER_VPC_NETWORK_NAME
: ネットワークの名前CUSTOMER_VPC_SUBNET_NAME
: サブネットワークの名前COMPUTE_ENGINE_VM_NAME
: Compute Engine VM の名前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 コマンドを使用して VM を作成します。
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 コマンドを使用して、VM の内部 IP を取得します。
export IP=`gcloud compute \ --project=${PROJECT} instances describe ${INSTANCE_NAME} \ --zone ${ZONE} | grep "networkIP" | awk '{print $2}'`
次の gcloud CLI コマンドを使用して、VM の内部 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を持つ VM が作成されたら、その IP をホストとして使用するか、JDBC 接続文字列に入力して Cloud Data Fusion から MySQL データベースにアクセスします。
Cloud Data Fusion 内から MySQL にアクセスする
Cloud Data Fusion インスタンスから MySQL インスタンスに接続するには、Cloud Data Fusion Hub から(または MySQL コミュニティのダウンロードから直接)MySQL JDBC ドライバをインストールします。
Cloud Data Fusion に MySQL データベースの接続の詳細情報を入力します。詳細情報を入力して接続をテストするには、[Wrangler] ページを使用します。
省略可: MySQL に接続するその他の方法
Cloud Data Fusion では、次の方法で MySQL にアクセスできます。
- [スタジオ] ページで、MySQL ソース プラグインをクリックして、接続の詳細情報を入力します。
スタジオページで、代わりに、同様のプロパティ(接続文字列、ユーザー名、パスワード、接続引数)を持つデータベース ソース プラグインを使用します。
他のコネクション
プライベート インスタンスの接続をおすすめしますが、次の接続も可能です。
- パブリック 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 インスタンス。