Conexión la instancia de base de datos mediante la autenticación de IAM y el AWS SDK for Go
Puede conectarse a una instancia de base de datos de RDS for MariaDB, MySQL o PostgreSQL con el AWS SDK for Go como se describe a continuación.
Requisitos previos
A continuación, se muestran requisitos previos para conectarse al de instancia de base de datos mediante la autenticación de IAM:
Ejemplos
Para ejecutar estos ejemplos de código, necesita AWS SDK for Go
Modifique los valores de las siguientes variables según sea necesario:
-
dbName
: la base de datos a la que desea obtener acceso. -
dbUser
: la cuenta de base de datos a la que desea acceder. -
dbHost
: el punto de enlace de la instancia que desea accedernota
No puede utilizar un registro DNS personalizado de Route 53 en lugar del punto de conexión de la instancia de base de datos para generar el token de autenticación.
-
dbPort
: el número de puerto que se utiliza para conectarse a la instancia. -
region
: la región de AWS en la que se ejecuta la instancia
Además, debe asegurarse de que las bibliotecas importadas en el código de muestra existen en el sistema.
importante
En los ejemplos de esta sección se utiliza el código siguiente para proporcionar credenciales que tienen acceso a una base de datos desde un entorno local:
creds := credentials.NewEnvCredentials()
Si accede a una base de datos desde un servicio de AWS, como Amazon EC2 o Amazon ECS, puede reemplazar el código por el siguiente código:
sess := session.Must(session.NewSession())
creds := sess.Config.Credentials
Si realiza este cambio, asegúrese de agregar la siguiente importación:
"github.com/aws/aws-sdk-go/aws/session"
Temas
Conexión mediante la autenticación de IAM y el V2 AWS SDK for Go
Se puede conectar a unclúster de base de datos mediante la autenticación de IAM y el V2AWS SDK for Go.
En los siguientes ejemplos de código, se muestra cómo se genera un token de autenticación y cómo se utiliza para conectarse a una instancia.
Este código se conecta a una instancia de base de datos de MariaDB o 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 = "mysqldb.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) } }
Este código se conecta a una instancia de base de datos de 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 = "postgresmydb.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) } }
Si desea conectarse a una instancia de base de datos a través de un proxy, consulte Conexión a un proxy mediante autenticación de IAM.
Conexión mediante la autenticación de IAM y el V1 AWS SDK for Go
Conexión a una instancia mediante la autenticación de IAM y el V1 AWS SDK for Go
En los siguientes ejemplos de código, se muestra cómo se genera un token de autenticación y cómo se utiliza para conectarse a una instancia.
Este código se conecta a una instancia de base de datos de MariaDB o 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 := "mysqldb.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) } }
Este código se conecta a una instancia de base de datos de 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 := "postgresmydb.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) } }
Si desea conectarse a una instancia de base de datos a través de un proxy, consulte Conexión a un proxy mediante autenticación de IAM.