Conectar-se ao cluster de banco de dados usando a autenticação do IAM e o AWS SDK for Go - Amazon Aurora

Conectar-se ao cluster de banco de dados usando a autenticação do IAM e o AWS SDK for Go

Você pode se conectar a um cluster de banco de dados Aurora MySQL ou Aurora PostgreSQL com a AWS SDK for Go, conforme descrito a seguir.

Pré-requisitos

Veja a seguir os pré-requisitos para se conectar ao cluster de banco de dados usando a autenticação do IAM:

Exemplos

Para executar esses exemplos de código, você precisa do AWS SDK for Go, encontrado no site AWS.

Modifique os valores das seguintes variáveis, conforme necessário:

  • dbName: o banco de dados que você deseja acessar

  • dbUser: a conta de banco de dados que você deseja acessar

  • dbHost: o endpoint do cluster de banco de dados que você deseja acessar

    nota

    Não é possível usar um registro DNS personalizado do Route 53 ou um endpoint personalizado do Aurora em vez do endpoint do cluster de banco de dados para gerar o token de autenticação.

  • dbPort: o número da porta usada para se conectar ao cluster de banco de dados

  • region: a região da AWS na qual o cluster do banco de dados está em execução.

Além disso, verifique se as bibliotecas importadas no código de exemplo existem no sistema.

Importante

Os exemplos nesta seção usam o seguinte código para fornecer credenciais que acessam um banco de dados a partir de um ambiente local:

creds := credentials.NewEnvCredentials()

Se estiver acessando um banco de dados de um serviço da AWS, como o Amazon EC2 ou Amazon ECS, você poderá substituir o código pelo seguinte código:

sess := session.Must(session.NewSession())

creds := sess.Config.Credentials

Se você fizer essa alteração, certifique-se de adicionar a seguinte importação:

"github.com/aws/aws-sdk-go/aws/session"

Conectar-se usando a autenticação do IAM e o AWS SDK for Go V2

Conecte-se a um cluster de banco de dados usando a autenticação do IAM e o AWS SDK for Go V2.

O exemplo de código a seguir mostra como gerar um token de autenticação e usá-lo para se conectar a um cluster de banco de dados.

Esse código se conecta a um cluster de banco de dados Aurora MySQL.

package main import ( "context" "database/sql" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/feature/rds/auth" _ "github.com/go-sql-driver/mysql" ) func main() { var dbName string = "DatabaseName" var dbUser string = "DatabaseUser" var dbHost string = "mysqlcluster.cluster-123456789012.us-east-1.rds.amazonaws.com" var dbPort int = 3306 var dbEndpoint string = fmt.Sprintf("%s:%d", dbHost, dbPort) var region string = "us-east-1" cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error: " + err.Error()) } authenticationToken, err := auth.BuildAuthToken( context.TODO(), dbEndpoint, region, dbUser, cfg.Credentials) if err != nil { panic("failed to create authentication token: " + err.Error()) } dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?tls=true&allowCleartextPasswords=true", dbUser, authenticationToken, dbEndpoint, dbName, ) db, err := sql.Open("mysql", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Esse código se conecta a um cluster de banco de dados Aurora PostgreSQL.

package main import ( "context" "database/sql" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/feature/rds/auth" _ "github.com/lib/pq" ) func main() { var dbName string = "DatabaseName" var dbUser string = "DatabaseUser" var dbHost string = "postgresmycluster.cluster-123456789012.us-east-1.rds.amazonaws.com" var dbPort int = 5432 var dbEndpoint string = fmt.Sprintf("%s:%d", dbHost, dbPort) var region string = "us-east-1" cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error: " + err.Error()) } authenticationToken, err := auth.BuildAuthToken( context.TODO(), dbEndpoint, region, dbUser, cfg.Credentials) if err != nil { panic("failed to create authentication token: " + err.Error()) } dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s", dbHost, dbPort, dbUser, authenticationToken, dbName, ) db, err := sql.Open("postgres", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Se você quiser se conectar a um cluster de banco de dados por meio de um proxy, consulte Conectar-se a um proxy usando autenticação do IAM.

Conectar-se usando a autenticação do IAM e o AWS SDK for Go V1.

Conecte-se a uma instância de banco de dados usando a autenticação do IAM e o AWS SDK for Go V1

O exemplo de código a seguir mostra como gerar um token de autenticação e usá-lo para se conectar a um cluster de banco de dados.

Esse código se conecta a um cluster de banco de dados Aurora MySQL.

package main import ( "database/sql" "fmt" "log" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/service/rds/rdsutils" _ "github.com/go-sql-driver/mysql" ) func main() { dbName := "app" dbUser := "jane_doe" dbHost := "mysqlcluster.cluster-123456789012.us-east-1.rds.amazonaws.com" dbPort := 3306 dbEndpoint := fmt.Sprintf("%s:%d", dbHost, dbPort) region := "us-east-1" creds := credentials.NewEnvCredentials() authToken, err := rdsutils.BuildAuthToken(dbEndpoint, region, dbUser, creds) if err != nil { panic(err) } dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?tls=true&allowCleartextPasswords=true", dbUser, authToken, dbEndpoint, dbName, ) db, err := sql.Open("mysql", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Esse código se conecta a um cluster de banco de dados Aurora PostgreSQL.

package main import ( "database/sql" "fmt" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/service/rds/rdsutils" _ "github.com/lib/pq" ) func main() { dbName := "app" dbUser := "jane_doe" dbHost := "postgresmycluster.cluster-123456789012.us-east-1.rds.amazonaws.com" dbPort := 5432 dbEndpoint := fmt.Sprintf("%s:%d", dbHost, dbPort) region := "us-east-1" creds := credentials.NewEnvCredentials() authToken, err := rdsutils.BuildAuthToken(dbEndpoint, region, dbUser, creds) if err != nil { panic(err) } dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s", dbHost, dbPort, dbUser, authToken, dbName, ) db, err := sql.Open("postgres", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Se você quiser se conectar a um cluster de banco de dados por meio de um proxy, consulte Conectar-se a um proxy usando autenticação do IAM.