Usar a biblioteca de cliente Go para se conectar ao Spanner Omni

Neste documento, mostramos como estabelecer conexões seguras com o Spanner Omni configurando a biblioteca de cliente Go. Você estabelece essas conexões definindo as opções do cliente ao criar um cliente administrativo ou de banco de dados.

A biblioteca de cliente Go oferece suporte a conexões de texto simples, TLS e mTLS. Para todos os tipos de conexão, inclua option.WithoutAuthentication() para evitar a transmissão de Google Cloud credenciais a um endpoint do Spanner Omni.

Para mais informações, consulte Introdução ao Spanner em Go na documentação do Spanner.

Antes de começar

Para conectar a biblioteca de cliente Go ao Spanner Omni, é necessário usar a configuração IsExperimentalHost: true. Essa opção especifica que a biblioteca se conecta a uma implantação local ou on-premise do Spanner Omni em vez da versão gerenciada do Spanner.

Para usar essa opção de configuração, seu ambiente precisa atender aos seguintes requisitos:

Comunicação em texto simples

Para estabelecer a comunicação em texto simples, execute o seguinte código:

import ("google.golang.org/grpc/credentials/insecure")

adminClient, err := database.NewDatabaseAdminClient(ctx,
    option.WithEndpoint(OMNI_ENDPOINT),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
)

clientConfig := ClientConfig{
        IsExperimentalHost: true,
    }
databaseClient, err := spanner.NewClientWithConfig(ctx, db,
clientConfig,
    option.WithEndpoint(OMNI_ENDPOINT),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
)

Conexão TLS

Para estabelecer uma conexão TLS, execute o seguinte código:

func createClients(ca_certificate, database, omniEndpoint string){
    // TLS CA cert configuration
caCert, err := os.ReadFile(ca_certificate)
    capool := x509.NewCertPool()
capool.AppendCertsFromPEM(caCert)
    creds := credentials.NewTLS(&tls.Config{RootCAs: capool})

    adminClient, err := database.NewDatabaseAdminClient(ctx,
        option.WithEndpoint(omniEndpoint),
option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
option.WithoutAuthentication(),
)
clientConfig := ClientConfig{
        IsExperimentalHost: true,
    }
databaseClient, err := spanner.NewClientWithConfig(ctx, db,
clientConfig,
        option.WithEndpoint(omniEndpoint),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
)
}

Conexão mTLS

Para estabelecer uma conexão mTLS, execute o seguinte código:

func createClients(ca_certificate, client_certificate, client_key, database, omniEndpoint string){
    // mTLS cred configuration
    caCert, err := os.ReadFile(ca_certificate)
        capool := x509.NewCertPool()
        capool.AppendCertsFromPEM(caCert)
        cert := tls.LoadX509KeyPair(client_certificate, client_key)
        creds := credentials.NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}, RootCAs: capool})

        adminClient, err := database.NewDatabaseAdminClient(ctx,
            option.WithEndpoint(omniEndpoint),
            option.WithoutAuthentication(),
    option.WithGRPCDialOption(grpc.WithTransportCredentials(creds))
    )
    clientConfig := ClientConfig{
            IsExperimentalHost: true,
        }
    databaseClient, err := spanner.NewClientWithConfig(ctx, db,
    clientConfig,
            option.WithEndpoint(omniEndpoint),
    option.WithoutAuthentication(),
    option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
    )
}