Apache Beam es un modelo unificado de código abierto que se usa para definir canalizaciones con paralelismo de datos de procesamiento por lotes y de transmisiones. En este documento, se describe cómo usar el conector SpannerIO dentro de una canalización de Apache Beam para leer o escribir en bases de datos de Spanner Omni.
Antes de comenzar
Para conectar SpannerIO a Spanner Omni, asegúrate de cumplir con los siguientes requisitos:
Inicializa una base de datos en tu entorno de Spanner Omni.
Si usas encriptación, asegúrate de usar una versión compatible de Apache Beam:
- Para la encriptación TLS, la versión 2.69.0 o posterior.
- Para la encriptación TLS mutua (mTLS), la versión 2.75.0 o posterior.
Configura las credenciales de autenticación para tu entorno.
Configura SpannerIO para conectarse a Spanner Omni
Para conectar SpannerIO a Spanner Omni, configura SpannerConfig con los detalles de tu base de datos y los parámetros de conexión.
Para configurar la conexión, elige uno de los siguientes modos de conexión:
- Conéctate con comunicación de texto sin formato
- Conéctate con encriptación TLS
- Conéctate con encriptación mTLS
Conéctate con comunicación de texto sin formato
Para establecer una conexión de texto sin formato, especifica el extremo de Spanner Omni, habilita la compatibilidad experimental con el host con el método withExperimentalHost() y configura la canalización con el método withUsingPlainTextChannel().
En el siguiente ejemplo, se muestra cómo configurar una conexión de texto sin formato:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the Spanner Omni endpoint
.withExperimentalHost("http://ENDPOINT")
// Use a plain-text connection
.withUsingPlainTextChannel(true);
Reemplaza lo siguiente:
DATABASE_ID: Es el ID de tu base de datos de Spanner Omni, por ejemplo,test-db.ENDPOINT: Es el extremo de tu instancia de Spanner Omni, por ejemplo,localhost:15000.
Conéctate con encriptación
Para proteger el tráfico de la base de datos y garantizar la comunicación segura entre Apache Beam y Spanner Omni, puedes conectarte con encriptación TLS o mTLS. El uso de la encriptación ayuda a mantener la confidencialidad de tus credenciales y datos.
Usa la encriptación TLS
Para proteger el tráfico de la base de datos entre Apache Beam y Spanner Omni con la encriptación TLS, no es necesario que especifiques las propiedades de las credenciales en SpannerConfig. En su lugar, configura un almacén de confianza de Java con el certificado de CA de Spanner Omni y, luego, configura SpannerConfig para usar el extremo TLS seguro.
Paso 1: Configura el almacén de confianza de Java
Para proteger la comunicación, debes importar el certificado de CA generado por Spanner Omni a un almacén de confianza de Java. Usa una de las siguientes opciones:
Almacén de confianza predeterminado de Java
Para agregar el certificado de CA generado por Spanner Omni al almacén de confianza estándar de Java, ejecuta el siguiente comando:
sudo keytool -import -trustcacerts \
-file ~/.spanner/certs/ca.crt \
-alias spanner-ca \
-keystore $JAVA_HOME/lib/security/cacerts
Almacén de confianza personalizado
Para asegurarte de que tu canalización aún pueda conectarse a otras bases de datos o servicios que usen autoridades certificadoras (CA) estándar, crea un almacén de confianza personalizado:
Para crear un almacén de confianza personalizado, copia el almacén de confianza de Java existente:
cp $JAVA_HOME/lib/security/cacerts PATH_TO_CUSTOM_CA_CERTIFICATEImporta el certificado de CA a tu almacén de confianza personalizado:
keytool -import -trustcacerts \ -file ~/.spanner/certs/ca.crt \ -alias spanner-ca \ -keystore PATH_TO_CUSTOM_CA_CERTIFICATEPasa el almacén de certificados de CA personalizado cuando ejecutes la canalización:
java -Djavax.net.ssl.trustStore=PATH_TO_CUSTOM_CA_CERTIFICATE \ -Djavax.net.ssl.trustStorePassword=changeit \ -jar PIPELINE_NAME.jar
Reemplaza lo siguiente:
PATH_TO_CUSTOM_CA_CERTIFICATE: Es la ruta de acceso a tu almacén de certificados de CA personalizado.PIPELINE_NAME: Es el nombre de tu canalización de Apache Beam.
Paso 2: Configura SpannerConfig
Para configurar SpannerConfig para usar una conexión TLS segura, agrega el siguiente código a tu canalización:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT");
Reemplaza lo siguiente:
DATABASE_ID: Es el ID de tu base de datos de Spanner Omni, por ejemplo,test-db.ENDPOINT: Es el extremo de tu instancia de Spanner Omni, por ejemplo,localhost:15000.
Usa la encriptación mTLS
Para establecer una conexión TLS mutua (mTLS) con Apache Beam, debes configurar el almacén de confianza de Java con el certificado de CA, generar o convertir una clave privada del cliente al formato PKCS#8 y, luego, configurar SpannerConfig con el certificado del cliente y la ruta de acceso de la clave.
Paso 1: Configura el almacén de confianza de Java
Configura el almacén de confianza de Java con el certificado de CA de Spanner Omni como se describe en Paso 1: Configura el almacén de confianza de Java anteriormente en este documento.
Paso 2: Convierte o genera la clave privada del cliente
Para conectarte con mTLS, asegúrate de que tu clave privada del cliente esté en formato PKCS#8. Usa una de las siguientes opciones:
openssl
Para convertir la clave del cliente generada por Spanner Omni a un formato compatible con Java, ejecuta el siguiente comando:
openssl pkcs8 -topk8 \
-in ~/.spanner/certs/client.key \
-out ~/.spanner/certs/java-client.key \
-nocrypt
CLI de Spanner Omni
Genera la clave directamente en formato PKCS#8 cuando crees tu certificado de cliente con la CLI de Spanner Omni con la marca --generate-pkcs8-key.
Para generar un certificado de cliente y una clave privada del cliente en formato PKCS#8, ejecuta el siguiente comando:
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
Reemplaza lo siguiente:
CLIENT_NAME: Es el nombre del cliente para el que se generarán el certificado y la clave privada.PATH_TO_CA_CERTIFICATES: Es la ruta de acceso al directorio que contiene los certificados de CA.PATH_TO_PRIVATE_KEYS: Es la ruta de acceso al directorio que contiene las claves privadas de CA.PATH_TO_CERTIFICATES: Es la ruta de acceso al directorio en el que se guardan el certificado y la clave privada del cliente.
Paso 3: Configura SpannerConfig
Configura SpannerConfig en el código de tu canalización con el certificado del cliente y la clave privada del cliente:
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");
Reemplaza lo siguiente:
DATABASE_ID: Es el ID de tu base de datos de Spanner Omni, por ejemplo,test-db.ENDPOINT: Es el extremo de tu instancia de Spanner Omni, por ejemplo,localhost:15000.PATH_TO_CLIENT_CERT: Es la ruta de acceso al archivo del certificado del cliente.PATH_TO_CLIENT_CERT_KEY: Es la ruta de acceso al archivo de claves privadas del cliente.
Configura tokens de autenticación
No se recomiendan los tokens de autenticación para el uso del cliente porque los tokens generados por Spanner Omni vencen y requieren una renovación manual con la CLI de Spanner Omni. Para usar un token de autenticación con una configuración de TLS o mTLS para un extremo de Spanner Omni, establece la variable de entorno SPANNER_EXPERIMENTAL_HOST_AUTH_TOKEN en el valor del token de autenticación generado por la CLI de Spanner Omni. Deja esta variable sin configurar para las conexiones que no requieren credenciales.