IAM 인증 및 AWS SDK for Go를 사용하여 DB 클러스터에 연결 - Amazon Aurora

IAM 인증 및 AWS SDK for Go를 사용하여 DB 클러스터에 연결

아래 설명과 같이 AWS SDK for Go를 사용하여 Aurora MySQL 또는 Aurora PostgreSQL DB 클러스터에 연결할 수 있습니다.

필수 조건

다음은 IAM 인증을 사용하여 DB 클러스터에 연결하기 위한 사전 조건입니다.

예시

이 코드 예제를 실행하려면 AWS SDK for Go가 필요하며 이는 AWS 사이트에서 받을 수 있습니다.

필요하다면 다음 변수 값을 변경합니다.

  • dbName – 액세스할 데이터베이스입니다.

  • dbUser – 액세스할 데이터베이스 계정입니다.

  • dbHost - 액세스할 DB 클러스터의 엔드포인트입니다.

    참고

    인증 토큰을 생성할 때는 DB 클러스터 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드 또는 Aurora 사용자 지정 엔드포인트를 사용할 수 없습니다.

  • dbPort – DB 클러스터에 연결할 때 사용할 포트 번호입니다.

  • region - DB 클러스터가 실행되는 AWS 리전입니다.

또한 샘플 코드에서 가져온 라이브러리가 시스템에 있는지 확인합니다.

중요

이 섹션의 예에서는 다음 코드를 사용하여 로컬 환경에서 데이터베이스에 액세스하는 자격 증명을 제공합니다.

creds := credentials.NewEnvCredentials()

Amazon EC2 또는 Amazon ECS 같은 AWS 서비스에서 데이터베이스에 액세스하는 경우 코드를 다음 코드로 바꿀 수 있습니다.

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를 사용하여 DB 클러스터에 연결할 수 있습니다.

다음 코드 예제는 인증 토큰을 생성한 다음 이 토큰을 사용하여 DB 클러스터에 연결하는 방법을 보여줍니다.

이 코드는 Aurora MySQL 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 = "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 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/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) } }

프록시를 통해 DB 클러스터 연결하려는 경우 IAM 인증을 사용하여 프록시에 연결을 참조하세요.

IAM 인증 및 AWS SDK for Go V1을 사용하여 연결

IAM 인증 및 AWS SDK for Go V1을 사용하여 DB 클러스터에 연결할 수 있습니다.

다음 코드 예제는 인증 토큰을 생성한 다음 이 토큰을 사용하여 DB 클러스터에 연결하는 방법을 보여줍니다.

이 코드는 Aurora MySQL 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 := "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 DB 클러스터에 연결됩니다.

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) } }

프록시를 통해 DB 클러스터 연결하려는 경우 IAM 인증을 사용하여 프록시에 연결을 참조하세요.