使用 IAM 身分驗證和 連線至資料庫叢集適用於 Go 的 AWS SDK - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 IAM 身分驗證和 連線至資料庫叢集適用於 Go 的 AWS SDK

您可以使用 連線到 Aurora MySQL 或 Aurora PostgreSQL 資料庫叢集 適用於 Go 的 AWS SDK ,如下所述。

先決條件

以下是使用 IAM 身分驗證連線至資料庫叢集的先決條件:

範例

若要執行這些程式碼範例,您需要在 AWS 網站上適用於 Go 的 AWS SDK找到的 。

視需要修改下列變數的值:

  • dbName – 您想要存取的資料庫

  • dbUser – 您想要存取的資料庫帳戶

  • dbHost – 您想要存取之資料庫叢集的端點

    注意

    您無法使用自訂 Route 53 DNS 記錄或 Aurora 自訂端點替代資料庫叢集端點來產生身分驗證字符。

  • dbPort – 用於連線資料庫叢集的連接埠號碼

  • region – 資料庫叢集執行所在的 AWS 區域

此外,請確定範例程式碼中匯入的程式庫存在於您的系統上。

重要

本節中的範例使用下列程式碼來提供從本機環境存取資料庫的登入資料:

creds := credentials.NewEnvCredentials()

如果您從 AWS 服務存取資料庫,例如 Amazon EC2 或 Amazon ECS,您可以將程式碼取代為下列程式碼:

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

creds := sess.Config.Credentials

如果您進行此變更,請確定您新增了下列匯入:

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

使用 IAM 身分驗證和 適用於 Go 的 AWS SDK V2 進行連線

您可以使用 IAM 身分驗證和 適用於 Go 的 AWS SDK V2 連線到資料庫叢集

以下程式碼範例顯示如何產生身分驗證字符,然後用來連線至資料庫叢集

此程式碼連接到一個 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) } }

此程式碼連接到一個 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) } }

如果要透過 Proxy 連線到資料庫叢集,請參閱 使用 IAM 身分驗證連線到代理

使用 IAM 身分驗證和 適用於 Go 的 AWS SDK V1 進行連線。

您可以使用 IAM 身分驗證和 適用於 Go 的 AWS SDK V1 連線到資料庫叢集

以下程式碼範例顯示如何產生身分驗證字符,然後用來連線至資料庫叢集

此程式碼連接到一個 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) } }

此程式碼連接到一個 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) } }

如果要透過 Proxy 連線到資料庫叢集,請參閱 使用 IAM 身分驗證連線到代理