Conectarse a una fuente de Cloud SQL MySQL

En esta página se describe cómo conectar una instancia privada de Cloud Data Fusion a una instancia privada de Cloud SQL que aloja una base de datos MySQL. Una configuración similar funciona para las instancias de PostgreSQL y SQL Server. Se pueden establecer conexiones públicas.

Recomendación: Por motivos de seguridad, usa instancias privadas de Cloud SQL y Cloud Data Fusion.

Crear instancias privadas en Cloud Data Fusion y Cloud SQL

Para conectarte a una instancia privada de Cloud SQL desde una instancia privada de Cloud Data Fusion, usa una VM de Compute Engine proxy. Se necesita un proxy porque la red de Cloud SQL no está emparejada directamente con la red de Cloud Data Fusion y los peers transitivos no pueden comunicarse entre sí (consulta la descripción general del emparejamiento entre redes de VPC).

Para crear las instancias privadas, sigue estos pasos:

  1. Si aún no tienes una, crea una instancia privada de Cloud Data Fusion. Entre los datos que recoge se incluyen los siguientes:

    1. Configurar una red VPC
    2. Asignar un intervalo de IPs
  2. Crea una instancia privada de Cloud SQL en la misma red de VPC que tu instancia de Cloud Data Fusion.

  3. Una vez creada la instancia, ve a la página Instancias de Cloud SQL y despliega Detalles de la instancia. En la sección Conectar a esta instancia, copia la IP y el nombre de la conexión.

    Ve a Instancias de Cloud SQL.

Crear una VM de Compute Engine privada

Para crear la VM, puedes introducir los siguientes comandos en Cloud Shell u otro entorno en el que esté instalado el SDK de Google Cloud.

Los comandos crean una VM con direcciones IP internas y públicas (--no-address no se especifica en el comando de creación de VM de ejemplo) para que la VM pueda acceder a Container Registry y obtener la imagen del proxy. Puedes usar IPs internas, pero también debes habilitar Acceso privado de Google en la subred en la que se encuentra la máquina virtual.

  1. Exporta las siguientes variables de entorno:

    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
    

    Haz los cambios siguientes:

    • CUSTOMER_PROJECT: el nombre de tu proyecto
    • VM_REGION: la región en la que se encuentra la VM de Compute Engine
    • CUSTOMER_VPC_NETWORK_NAME: el nombre de tu red
    • CUSTOMER_VPC_SUBNET_NAME: nombre de la subred
    • COMPUTE_ENGINE_VM_NAME: nombre de la VM de Compute Engine
    • SQL_INSTANCE_CONNECTION_NAME: el nombre de la conexión del paso anterior
    • CLOUD_DATA_FUSION_IP_RANGE: el intervalo de direcciones IP
    • DB_PORT: el número de puerto de la base de datos de Cloud SQL.
  2. Crea una regla de cortafuegos para permitir el tráfico de entrada de Cloud Data Fusion con el siguiente comando de gcloud CLI:

    gcloud compute firewall-rules create allow-private-cdf \
    --allow=tcp:22,tcp:${SQL_PORT} \
    --source-ranges=$CDF_IP_RANGE --network=$NETWORK --project=$PROJECT
    
  3. Crea la VM con el siguiente comando de la CLI de gcloud:

    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
    
  4. Obtén la IP interna de la VM con el siguiente comando de la CLI de gcloud:

    export IP=`gcloud compute \
    --project=${PROJECT} instances describe ${INSTANCE_NAME} \
    --zone ${ZONE} | grep "networkIP" | awk '{print $2}'`
    
  5. Promueve la IP interna de la VM a una IP estática con el siguiente comando de gcloud CLI:

    gcloud compute --project=${PROJECT} addresses create mysql-proxy \
    --addresses ${IP} --region ${REGION} --subnet ${SUBNET}
    
  6. Obtén la IP que se va a usar en la cadena de conexión JDBC de MySQL de Cloud Data Fusion al configurar la conexión:

    echo ${IP}
    

Una vez que se haya creado la VM con una IP estática, utiliza la IP como host o introdúcela en la cadena de conexión JDBC para acceder a la base de datos MySQL desde Cloud Data Fusion.

Acceder a MySQL desde Cloud Data Fusion

Antes de poder conectarse a la instancia de MySQL desde la instancia de Cloud Data Fusion, instale el controlador JDBC de MySQL desde el centro de Cloud Data Fusion (o directamente desde las descargas de la comunidad de MySQL).

Introduce los detalles de conexión de tu base de datos MySQL en Cloud Data Fusion. Puedes introducir los detalles y probar la conexión en la página Wrangler.

Opcional: Otras formas de conectarse a MySQL

Puedes acceder a MySQL de las siguientes formas en Cloud Data Fusion:

  • En la página Studio, haga clic en el complemento de fuente MySQL e introduzca los detalles de la conexión.
  • En la página Studio, usa el complemento de fuente de datos de base de datos, que tiene propiedades similares (Cadena de conexión, Nombre de usuario, Contraseña y Argumentos de conexión).

Otras conexiones

Aunque se recomienda conectar instancias privadas, se pueden establecer las siguientes conexiones:

  • Una instancia pública de Cloud Data Fusion a una instancia pública de Cloud SQL (mediante un proxy público de Cloud SQL o añadiendo a la lista de permitidos el intervalo 0.0.0.0/0 en una red autorizada). Consulta la opción de conexión de IP pública de Cloud SQL.
  • Una instancia privada de Cloud Data Fusion y una instancia pública de Cloud SQL (mediante un proxy público de Cloud SQL en una red autorizada).
  • Una instancia pública de Cloud Data Fusion y una instancia privada de Cloud SQL.