O Apache Beam é um modelo unificado e de código aberto para a definição de pipelines de processamento paralelo de dados em lote e streaming. Este documento descreve como usar o conector SpannerIO em um pipeline do Apache Beam para ler ou gravar em bancos de dados do Spanner Omni.
Antes de começar
Para conectar o SpannerIO ao Spanner Omni, verifique se você atende aos seguintes requisitos:
Inicialize um banco de dados no ambiente do Spanner Omni.
Se você usar criptografia, use uma versão compatível do Apache Beam:
- Para criptografia TLS, versão 2.69.0 ou mais recente.
- Para criptografia TLS mútua (mTLS), versão 2.75.0 ou mais recente.
Configure as credenciais de autenticação para seu ambiente.
Configurar o SpannerIO para se conectar ao Spanner Omni
Para conectar o SpannerIO ao Spanner Omni, configure SpannerConfig com os detalhes do banco de dados e os parâmetros de conexão.
Para configurar a conexão, escolha um dos seguintes modos:
- Conectar usando comunicação de texto simples
- Conectar usando criptografia TLS
- Conectar usando criptografia mTLS
Conectar usando comunicação de texto simples
Para estabelecer uma conexão de texto simples, especifique o endpoint do Spanner Omni, ative o suporte de host experimental com o método withExperimentalHost() e configure o pipeline com o método withUsingPlainTextChannel().
O exemplo a seguir mostra como configurar uma conexão de texto simples:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the Spanner Omni endpoint
.withExperimentalHost("http://ENDPOINT")
// Use a plain-text connection
.withUsingPlainTextChannel(true);
Substitua:
DATABASE_ID: o ID do banco de dados do Spanner Omni, por exemplo,test-db.ENDPOINT: o endpoint da instância do Spanner Omni, por exemplo,localhost:15000.
Conectar usando criptografia
Para proteger o tráfego do banco de dados e garantir a comunicação segura entre o Apache Beam e o Spanner Omni, você pode se conectar usando a criptografia TLS ou mTLS. O uso da criptografia ajuda a manter suas credenciais e dados confidenciais.
Usar criptografia TLS
Para proteger o tráfego do banco de dados entre o Apache Beam e o Spanner Omni usando a criptografia TLS, não é necessário especificar propriedades de credenciais em SpannerConfig. Em vez disso, configure um truststore Java com o certificado de CA do Spanner Omni e, em seguida, configure o SpannerConfig para usar o endpoint TLS seguro.
Etapa 1: configurar o truststore Java
Para proteger a comunicação, importe o certificado de CA gerado pelo Spanner Omni para um truststore Java. Use uma das seguintes opções:
Truststore Java padrão
Adicione o certificado de CA gerado pelo Spanner Omni ao truststore Java padrão executando o seguinte comando:
sudo keytool -import -trustcacerts \
-file ~/.spanner/certs/ca.crt \
-alias spanner-ca \
-keystore $JAVA_HOME/lib/security/cacerts
Truststore personalizado
Para garantir que o pipeline ainda possa se conectar a outros bancos de dados ou serviços que usam autoridades de certificação (CAs) padrão, crie um truststore personalizado:
Crie um truststore personalizado copiando o truststore Java atual:
cp $JAVA_HOME/lib/security/cacerts PATH_TO_CUSTOM_CA_CERTIFICATEImporte o certificado de CA para o truststore personalizado:
keytool -import -trustcacerts \ -file ~/.spanner/certs/ca.crt \ -alias spanner-ca \ -keystore PATH_TO_CUSTOM_CA_CERTIFICATETransmita o armazenamento de certificado de CA personalizado ao executar o pipeline:
java -Djavax.net.ssl.trustStore=PATH_TO_CUSTOM_CA_CERTIFICATE \ -Djavax.net.ssl.trustStorePassword=changeit \ -jar PIPELINE_NAME.jar
Substitua:
PATH_TO_CUSTOM_CA_CERTIFICATE: o caminho para o armazenamento de certificado de CA personalizado.PIPELINE_NAME: o nome do pipeline do Apache Beam.
Etapa 2: configurar SpannerConfig
Para configurar SpannerConfig para usar uma conexão TLS segura, adicione o seguinte código ao pipeline:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT");
Substitua:
DATABASE_ID: o ID do banco de dados do Spanner Omni, por exemplo,test-db.ENDPOINT: o endpoint da instância do Spanner Omni, por exemplo,localhost:15000.
Usar criptografia mTLS
Para estabelecer uma conexão TLS mútua (mTLS) usando o Apache Beam, configure o truststore Java com o certificado de CA, gere ou converta uma chave privada do cliente para o formato PKCS#8 e configure SpannerConfig com o certificado do cliente e o caminho da chave.
Etapa 1: configurar o truststore Java
Configure o truststore Java com o certificado de CA do Spanner Omni , conforme descrito em Etapa 1: configurar o truststore Java, anteriormente neste documento.
Etapa 2: converter ou gerar a chave privada do cliente
Para se conectar usando mTLS, verifique se a chave privada do cliente está no formato PKCS#8. Use uma das seguintes opções:
openssl
Para converter a chave do cliente gerada pelo Spanner Omni em um formato compatível com Java, execute o seguinte comando:
openssl pkcs8 -topk8 \
-in ~/.spanner/certs/client.key \
-out ~/.spanner/certs/java-client.key \
-nocrypt
CLI para Spanner Omni
Gere a chave diretamente no formato PKCS#8 ao criar o certificado do cliente usando a CLI para Spanner Omni com a flag --generate-pkcs8-key.
Para gerar um certificado do cliente e uma chave privada do cliente no formato PKCS#8, execute o seguinte 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
Substitua:
CLIENT_NAME: o nome do cliente para gerar o certificado e a chave privada.PATH_TO_CA_CERTIFICATES: o caminho para o diretório que contém os certificados de CA.PATH_TO_PRIVATE_KEYS: o caminho para o diretório que contém as chaves privadas de CA.PATH_TO_CERTIFICATES: o caminho para o diretório em que o certificado do cliente e a chave privada são salvos.
Etapa 3: configurar SpannerConfig
Configure o SpannerConfig no código do pipeline com o certificado do cliente e a chave privada do 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");
Substitua:
DATABASE_ID: o ID do banco de dados do Spanner Omni, por exemplo,test-db.ENDPOINT: o endpoint da instância do Spanner Omni, por exemplo,localhost:15000.PATH_TO_CLIENT_CERT: o caminho para o arquivo de certificado do cliente.PATH_TO_CLIENT_CERT_KEY: o caminho para o arquivo de chave privada do cliente.
Configurar tokens de autenticação
Os tokens de autenticação não são recomendados para uso do cliente porque os tokens gerados pelo Spanner Omni expiram e exigem renovação manual com a CLI para Spanner Omni. Para usar um token de autenticação com uma configuração TLS ou mTLS para um endpoint do Spanner Omni, defina a variável de ambiente SPANNER_EXPERIMENTAL_HOST_AUTH_TOKEN como o valor do token de autenticação gerado pela CLI para Spanner Omni. Deixe essa variável não definida para conexões que não exigem credenciais.