このページでは、Google 提供の Java Database Connectivity(JDBC)テンプレートを使用して SSL 証明書を使用するように、Dataflow ワーカー VM にファイルをステージングする方法について説明します。処理を始める前に、このページの手順に沿ってワーカー VM にファイルを動的にステージングすることもできます。
ワーカー VM 上にファイルをステージングする
一部のテンプレートでは、extraFilesToStage
テンプレート パラメータを使用して Dataflow ワーカー VM 上のファイルをステージングできます。このパラメータを使用すると、データ処理の開始前にワーカー VM 上にファイルを動的にステージングできます。このパラメータは、次のような場合に使用できます。
- SSL 接続用の証明書と鍵ファイルを各ワーカーに保存する。
- Dataflow に Secret Manager のサポートが組み込まれていないため、このパラメータを使用して、Secret Manager の Secret の保存とアクセスを行うテンプレートを構成する。
このパラメータは、すべてのテンプレートで利用できるわけではありません。使用しているテンプレートでパラメータが使用可能かどうかを確認するには、Google 提供の Dataflow ストリーミング テンプレートまたは Google 提供の Dataflow バッチ テンプレートで、テンプレートのテンプレート パラメータ表をご覧ください。
このパラメータを使用すると、カンマ区切りの Cloud Storage パスまたは Secret Manager シークレットがワーカーに渡され、各ワーカーの /extra_files
ディレクトリに保存されます。ファイルが /extra_files
ディレクトリに保存されると、他のパラメータはそのファイルを参照できます。ファイルを参照するには、構成プロパティで、/extra_files
ディレクトリに相対的なファイルパスを指定します。
このパラメータで渡された Cloud Storage ファイルは、すべて同じファイル名で /extra_files
ディレクトリに保存されます。Secret Manager シークレットは、ファイル名として使用されるシークレット名で /extra_files
ディレクトリに保存されます。
たとえば、次のパスに extraFilesToStage
を設定すると、ファイルは file.txt
と SECRET_ID というファイル名で各ワーカーの /extra_files
ディレクトリに保存されます。
gs://BUCKET_NAME/file.txt,projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID
SSL 証明書を構成する
JDBC を使用して読み取りと書き込みを行うテンプレートでは、extraFilesToStage
テンプレート パラメータを使用して、ワーカー VM で証明書をローカル ファイルとしてステージングし、JDBC 接続 URL または接続プロパティでローカル ファイル名を参照します。
JDBC SSL 接続はデータベースによって異なります。このセクションでは、PostgreSQL データベースと MySQL データベースの例を示します。
Java システム プロパティを設定する必要がある場合は、JvmInitializer
を使用します。JvmInitializer
を使用すると、すべての Dataflow Java ワーカーで 1 回限りの初期化を実行できます。
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"