本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 IAM 身分驗證和 適用於 Go 的 AWS SDK 連線至資料庫叢集
您可以如下所述使用 適用於 Go 的 AWS SDK,連線至 Aurora MySQL 或 Aurora PostgreSQL 資料庫叢集。
先決條件
以下是使用 IAM 身分驗證連線至資料庫叢集的先決條件:
範例
若要執行這些程式碼範例,您必須從 適用於 Go 的 AWS SDK 網站上取得 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 身分驗證和 適用於 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 =3306var 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 =5432var 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 :=3306dbEndpoint := 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 :=5432dbEndpoint := 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 身分驗證連線至資料庫。