

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

# Menghubungkan ke cluster DB Anda menggunakan otentikasi IAM dan AWS SDK untuk Go
<a name="UsingWithRDS.IAMDBAuth.Connecting.Go"></a>

Anda dapat terhubung ke dengan seperti yang dijelaskan berikut. AWS SDK untuk Go 

**Prasyarat**  
Berikut adalah prasyarat untuk menghubungkan ke klaster DB menggunakan autentikasi IAM:
+ [Mengaktifkan dan menonaktifkan autentikasi basis data IAM](UsingWithRDS.IAMDBAuth.Enabling.md)
+ [Membuat dan menggunakan kebijakan IAM untuk akses basis data IAM](UsingWithRDS.IAMDBAuth.IAMPolicy.md)
+ [Membuat akun basis data menggunakan autentikasi IAM](UsingWithRDS.IAMDBAuth.DBAccounts.md)

**Contoh**  
Untuk menjalankan contoh kode ini, Anda memerlukan [AWS SDK untuk Go](https://aws.amazon.com/sdk-for-go/), ditemukan di AWS situs.

Ubah nilai variabel berikut sesuai kebutuhan:
+ `dbName` – Basis data yang ingin Anda akses
+ `dbUser` – Akun basis data yang ingin Anda akses
+ `dbHost` – Titik akhir klaster DB yang ingin Anda akses
**catatan**  
Anda tidak dapat menggunakan data DNS Route 53 kustom sebagai pengganti titik akhir klaster DB untuk menghasilkan token autentikasi.
+ `dbPort` – Nomor port yang digunakan untuk menghubungkan ke klaster DB Anda
+ `region`— AWS Wilayah tempat cluster DB berjalan

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 database dari AWS layanan, 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"`

**Topics**
+ [Menghubungkan menggunakan otentikasi IAM dan V2 AWS SDK untuk Go](#UsingWithRDS.IAMDBAuth.Connecting.GoV2)
+ [Menghubungkan menggunakan otentikasi IAM dan V1. AWS SDK untuk Go](#UsingWithRDS.IAMDBAuth.Connecting.GoV1)

## Menghubungkan menggunakan otentikasi IAM dan V2 AWS SDK untuk Go
<a name="UsingWithRDS.IAMDBAuth.Connecting.GoV2"></a>

Anda dapat terhubung ke cluster DB menggunakan autentikasi IAM dan V2. AWS SDK untuk Go 

Contoh kode berikut ini menunjukkan cara membuat token autentikasi, lalu menggunakannya untuk menghubungkan ke klaster 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 klaster DB melalui proksi, lihat [Menghubungkan ke database menggunakan otentikasi IAM](rds-proxy-connecting.md#rds-proxy-connecting-iam).

## Menghubungkan menggunakan otentikasi IAM dan V1. AWS SDK untuk Go
<a name="UsingWithRDS.IAMDBAuth.Connecting.GoV1"></a>

Anda dapat terhubung ke cluster DB menggunakan otentikasi IAM dan V1 AWS SDK untuk Go 

Contoh kode berikut ini menunjukkan cara membuat token autentikasi, lalu menggunakannya untuk menghubungkan ke klaster 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 klaster DB melalui proksi, lihat [Menghubungkan ke database menggunakan otentikasi IAM](rds-proxy-connecting.md#rds-proxy-connecting-iam).