本页面介绍如何在 Dataflow 工作器虚拟机上暂存文件,以将 SSL 证书与 Google 提供的 Java Database Connectivity (JDBC) 模板搭配使用。您还可以按照本页中的步骤在工作器虚拟机上动态地暂存文件,然后再开始处理。
在工作器虚拟机上暂存文件
对于某些模板,您可以使用 extraFilesToStage
模板参数在 Dataflow 工作器虚拟机上暂存文件。使用此参数在工作器虚拟机上动态地暂存文件,然后再开始处理数据。您可能会在以下情况下使用此参数:
- 在每个工作器上存储用于 SSL 连接的证书和密钥文件。
- 由于 Dataflow 不包含对 Secret Manager 的内置支持,因此请使用此参数配置模板以存储和访问 Secret Manager Secret。
此参数仅在部分(而非全部)模板中可用。要查看参数是否可用于您使用的模板,请参阅Google 提供的 Dataflow 流处理模板或Google 提供的 Dataflow 批处理模板中模板的模板参数表。
使用此参数时,以英文逗号分隔的 Cloud Storage 路径或 Secret Manager Secret 会传递给工作器,并将其保存在每个工作器的 /extra_files
目录中。将文件保存在 /extra_files
目录中时,其他参数可以引用它们。如需引用文件,请在配置属性中指定相对于 /extra_files
目录的文件路径。
使用此参数传递的所有 Cloud Storage 文件以相同的文件名存储在 /extra_files
目录中。Secret Manager Secret 存储在 /extra_files
目录中,并将 Secret 名称用作文件名。
例如,当您将 extraFilesToStage
设置为以下路径时,文件将存储在每个工作器的 /extra_files
目录中,文件名为 file.txt
和 SECRET_ID。
gs://BUCKET_NAME/file.txt,projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID
配置 SSL 证书
对于使用 JDBC 读取或写入数据的模板,您可以使用 extraFilesToStage
模板参数将证书暂存为工作器虚拟机上的本地文件,然后在 JDBC 连接网址中或连接属性中引用本地文件名。
JDBC SSL 连接因数据库而异。本部分提供 PostgreSQL 和 MySQL 数据库的示例。
如果您需要设置 Java 系统属性,请使用 JvmInitializer
。
您可以使用 JvmInitializer
对所有 Dataflow Java 工作器执行一次性初始化。
PostgreSQL
对于 PostgreSQL 数据库中的 SSL 连接,以下参数可用:ssl
、sslmode
、sslcert
、sslkey
和 sslrootcert
。
- 要指定连接应使用 SSL 以及要使用的模式,请使用
ssl
和sslmode
参数。 - 对于客户端验证,请使用
sslcert
和sslkey
参数。 - 对于服务器验证,请使用
sslrootcert
参数。
连接到 PostgreSQL 时,请设置以下参数:
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...
如需查看其他 PostgreSQL JDBC 配置参数并详细了解这些参数,请参阅 JDBC PostgreSQL 文档中的连接参数。
MySQL
对于 MySQL 数据库中的 SSL 连接,以下参数可用:sslmode
、trustCertificateKeyStoreUrl
和 clientCertificateKeyStoreUrl
。
- 要指定连接应使用 SSL 和要使用的模式,请使用
sslmode
参数。 - 对于客户端验证,请使用
clientCertificateKeyStoreUrl
参数。 - 对于服务器验证,请使用
trustCertificateKeyStoreUrl
参数。
连接到 MySQL 时,请设置以下参数:
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...
如需查看其他 MySQL JDBC 配置参数并详细了解这些参数,请参阅 MySQL 文档中的安全连接器页面。
SSL 连接示例
以下示例演示了如何在 MySQL 数据库中运行具有 SSL 连接的 Pub/Sub to JDBC 模板。
#!/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"