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

O Spanner Omni e o Spanner usam a biblioteca de cliente do Go de maneira semelhante. Neste documento, mostramos como estabelecer conexões seguras com o Spanner Omni configurando a biblioteca de cliente Go. Você estabelece essas conexões configurando spanner.ClientConfig ao criar um cliente administrativo ou um cliente de banco de dados.

A biblioteca de cliente Go é compatível com conexões de texto simples, TLS, TLS com credenciais e mTLS.

Para mais informações, consulte Começar a usar o Spanner em Go na documentação do Spanner.

Antes de começar

Para usar a biblioteca de cliente Go com o Spanner Omni, use a biblioteca de cliente Go versão v1.94.0 ou mais recente e a versão de lançamento 1.25 do Go ou mais recente.

Para adicionar o módulo Spanner Go ao arquivo go.mod, execute o comando a seguir:

go get cloud.google.com/go/spanner@v1.94.0

Configurar o objeto ClientConfig

Para usar a biblioteca de cliente Go e criar um Client ou um DatabaseAdminClient, configure o objeto ClientConfig especificando Type: spanner.OMNI e forneça o endpoint usando option.WithEndpoint().

Os exemplos a seguir mostram como configurar o objeto ClientConfig para cada configuração de segurança compatível:

Texto simples

Para estabelecer uma conexão de texto simples, defina UsePlainText como true em spanner.ClientConfig:

clientConfig := spanner.ClientConfig{
  Type:         spanner.OMNI,
  UsePlainText: true,
}

adminClient, err := database.NewDatabaseAdminClientWithConfig(ctx, clientConfig,
  option.WithEndpoint("ENDPOINT"),
)
if err != nil {
  // Handle error.
}
defer adminClient.Close()

databaseClient, err := spanner.NewClientWithConfig(ctx, "DATABASE_NAME", clientConfig,
  option.WithEndpoint("ENDPOINT"),
)
if err != nil {
  // Handle error.
}
defer databaseClient.Close()

TLS

Para estabelecer uma conexão TLS, especifique o caminho para o certificado de CA usando CaCertificateFile:

clientConfig := spanner.ClientConfig{
  Type:              spanner.OMNI,
  CaCertificateFile: "PATH_TO_CA_CERT",
}

adminClient, err := database.NewDatabaseAdminClientWithConfig(ctx, clientConfig,
  option.WithEndpoint("ENDPOINT"),
)
if err != nil {
  // Handle error.
}
defer adminClient.Close()

databaseClient, err := spanner.NewClientWithConfig(ctx, "DATABASE_NAME", clientConfig,
  option.WithEndpoint("ENDPOINT"),
)
if err != nil {
  // Handle error.
}
defer databaseClient.Close()

TLS com credenciais

Para estabelecer uma conexão TLS com autenticação de nome de usuário e senha, especifique CaCertificateFile, Username e Password:

clientConfig := spanner.ClientConfig{
  Type:              spanner.OMNI,
  CaCertificateFile: "PATH_TO_CA_CERT",
  Username:          "USERNAME",
  Password:          []byte("PASSWORD"),
}

adminClient, err := database.NewDatabaseAdminClientWithConfig(ctx, clientConfig,
  option.WithEndpoint("ENDPOINT"),
)
if err != nil {
  // Handle error.
}
defer adminClient.Close()

databaseClient, err := spanner.NewClientWithConfig(ctx, "DATABASE_NAME", clientConfig,
  option.WithEndpoint("ENDPOINT"),
)
if err != nil {
  // Handle error.
}
defer databaseClient.Close()

mTLS

Para estabelecer uma conexão TLS mútuo (mTLS), especifique CaCertificateFile, ClientCertificateFile e ClientKeyFile:

clientConfig := spanner.ClientConfig{
  Type:                  spanner.OMNI,
  CaCertificateFile:     "PATH_TO_CA_CERT",
  ClientCertificateFile: "PATH_TO_CLIENT_CERT",
  ClientKeyFile:         "PATH_TO_CLIENT_KEY",
}

adminClient, err := database.NewDatabaseAdminClientWithConfig(ctx, clientConfig,
  option.WithEndpoint("ENDPOINT"),
)
if err != nil {
  // Handle error.
}
defer adminClient.Close()

databaseClient, err := spanner.NewClientWithConfig(ctx, "DATABASE_NAME", clientConfig,
  option.WithEndpoint("ENDPOINT"),
)
if err != nil {
  // Handle error.
}
defer databaseClient.Close()

Substitua:

  • PATH_TO_CA_CERT: o caminho para o arquivo de certificado de CA.

  • PATH_TO_CLIENT_CERT: o caminho para o arquivo de certificado do cliente.

  • PATH_TO_CLIENT_KEY: o caminho para o arquivo de chave do cliente.