Conectar-se ao cluster de banco de dados usando a autenticação do IAM e o AWS SDK para Go
Você pode se conectar a um cluster de banco de dados Aurora MySQL ou Aurora PostgreSQL com a AWS SDK para 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 para Go
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 acessarnota
Não é possível usar um registro DNS personalizado do Route 53 ou um endpoint personalizado do Aurora em vez do endpoint do cluster da 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"
Tópicos
Conectar-se usando a autenticação do IAM e o AWS SDK para Go V2
Conecte-se a um cluster de banco de dados usando a autenticação do IAM e o AWS SDK para 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 para Go V1.
Conecte-se a uma instância de banco de dados usando a autenticação do IAM e o AWS SDK para 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.