View a markdown version of this page

Go 커넥터를 사용하여 Aurora DSQL 클러스터에 연결 - Amazon Aurora DSQL

Go 커넥터를 사용하여 Aurora DSQL 클러스터에 연결

Go용 Aurora DSQL 커넥터pgx를 자동 IAM 인증으로 래핑합니다. 커넥터는 토큰 생성, SSL 구성 및 연결 관리를 처리하므로 애플리케이션 로직에 집중할 수 있습니다.

커넥터 정보

Aurora DSQL에는 기존 Go PostgreSQL 드라이버가 기본적으로 지원하지 않는 시간 제한 토큰을 사용한 IAM 기반 인증이 필요합니다. Go용 Aurora DSQL 커넥터는 IAM 토큰 생성을 처리하는 pgx 드라이버 위에 인증 계층을 추가하여 기존 pgx 워크플로를 변경하지 않고도 Aurora DSQL에 연결할 수 있도록 합니다.

Aurora DSQL 인증이란 무엇인가요?

Aurora DSQL에서 인증에는 다음이 포함됩니다.

  • IAM 인증: 모든 연결은 시간 제한 토큰이 있는 IAM 기반 인증을 사용합니다.

  • 토큰 생성: 커넥터는 AWS 자격 증명을 사용하여 인증 토큰을 생성하며 이러한 토큰에는 구성 가능한 수명이 있습니다.

Go용 Aurora DSQL 커넥터는 이러한 요구 사항을 이해하고 연결을 설정할 때 IAM 인증 토큰을 자동으로 생성하도록 설계되었습니다.

Go용 Aurora DSQL 커넥터의 이점

Go용 Aurora DSQL 커넥터를 사용하면 기존 pgx 워크플로를 계속 사용하면서 IAM 인증을 활성화할 수 있습니다.

  • 자동 토큰 생성: 커넥터가 각 연결에 대해 IAM 토큰을 자동으로 생성

  • 연결 풀링: 연결마다 자동으로 토큰을 생성하여 pgxpool 기본 지원

  • 유연한 구성: 리전 자동 감지를 통해 전체 엔드포인트 또는 클러스터 ID 지원

  • AWS 자격 증명 지원: AWS 프로파일 및 사용자 지정 자격 증명 공급자 지원

주요 기능

자동 토큰 관리

커넥터가 사전 확인된 자격 증명을 사용하여 새 연결마다 IAM 토큰을 자동으로 생성합니다.

연결 풀링

연결마다 자동으로 토큰을 생성하여 pgxpool을 통해 연결을 풀링합니다.

유연한 호스트 구성

자동 리전 감지를 통해 전체 클러스터 엔드포인트와 클러스터 ID를 모두 지원합니다.

SSL 보안

SSL은 항상 verify-full 모드와 직접 TLS 협상으로 활성화됩니다.

사전 조건

  • Go 1.24 이상

  • AWS 자격 증명이 구성됨

  • Aurora DSQL 클러스터

커넥터는 다음 순서로 자격 증명을 확인하는 AWS SDK for Go v2 기본 자격 증명 체인을 사용합니다.

  1. 환경 변수(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

  2. 공유 자격 증명 파일(~/.aws/credentials)

  3. 공유 구성 파일(~/.aws/config)

  4. Amazon EC2/ECS/Lambda에 대한 IAM 역할

설치

Go 모듈을 사용하여 커넥터 설치:

go get github.com/awslabs/aurora-dsql-connectors/go/pgx/dsql

빠른 시작

다음 예제에서는 연결 풀을 만들고 쿼리를 실행하는 방법을 보여줍니다.

package main import ( "context" "log" "github.com/awslabs/aurora-dsql-connectors/go/pgx/dsql" ) func main() { ctx := context.Background() // Create a connection pool pool, err := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", }) if err != nil { log.Fatal(err) } defer pool.Close() // Execute a query var greeting string err = pool.QueryRow(ctx, "SELECT 'Hello, DSQL!'").Scan(&greeting) if err != nil { log.Fatal(err) } log.Println(greeting) }

구성 옵션

커넥터는 다음과 같은 구성 옵션을 지원합니다.

Field Type 기본값 설명
Host 문자열 (필수) 클러스터 엔드포인트 또는 클러스터 ID
리전 문자열 (자동 탐지됨) AWS 리전, 호스트가 클러스터 ID인 경우 필수
User 문자열 "admin" 데이터베이스 사용자
데이터베이스 문자열 "postgres" 데이터베이스 이름
Port int 5432 데이터베이스 포트
프로필 문자열 "" 자격 증명의 AWS 프로파일 이름
TokenDurationSecs int 900(15분) 초 단위의 토큰 유효 기간(최대 허용: 1주, 기본값: 15분)
MaxConns int32 0 최대 풀 연결(0 = pgxpool 기본값)
MinConns int32 0 최소 풀 연결(0 = pgxpool 기본값)
MaxConnLifetime time.Duration 55분 최대 연결 수명

연결 문자열 형식

커넥터는 다음의 PostgreSQL 및 DSQL 연결 문자열 형식을 지원합니다.

postgres://[user@]host[:port]/[database][?param=value&...] dsql://[user@]host[:port]/[database][?param=value&...]

지원되는 쿼리 파라미터:

  • region - AWS 리전

  • profile - AWS 프로파일 이름

  • tokenDurationSecs - 토큰 유효 기간(초 단위)

예시:

// Full endpoint (region auto-detected) pool, _ := dsql.NewPool(ctx, "postgres://admin@cluster.dsql.us-east-1.on.aws/postgres") // Using dsql:// scheme (also supported) pool, _ := dsql.NewPool(ctx, "dsql://admin@cluster.dsql.us-east-1.on.aws/postgres") // With explicit region pool, _ := dsql.NewPool(ctx, "postgres://admin@cluster.dsql.us-east-1.on.aws/mydb?region=us-east-1") // With AWS profile pool, _ := dsql.NewPool(ctx, "postgres://admin@cluster.dsql.us-east-1.on.aws/postgres?profile=dev")

고급 사용

호스트 구성

커넥터는 다음의 두 가지 호스트 형식을 지원합니다.

전체 엔드포인트(리전 자동 감지됨):

pool, _ := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", })

클러스터 ID(리전 필요):

pool, _ := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster-id", Region: "us-east-1", })

풀 구성 튜닝

워크로드에 대한 연결 풀을 구성합니다.

pool, err := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", MaxConns: 20, MinConns: 5, MaxConnLifetime: time.Hour, MaxConnIdleTime: 30 * time.Minute, HealthCheckPeriod: time.Minute, })

단일 연결 사용

간단한 스크립트의 경우 또는 연결 풀링이 필요하지 않은 경우:

conn, err := dsql.Connect(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", }) if err != nil { log.Fatal(err) } defer conn.Close(ctx) // Use the connection rows, err := conn.Query(ctx, "SELECT * FROM users")

AWS 프로파일 사용

자격 증명에 대한 AWS 프로파일 지정:

pool, err := dsql.NewPool(ctx, dsql.Config{ Host: "your-cluster.dsql.us-east-1.on.aws", Profile: "production", })

OCC 재시도

Aurora DSQL은 낙관적 동시성 제어(OCC)를 사용합니다. 두 개의 트랜잭션이 동일한 데이터를 수정할 경우, 먼저 커밋된 트랜잭션이 우선권을 가지며 두 번째 트랜잭션은 OCC 오류를 수신합니다.

occretry 패키지는 지수 백오프 및 지터를 사용한 자동 재시도 도우미를 제공합니다. 다음을 사용하여 설치합니다.

go get github.com/awslabs/aurora-dsql-connectors/go/pgx/occretry

트랜잭션 쓰기에는 WithRetry를 사용합니다.

err := occretry.WithRetry(ctx, pool, occretry.DefaultConfig(), func(tx pgx.Tx) error { _, err := tx.Exec(ctx, "UPDATE accounts SET balance = balance - $1 WHERE id = $2", 100, fromID) if err != nil { return err } _, err = tx.Exec(ctx, "UPDATE accounts SET balance = balance + $1 WHERE id = $2", 100, toID) return err })

DDL 또는 단일 문에는 ExecWithRetry를 사용합니다.

err := occretry.ExecWithRetry(ctx, pool, occretry.DefaultConfig(), "CREATE TABLE IF NOT EXISTS users (id UUID PRIMARY KEY, name TEXT)")
중요

WithRetryBEGIN/COMMIT/ROLLBACK을 내부적으로 관리합니다. 콜백은 트랜잭션을 수신하며, 데이터베이스 작업만 포함하고 재시도해도 안전해야 합니다.

예제

보다 포괄적인 예제 및 사용 사례는 Go용 Aurora DSQL 커넥터 예제를 참조하세요.

예제 설명
example_preferred 권장: 동시 쿼리가 있는 연결 풀
transaction BEGIN/COMMIT/ROLLBACK을 사용한 트랜잭션 처리
occ_retry 지수 백오프와 OCC 충돌 처리
connection_string 구성에 연결 문자열 사용