Apache Beam 是開放原始碼形式的整合式模型,用於定義批次和串流資料平行處理管線。本文說明如何在 Apache Beam 管道中使用 SpannerIO 連接器,從 Spanner Omni 資料庫讀取資料或將資料寫入其中。
事前準備
如要將 SpannerIO 連線至 Spanner Omni,請確認您符合下列條件:
在 Spanner Omni 環境中初始化資料庫。
如果使用加密功能,請務必使用相容的 Apache Beam 版本:
- 如要使用 TLS 加密,請使用 2.69.0 以上版本。
- 如要使用相互傳輸層安全標準 (mTLS) 加密,請使用 2.75.0 以上版本。
為環境設定驗證憑證。
設定 SpannerIO 以連線至 Spanner Omni
如要將 SpannerIO 連線至 Spanner Omni,請使用資料庫詳細資料和連線參數設定 SpannerConfig。
如要設定連線,請選擇下列其中一種連線模式:
使用純文字通訊連線
如要建立純文字連線,請指定 Spanner Omni 端點,使用 withExperimentalHost() 方法啟用實驗性主機支援,並使用 withUsingPlainTextChannel() 方法設定管道。
以下範例說明如何設定純文字連線:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the Spanner Omni endpoint
.withExperimentalHost("http://ENDPOINT")
// Use a plain-text connection
.withUsingPlainTextChannel(true);
更改下列內容:
DATABASE_ID:Spanner Omni 資料庫的 ID,例如test-db。ENDPOINT:Spanner Omni 執行個體的端點,例如localhost:15000。
使用加密連線
如要保護資料庫流量,並確保 Apache Beam 與 Spanner Omni 之間的通訊安全無虞,您可以透過 TLS 或 mTLS 加密連線。加密功能可確保憑證和資料的機密性。
使用 TLS 加密
如要使用傳輸層安全標準 (TLS) 加密,保護 Apache Beam 和 Spanner Omni 之間的資料庫流量,您不需要在 SpannerConfig 中指定憑證屬性。請改為使用 Spanner Omni CA 憑證設定 Java Truststore,然後設定 SpannerConfig 使用安全的 TLS 端點。
步驟 1:設定 Java 信任儲存區
如要確保通訊安全,您必須將 Spanner Omni 產生的 CA 憑證匯入 Java 信任儲存庫。請使用下列其中一個選項:
預設 Java 信任儲存區
執行下列指令,將 Spanner Omni 產生的 CA 憑證新增至標準 Java 信任儲存區:
sudo keytool -import -trustcacerts \
-file ~/.spanner/certs/ca.crt \
-alias spanner-ca \
-keystore $JAVA_HOME/lib/security/cacerts
自訂信任存放區
如要確保管道仍可連線至使用標準憑證授權單位 (CA) 的其他資料庫或服務,請建立自訂信任儲存區:
複製現有的 Java 信任儲存區,建立自訂信任儲存區:
cp $JAVA_HOME/lib/security/cacerts PATH_TO_CUSTOM_CA_CERTIFICATE將 CA 憑證匯入自訂信任存放區:
keytool -import -trustcacerts \ -file ~/.spanner/certs/ca.crt \ -alias spanner-ca \ -keystore PATH_TO_CUSTOM_CA_CERTIFICATE執行管道時,傳遞自訂 CA 憑證存放區:
java -Djavax.net.ssl.trustStore=PATH_TO_CUSTOM_CA_CERTIFICATE \ -Djavax.net.ssl.trustStorePassword=changeit \ -jar PIPELINE_NAME.jar
更改下列內容:
PATH_TO_CUSTOM_CA_CERTIFICATE:自訂 CA 憑證存放區的路徑。PIPELINE_NAME:Apache Beam 管道的名稱。
步驟 2:設定 SpannerConfig
如要設定 SpannerConfig 使用安全的 TLS 連線,請在管道中新增下列程式碼:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT");
更改下列內容:
DATABASE_ID:Spanner Omni 資料庫的 ID,例如test-db。ENDPOINT:Spanner Omni 執行個體的端點,例如localhost:15000。
使用 mTLS 加密
如要使用 Apache Beam 建立相互傳輸層安全 (mTLS) 連線,您必須使用 CA 憑證設定 Java Truststore,產生或轉換用戶端私密金鑰為 PKCS#8 格式,然後使用用戶端憑證和金鑰路徑設定 SpannerConfig。
步驟 1:設定 Java 信任儲存區
按照本文件稍早的「步驟 1:設定 Java 信任儲存區」所述,使用 Spanner Omni CA 憑證設定 Java 信任儲存區。
步驟 2:轉換或產生用戶端私密金鑰
如要使用 mTLS 連線,請確認用戶端私密金鑰採用 PKCS#8 格式。請使用下列其中一種方式:
openssl
如要將 Spanner Omni 產生的用戶端金鑰轉換為符合 Java 的格式,請執行下列指令:
openssl pkcs8 -topk8 \
-in ~/.spanner/certs/client.key \
-out ~/.spanner/certs/java-client.key \
-nocrypt
Spanner Omni CLI
使用 Spanner Omni CLI 搭配 --generate-pkcs8-key 標記建立用戶端憑證時,直接以 PKCS#8 格式產生金鑰。
如要產生 PKCS#8 格式的用戶端憑證和用戶端私密金鑰,請執行下列指令:
spanner certificates create-client CLIENT_NAME \
--ca-certificate-directory=PATH_TO_CA_CERTIFICATES \
--ca-private-key-directory=PATH_TO_PRIVATE_KEYS \
--output-directory=PATH_TO_CERTIFICATES \
--generate-pkcs8-key
更改下列內容:
CLIENT_NAME:要產生憑證和私密金鑰的用戶端名稱。PATH_TO_CA_CERTIFICATES:包含 CA 憑證的目錄路徑。PATH_TO_PRIVATE_KEYS:包含 CA 私密金鑰的目錄路徑。PATH_TO_CERTIFICATES:儲存用戶端憑證和私密金鑰的目錄路徑。
步驟 3:設定 SpannerConfig
在管道程式碼中,使用用戶端憑證和用戶端私密金鑰設定 SpannerConfig:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT")
// Specify the paths to the client certificate and private key
.withClientCert(
"PATH_TO_CLIENT_CERT",
"PATH_TO_CLIENT_CERT_KEY");
更改下列內容:
DATABASE_ID:Spanner Omni 資料庫的 ID,例如test-db。ENDPOINT:Spanner Omni 執行個體的端點,例如localhost:15000。PATH_TO_CLIENT_CERT:用戶端憑證檔案的路徑。PATH_TO_CLIENT_CERT_KEY:用戶端私密金鑰檔案的路徑。
設定驗證權杖
不建議用戶端使用驗證權杖,因為 Spanner Omni 產生的權杖會過期,且需要使用 Spanner Omni CLI 手動更新。如要搭配 TLS 或 mTLS 設定,將驗證權杖用於 Spanner Omni 端點,請將 SPANNER_EXPERIMENTAL_HOST_AUTH_TOKEN 環境變數設為 Spanner Omni CLI 產生的驗證權杖值。如果連線不需要憑證,請將這個變數設為未設定。