使用證和 AWS SDK for Go - Amazon Relational Database Service

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

使用和 AWS SDK for Go

您可以使用下 AWS SDK for Go 列說明連線至RDS適用於 Maria SQL DB SQL、我的或 Postgre 資料庫執行個體

必要條件

以下是使用IAM驗證連線到資料庫執行個體的先決條件:

範例

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

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

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

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

  • dbHost – 您想要存取之資料庫執行個體的端點

    注意

    您無法使用自訂 Route 53 DNS 記錄,而非使用資料庫執行個體端點來產生驗證權杖。

  • 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 連線到資料庫執行個體

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

此程式碼會連線至 Maria SQL DB 或我的資料庫執行個體。

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 = "mysqldb.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) } }

此程式碼會連線至 Postgre SQL 資料庫執行個體。

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 = "postgresmydb.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 連線到資料庫執行個體

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

此程式碼會連線至 Maria SQL DB 或我的資料庫執行個體。

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 := "mysqldb.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) } }

此程式碼會連線至 Postgre SQL 資料庫執行個體。

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 := "postgresmydb.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 身分驗證連線到代理