使用範本搭配 SSL 憑證

本頁說明如何在 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.txtSECRET_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 資料庫,可以使用下列參數:sslsslmodesslcertsslkeysslrootcert

  • 如要指定連線應使用 SSL 和使用哪種模式,請使用 sslsslmode 參數。
  • 如要進行用戶端驗證,請使用 sslcertsslkey 參數。
  • 如要進行伺服器驗證,請使用 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 資料庫,可以使用下列參數:sslmodetrustCertificateKeyStoreUrlclientCertificateKeyStoreUrl

  • 如要指定連線應使用 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"