En esta página, se explica cómo almacenar en etapa intermedia los archivos en VM de trabajador de Dataflow para usar certificados SSL con las plantillas de conectividad de base de datos de Java (JDBC) que proporciona Google. También puedes usar los pasos en esta página para almacenar archivos en etapa intermedia en la VM de trabajador antes de que comience el procesamiento.
Almacena archivos en etapa intermedia en las VM de trabajador
Con algunas plantillas, puedes almacenar en etapa intermedia los archivos en las VM de trabajador de Dataflow mediante el parámetro de plantilla extraFilesToStage
. Usa este parámetro para almacenar en etapa intermedia los archivos en la VM de trabajador de forma dinámica antes de que comience el procesamiento de datos.
Puedes usar este parámetro en los siguientes casos:
- Almacena certificados y archivos de claves en cada trabajador para las conexiones SSL.
- Debido a que Dataflow no incluye compatibilidad integrada para Secret Manager, usa este parámetro a fin de configurar plantillas para almacenar y acceder a secretos de Secret Manager.
Este parámetro está disponible en algunas plantillas, pero no en todas. Para ver si el parámetro está disponible con la plantilla que usas, consulta la tabla de parámetros de plantilla de tu plantilla en las plantillas de transmisión de Dataflow proporcionadas por Google o Plantillas por lotes de Dataflow proporcionadas por Google.
Cuando usas este parámetro, las rutas de acceso de Cloud Storage separadas por comas o los secretos de Secret Manager se pasan al trabajador y se guardan en el directorio /extra_files
en 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 rutas de archivos relacionadas con el directorio /extra_files
.
Todos los archivos de Cloud Storage que se pasan con este parámetro se almacenan 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 que se usa como nombre del archivo.
Por ejemplo, cuando configuras extraFilesToStage
en la siguiente ruta de acceso, los archivos se almacenan 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
Configura certificados SSL
Con las plantillas que usan JDBC para leer o escribir, puedes usar elextraFilesToStage
parámetro de plantilla para almacenar en etapa intermedia los certificados como archivos locales en las VM de trabajador y, luego, hacer referencia al nombre del archivo local en la URL de conexión de JDBC o en las propiedades de la conexión.
Las conexiones SSL de JDBC difieren según la base de datos. En esta sección, se proporcionan ejemplos de bases de datos de PostgreSQL y MySQL.
Si necesitas configurar las propiedades del sistema de Java, usa JvmInitializer
.
Puedes usar JvmInitializer
para realizar una inicialización única en todos los trabajadores de Dataflow Java.
PostgreSQL
Para las conexiones SSL en bases de datos de 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 usar, usa 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, configura 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 conocer parámetros de configuración adicionales de JDBC de PostgreSQL y más detalles sobre los parámetros, consulta Parámetros de conexión en la documentación de PostgreSQL de JDBC.
MySQL
Para las conexiones SSL en las bases de datos de MySQL, los siguientes parámetros están disponibles: sslmode
, trustCertificateKeyStoreUrl
y clientCertificateKeyStoreUrl
.
- Para especificar que la conexión debe usar SSL y qué modo usar, usa 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, configura 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 parámetros de configuración de JDBC adicionales en MySQL y más detalles sobre los parámetros, consulta la página Conectores de seguridad en la documentación de MySQL.
Ejemplo de conexión SSL
En el siguiente ejemplo, se muestra cómo ejecutar la plantilla de 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"