本頁說明如何在 Dataflow 工作站 VM 上暫存檔案,以便搭配使用 SSL 憑證和 Google 提供的 Java Database Connectivity (JDBC) 範本。您也可以使用這個頁面的步驟,在開始處理之前,在工作站 VM 上動態暫存檔案。
在工作站 VM 上暫存檔案
使用部分範本時,您可以透過 extraFilesToStage 範本參數,在 Dataflow 工作站 VM 上暫存檔案。使用這個參數,在資料處理開始前,於工作站 VM 上動態暫存檔案。您可能會在下列情況使用這個參數:
- 在每個工作站上儲存憑證和金鑰檔案,以供 SSL 連線使用。
- 由於 Dataflow 未內建 Secret Manager 支援功能,請使用這個參數設定範本,以便儲存及存取 Secret Manager 密鑰。
部分範本提供這個參數。 如要查看所用範本是否提供參數,請參閱Google 提供的 Dataflow 串流範本或 Google 提供的 Dataflow 批次範本中的範本參數表。
使用這個參數時,以半形逗號分隔的 Cloud Storage 路徑或 Secret Manager 密鑰會傳遞至工作站,並儲存在每個工作站的 /extra_files 目錄中。
檔案儲存在 /extra_files 目錄中時,其他參數可以參照這些檔案。如要參照檔案,請在設定屬性中,指定相對於 /extra_files 目錄的檔案路徑。
使用這個參數傳遞的所有 Cloud Storage 檔案都會儲存在 /extra_files 目錄中,且檔名相同。Secret Manager 密鑰會儲存在 /extra_files 目錄中,並以密鑰名稱做為檔案名稱。
舉例來說,如果將 extraFilesToStage 設為下列路徑,檔案就會儲存在每個工作站的 /extra_files 目錄中,檔案名稱為 file.txt 和 SECRET_ID。
gs://BUCKET_NAME/file.txt,projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID
設定 SSL 憑證
如果範本使用 JDBC 讀取或寫入資料,您可以透過 extraFilesToStage 範本參數,將憑證暫存為工作站 VM 上的本機檔案,然後在 JDBC 連線網址或連線屬性中參照本機檔案名稱。
JDBC SSL 連線會因資料庫而異。本節提供 PostgreSQL 和 MySQL 資料庫的範例。
如需設定 Java 系統屬性,請使用 JvmInitializer。您可以使用 JvmInitializer 對所有 Dataflow Java 工作站執行一次性初始化作業。
PostgreSQL
如要透過 SSL 連線至 PostgreSQL 資料庫,可以使用下列參數: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
如要透過安全資料傳輸層 (SSL) 連線至 MySQL 資料庫,可以使用下列參數: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"