Estabeleça ligação a uma origem do Cloud SQL-MySQL

Esta página descreve como ligar uma instância privada do Cloud Data Fusion a uma instância privada do Cloud SQL que aloja uma base de dados MySQL. Uma configuração semelhante funciona para instâncias do Postgres e do SQL Server. As ligações públicas são possíveis.

Recomendado: por motivos de segurança, use instâncias privadas do Cloud SQL e do Cloud Data Fusion.

Crie instâncias privadas no Cloud Data Fusion e no Cloud SQL

Para estabelecer ligação a uma instância privada do Cloud SQL a partir de uma instância privada do Cloud Data Fusion, usa uma VM do Compute Engine de proxy. É necessário um proxy porque a rede do Cloud SQL não está diretamente interligada com a rede do Cloud Data Fusion, e os pares transitivos não podem comunicar entre si (consulte a vista geral do intercâmbio das redes da VPC).

Para criar as instâncias privadas, siga estes passos:

  1. Se ainda não tiver uma, crie uma instância privada do Cloud Data Fusion. Isto inclui:

    1. Configurar uma rede de VPC
    2. Atribuir um intervalo de IP
  2. Crie uma instância privada do Cloud SQL na mesma rede de VPC que a instância do Cloud Data Fusion.

  3. Depois de criar a instância, aceda à página Instâncias do Cloud SQL e expanda os Detalhes da instância. Na secção Estabelecer ligação a esta instância, copie o IP e o nome da ligação.

    Aceda a Instâncias do Cloud SQL

Crie uma VM do Compute Engine privada

Para criar a VM, pode introduzir os seguintes comandos no Cloud Shell ou noutro ambiente onde o Google Cloud SDK esteja instalado.

Os comandos criam uma VM com endereços IP internos e públicos (--no-address não é especificado no comando de criação de VM de exemplo) para que a VM possa aceder ao Container Registry para obter a imagem de proxy. Pode usar IPs internos, mas também tem de ativar o acesso privado à Google para a sub-rede onde a VM está localizada.

  1. Exporte as seguintes variáveis de ambiente:

    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
    

    Substitua o seguinte:

    • CUSTOMER_PROJECT: o nome do seu projeto
    • VM_REGION: a região onde se encontra a VM do Compute Engine
    • CUSTOMER_VPC_NETWORK_NAME: o nome da sua rede
    • CUSTOMER_VPC_SUBNET_NAME: o nome da sua sub-rede
    • COMPUTE_ENGINE_VM_NAME: O nome da VM do Compute Engine
    • SQL_INSTANCE_CONNECTION_NAME: o nome da associação do passo anterior
    • CLOUD_DATA_FUSION_IP_RANGE: O intervalo de endereços IP
    • DB_PORT: o número da porta da base de dados do Cloud SQL
  2. Crie uma regra de firewall para permitir o tráfego de entrada do Cloud Data Fusion com o seguinte comando da CLI gcloud:

    gcloud compute firewall-rules create allow-private-cdf \
    --allow=tcp:22,tcp:${SQL_PORT} \
    --source-ranges=$CDF_IP_RANGE --network=$NETWORK --project=$PROJECT
    
  3. Crie a VM com o seguinte comando da CLI 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. Obtenha o IP interno da VM com o seguinte comando da CLI gcloud:

    export IP=`gcloud compute \
    --project=${PROJECT} instances describe ${INSTANCE_NAME} \
    --zone ${ZONE} | grep "networkIP" | awk '{print $2}'`
    
  5. Promova o IP interno da VM para um IP estático com o seguinte comando da CLI gcloud:

    gcloud compute --project=${PROJECT} addresses create mysql-proxy \
    --addresses ${IP} --region ${REGION} --subnet ${SUBNET}
    
  6. Obtenha o IP a usar na string de ligação JDBC do MySQL do Cloud Data Fusion quando configurar a ligação:

    echo ${IP}
    

Depois de criar a VM com um IP estático, use o IP como anfitrião ou introduza-o na string de ligação JDBC para aceder à base de dados MySQL a partir do Cloud Data Fusion.

Aceda ao MySQL a partir do Cloud Data Fusion

Antes de poder estabelecer ligação à instância do MySQL a partir da instância do Cloud Data Fusion, instale o controlador JDBC do MySQL a partir do Cloud Data Fusion Hub (ou diretamente a partir de transferências da comunidade do MySQL).

Introduza os detalhes da ligação da sua base de dados MySQL no Cloud Data Fusion. Pode introduzir os detalhes e testar a associação na página Wrangler.

Opcional: outras formas de estabelecer ligação ao MySQL

Pode aceder ao MySQL das seguintes formas no Cloud Data Fusion:

  • Na página Studio, clique no plug-in de origem do MySQL e introduza os detalhes da ligação.
  • Na página Studio, use o plug-in de origem da base de dados, que tem propriedades semelhantes (cadeia de caracteres de ligação, nome de utilizador, palavra-passe e argumentos de ligação).

Outras associações

Embora seja recomendada a associação de instâncias privadas, são possíveis as seguintes associações:

  • Uma instância pública do Cloud Data Fusion a uma instância pública do Cloud SQL (através de um proxy público do Cloud SQL ou da inclusão na lista de autorizações do intervalo 0.0.0.0/0 numa rede autorizada). Consulte a opção de ligação de IP público para o Cloud SQL.
  • Uma instância privada do Cloud Data Fusion e uma instância pública do Cloud SQL (através de um proxy público do Cloud SQL numa rede autorizada).
  • Uma instância pública do Cloud Data Fusion e uma instância privada do Cloud SQL.