En esta página se explica cómo organizar archivos en máquinas virtuales de trabajo de Dataflow para usar certificados SSL con las plantillas de Java Database Connectivity (JDBC) proporcionadas por Google. También puedes seguir los pasos que se indican en esta página para organizar los archivos de forma dinámica en la VM de trabajador antes de que empiece el procesamiento.
Fase de archivos en máquinas virtuales de trabajador
En algunas plantillas, puedes almacenar archivos en máquinas virtuales de trabajador de Dataflow mediante el parámetro de plantilla extraFilesToStage
. Usa este parámetro para organizar los archivos de forma dinámica en la VM de trabajador antes de que empiece el procesamiento de datos.
Puede usar este parámetro en los siguientes casos:
- Almacena los archivos de certificado y clave en cada trabajador para las conexiones SSL.
- Como Dataflow no incluye compatibilidad integrada con Secret Manager, usa este parámetro para configurar plantillas que almacenen secretos de Secret Manager y accedan a ellos.
Este parámetro está disponible en algunas plantillas, pero no en todas. Para ver si el parámetro está disponible en la plantilla que estás usando, consulta la tabla de parámetros de la plantilla en Plantillas de streaming de Dataflow proporcionadas por Google o Plantillas de procesamiento por lotes de Dataflow proporcionadas por Google.
Cuando usas este parámetro, se transfieren al trabajador rutas de Cloud Storage o secretos de Secret Manager separados por comas, que se guardan en el directorio /extra_files
de cada trabajador.
Cuando los archivos se guardan en el directorio /extra_files
, otros parámetros pueden hacer referencia a ellos. Para hacer referencia a los archivos, en las propiedades de configuración, especifica las rutas de los archivos relativas al directorio /extra_files
.
Todos los archivos de Cloud Storage que se transfieran mediante este parámetro se almacenarán en el directorio /extra_files
con el mismo nombre de archivo.
Los secretos de Secret Manager se almacenan en el directorio /extra_files
con el nombre del secreto como nombre de archivo.
Por ejemplo, si asignas extraFilesToStage
a la siguiente ruta, los archivos se almacenarán en el directorio /extra_files
de cada trabajador con los nombres de archivo file.txt
y SECRET_ID.
gs://BUCKET_NAME/file.txt,projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID
Configurar certificados SSL
En las plantillas que usan JDBC para leer o escribir, puedes usar el parámetro de plantilla extraFilesToStage
para almacenar certificados como archivos locales en VMs de trabajador y, a continuación, hacer referencia al nombre de archivo local en la URL de conexión JDBC o en las propiedades de conexión.
Las conexiones SSL de JDBC varían en función de la base de datos. En esta sección se proporcionan ejemplos para bases de datos PostgreSQL y MySQL.
Si necesitas definir propiedades del sistema Java, usa JvmInitializer
.
Puedes usar JvmInitializer
para realizar una inicialización única en todos los trabajadores de Java de Dataflow.
PostgreSQL
En las conexiones SSL de bases de datos PostgreSQL, están disponibles los siguientes parámetros: ssl
, sslmode
, sslcert
, sslkey
y sslrootcert
.
- Para especificar que la conexión debe usar SSL y qué modo se debe usar, utiliza los parámetros
ssl
ysslmode
. - Para la validación del cliente, usa los parámetros
sslcert
ysslkey
. - Para la validación del servidor, usa el parámetro
sslrootcert
.
Cuando te conectes a PostgreSQL, define los siguientes parámetros:
extraFilesToStage=gs://BUCKET_NAME/root_cert.crt,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/key.key
connectionUrl=jdbc:postgresql://HOST/DATABASE?ssl=true&sslrootcert=/extra_files/root_cert.crt&sslcert=/extra_files/cert.crt&sslkey=/extra_files/key.key&OTHER_PARAMETERS...
Para ver más parámetros de configuración de JDBC de PostgreSQL y obtener más información sobre ellos, consulta Parámetros de conexión en la documentación de JDBC de PostgreSQL.
MySQL
En las conexiones SSL de bases de datos MySQL, están disponibles los siguientes parámetros: sslmode
, trustCertificateKeyStoreUrl
y clientCertificateKeyStoreUrl
.
- Para especificar que la conexión debe usar SSL y qué modo se debe usar, utiliza el parámetro
sslmode
. - Para la validación del cliente, usa el parámetro
clientCertificateKeyStoreUrl
. - Para la validación del servidor, usa el parámetro
trustCertificateKeyStoreUrl
.
Cuando te conectes a MySQL, define los siguientes parámetros:
extraFilesToStage=gs://BUCKET_NAME/truststore.jks,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/keystore.jks
connectionUrl=jdbc:mysql://HOST/DATABASE?sslmode=REQUIRED&trustCertificateKeyStoreUrl=file:/extra_files/truststore.jks&sslcert=file:/extra_files/keystore.jks&OTHER_PARAMETERS...
Para obtener más información sobre los parámetros de configuración de JDBC de MySQL y sobre los parámetros, consulta la página conectores de seguridad de la documentación de MySQL.
Ejemplo de conexión SSL
En el siguiente ejemplo se muestra cómo ejecutar la plantilla Pub/Sub a JDBC con conexiones SSL en una base de datos MySQL.
#!/bin/bash
gcloud config set project PROJECT_ID
echo "Running template ..."
gcloud dataflow flex-template run my-job \
--template-file-gcs-location="gs://dataflow-templates-REGION_NAME/latest/flex/Pubsub_to_Jdbc" \
--region="REGION" \
--parameters= \
driverClassName="com.mysql.jdbc.Driver",\
connectionUrl="jdbc:mysql://HOST/DATABASE?sslmode=REQUIRED&trustCertificateKeyStoreUrl=file:/extra_files/truststore.jks&sslcert=file:/extra_files/keystore.jks",\
driverJars="gs://BUCKET_NAME/mysql.jar",\
statement="INSERT INTO tableName (column1, column2) VALUES (?,?)",\
inputSubscription="projects/PROJECT_ID/subscriptions/subscription",\
outputDeadletterTopic="projects/PROJECT_ID/topics/topic",\
extraFilesToStage="gs://BUCKET_NAME/truststore.jks,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/keystore.jks"