Nesta página, vamos explicar como preparar arquivos em VMs de workers do Dataflow para usar certificados SSL com os modelos de conectividade de banco de dados Java (JDBC, na sigla em inglês) fornecidos pelo Google. Também é possível usar as etapas nesta página para organizar os arquivos dinamicamente na VM do worker antes de iniciar o processamento.
Organizar os arquivos em VMs de workers
Em alguns modelos, é possível organizar arquivos nas VMs de workers do Dataflow usando
o parâmetro de modelo extraFilesToStage
. Use esse parâmetro para organizar os arquivos dinamicamente na VM de worker antes de o processamento de dados começar.
É possível usar esse parâmetro nos seguintes casos:
- Armazene arquivos de certificados e chaves em cada worker para conexões SSL.
- Como o Dataflow não inclui suporte integrado ao Secret Manager, use esse parâmetro para configurar modelos a fim de armazenar e acessar secrets do Secret Manager.
Esse parâmetro está disponível em alguns modelos, mas não em todos. Para ver se o parâmetro está disponível com o modelo que você está usando, consulte a tabela de parâmetros do modelo em Modelos de streaming do Dataflow fornecidos pelo Google ouModelos de lote do Dataflow fornecidos pelo Google.
Ao usar esse parâmetro, os caminhos do Cloud Storage separados por vírgula ou
os secrets do Secret Manager são transmitidos para o worker e salvos no
diretório /extra_files
de cada worker.
Depois que os arquivos forem salvos no diretório /extra_files
, outros parâmetros poderão
se referir a eles. Para referenciar os arquivos, nas propriedades de configuração, especifique
os caminhos de arquivo referentes ao diretório /extra_files
.
Todos os arquivos do Cloud Storage transmitidos com esse parâmetro são
armazenados no diretório /extra_files
com o mesmo nome de arquivo.
Os secrets do Secret Manager são armazenados no diretório /extra_files
que
tem o nome do arquivo.
Por exemplo, quando você define extraFilesToStage
como o caminho a seguir, os arquivos são
armazenados no diretório /extra_files
de cada worker com os nomes de arquivo
file.txt
e SECRET_ID.
gs://BUCKET_NAME/file.txt,projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID
Configurar certificados SSL.
Com os modelos que usam JDBC para ler ou gravar, é possível usar o parâmetro de modelo extraFilesToStage
para organizar certificados como arquivos locais em VMs de workers e, depois, referenciar o nome de arquivo local no URL de conexão JDBC ou nas propriedades da conexão.
As conexões SSL JDBC diferem de acordo com o banco de dados. Nesta seção, mostramos exemplos de bancos de dados PostgreSQL e MySQL.
Caso precise definir propriedades do sistema Java, use
JvmInitializer
.
É possível usar JvmInitializer
para realizar uma inicialização única em todos os workers Java do Dataflow.
PostgreSQL
Os seguintes parâmetros estão disponíveis para conexões SSL em bancos de dados PostgreSQL: ssl
, sslmode
, sslcert
, sslkey
e sslrootcert
.
- Para especificar se a conexão deve usar o SSL e em qual modo, use os parâmetros
ssl
esslmode
. - Para validação do cliente, use os parâmetros
sslcert
esslkey
. - Para validação do servidor, use o parâmetro
sslrootcert
.
Ao se conectar ao PostgreSQL, defina os seguintes 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 mais parâmetros de configuração do JDBC do PostgreSQL e mais detalhes sobre esses parâmetros, consulte Parâmetros de conexão na documentação do JDBC para PostgreSQL.
MySQL
Os seguintes parâmetros estão disponíveis para conexões SSL
em bancos de dados MySQL: sslmode
, trustCertificateKeyStoreUrl
e
clientCertificateKeyStoreUrl
.
- Para especificar se a conexão deve usar o SSL e em qual modo, use
o parâmetro
sslmode
. - Para validação do cliente, use o parâmetro
clientCertificateKeyStoreUrl
. - Para validação do servidor, use o parâmetro
trustCertificateKeyStoreUrl
.
Ao se conectar ao MySQL, defina os seguintes 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 mais detalhes e parâmetros de configuração do JDBC do MySQL, consulte a página Conectores de segurança na documentação do MySQL.
Exemplo de conexão SSL
Veja no exemplo a seguir como executar o modelo Pub/Sub para JDBC com conexões SSL em um banco de dados 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"