Menghubungkan ke instans DB menggunakan autentikasi IAM dan AWS SDK for Go - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menghubungkan ke instans DB menggunakan autentikasi IAM dan AWS SDK for Go

Anda dapat menghubungkan ke klaster DB Aurora MySQL atau Aurora PostgreSQL dengan AWS SDK for Go seperti yang dijelaskan berikut ini.

Prasyarat

Berikut adalah prasyarat untuk menghubungkan ke instans DB menggunakan autentikasi IAM:

Contoh

Untuk menjalankan contoh kode ini, Anda memerlukan AWS SDK for Go, yang ada di situs AWS.

Ubah nilai variabel berikut sesuai kebutuhan:

  • dbName – Basis data yang ingin Anda akses

  • dbUser – Akun basis data yang ingin Anda akses

  • dbHost – Titik akhir instans DB yang ingin Anda akses

    catatan

    Anda tidak dapat menggunakan data DNS Route 53 kustom atau titik akhir kustom Aurora sebagai pengganti titik akhir instans DB untuk menghasilkan token autentikasi.

  • dbPort – Nomor port yang digunakan untuk menghubungkan ke instans DB Anda

  • region – Wilayah AWS tempat instans DB beroperasi

Selain itu, pastikan pustaka yang diimpor dalam kode sampel ada di sistem Anda.

penting

Contoh dalam bagian ini menggunakan kode berikut untuk menyediakan kredensial yang mengakses basis data dari lingkungan lokal:

creds := credentials.NewEnvCredentials()

Jika Anda mengakses basis data dari layanan AWS, seperti Amazon EC2 atau Amazon ECS, Anda dapat mengganti kode dengan kode berikut:

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

creds := sess.Config.Credentials

Jika Anda membuat perubahan ini, pastikan Anda menambahkan impor berikut:

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

Menghubungkan menggunakan autentikasi IAM dan AWS SDK for Go V2

Anda dapat menghubungkan ke instans DB menggunakan autentikasi IAM dan AWS SDK for Go V2.

Contoh kode berikut ini menunjukkan cara membuat token autentikasi, lalu menggunakannya untuk menghubungkan ke instans DB.

Kode ini terhubung ke klaster DB 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) } }

Kode ini terhubung ke klaster DB 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) } }

Jika Anda ingin terhubung ke instans DB melalui proksi, lihat Terhubung ke sebuah proksi menggunakan autentikasi IAM.

Menghubungkan menggunakan autentikasi IAM dan AWS SDK for Go V1.

Anda dapat menghubungkan ke instans DB menggunakan autentikasi IAM dan AWS SDK for Go V1

Contoh kode berikut ini menunjukkan cara membuat token autentikasi, lalu menggunakannya untuk menghubungkan ke instans DB.

Kode ini terhubung ke klaster DB 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) } }

Kode ini terhubung ke klaster DB 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) } }

Jika Anda ingin terhubung ke instans DB melalui proksi, lihat Terhubung ke sebuah proksi menggunakan autentikasi IAM.