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

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

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

您可以如下所述使用 AWS SDK for Go,連線至 Aurora MySQL 或 Aurora PostgreSQL 資料庫叢集

先決條件

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

範例

若要執行這些程式碼範例,您必須從 AWS SDK for Go 網站上取得 AWS

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

  • 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 身分驗證和 AWS SDK for Go V2 進行連線

使用 IAM 身分驗證和 AWS SDK for Go 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 身分驗證和 AWS SDK for Go V1 進行連線。

使用 IAM 身分驗證和 AWS SDK for Go 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 身分驗證連線到代理