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

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

Ruby용 Aurora DSQL 커넥터는 Ruby 애플리케이션을 Amazon Aurora DSQL 클러스터에 연결하기 위한 IAM 인증을 통합하는 pg를 기반으로 구축된 .NET 커넥터입니다.

이 커넥터는 토큰 생성, SSL 구성 및 연결 풀링을 처리하므로 애플리케이션 로직에 집중할 수 있습니다.

커넥터 정보

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

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

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

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

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

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

특성

  • 자동 IAM 인증 - Aurora DSQL 토큰 생성 및 새로 고침 처리

  • pg 기반 - 널리 사용되는 Ruby용 PostgreSQL gem 래핑

  • 원활한 통합 - 기존 pg gem 워크플로와 함께 작동

  • 연결 풀링 - 최대 수명 적용으로 connection_pool gem을 통한 지원 기본 제공

  • 리전 자동 감지 - DSQL 클러스터 호스트 이름에서 AWS 리전 추출

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

  • OCC 재시도 - 지수 백오프를 사용하여 옵트인 낙관적 동시성 제어 재시도

애플리케이션 예시

전체 예제는 GitHub의 예제 애플리케이션을 참조하세요.

빠른 시작 설명서

요구 사항

설치

Gemfile에 추가합니다.

gem "aurora-dsql-ruby-pg"

또는 직접 설치합니다.

gem install aurora-dsql-ruby-pg

사용법

풀 연결

require "aurora_dsql_pg" # Create a connection pool with OCC retry enabled pool = AuroraDsql::Pg.create_pool( host: "your-cluster.dsql.us-east-1.on.aws", occ_max_retries: 3 ) # Read pool.with do |conn| result = conn.exec("SELECT 'Hello, DSQL!'") puts result[0]["?column?"] end # Write — you must wrap writes in a transaction pool.with do |conn| conn.transaction do conn.exec_params("INSERT INTO users (id, name) VALUES (gen_random_uuid(), $1)", ["Alice"]) end end pool.shutdown

단일 연결

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

conn = AuroraDsql::Pg.connect(host: "your-cluster.dsql.us-east-1.on.aws") conn.exec("SELECT 1") conn.close

고급 사용

호스트 구성

커넥터는 전체 클러스터 엔드포인트(리전 자동 감지)와 클러스터 ID(리전 필수)를 모두 지원합니다.

# Full endpoint (region auto-detected) pool = AuroraDsql::Pg.create_pool( host: "your-cluster.dsql.us-east-1.on.aws" ) # Cluster ID (region required) pool = AuroraDsql::Pg.create_pool( host: "your-cluster-id", region: "us-east-1" )

AWS 프로필

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

pool = AuroraDsql::Pg.create_pool( host: "your-cluster.dsql.us-east-1.on.aws", profile: "production" )

연결 문자열 형식

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

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

지원되는 쿼리 파라미터: region, profile, tokenDurationSecs.

# Full endpoint with profile pool = AuroraDsql::Pg.create_pool( "postgres://admin@cluster.dsql.us-east-1.on.aws/postgres?profile=dev" )

OCC 재시도

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

OCC 재시도가 옵트인되었습니다. pool.with에서 지수 백오프 및 지터를 사용하여 자동 재시도를 활성화하려면 풀을 생성할 때 occ_max_retries를 설정합니다.

pool = AuroraDsql::Pg.create_pool( host: "your-cluster.dsql.us-east-1.on.aws", occ_max_retries: 3 ) pool.with do |conn| conn.transaction do conn.exec_params("UPDATE accounts SET balance = balance - $1 WHERE id = $2", [100, from_id]) conn.exec_params("UPDATE accounts SET balance = balance + $1 WHERE id = $2", [100, to_id]) end end
주의

pool.with는 블록을 트랜잭션에 자동으로 래핑하지 않습니다. 쓰기 작업을 위해 conn.transaction을 직접적으로 호출해야 합니다. OCC 충돌 시 커넥터는 전체 블록을 다시 실행하므로 데이터베이스 작업만 포함하고 재시도해도 안전해야 합니다.

개별 직접 호출에 대한 재시도를 건너뛰려면 retry_occ: false를 전달합니다.

pool.with(retry_occ: false) do |conn| conn.exec("SELECT 1") end

구성 옵션

Field Type 기본값 설명
host 문자열 (필수) 클러스터 엔드포인트 또는 클러스터 ID
region 문자열 (자동 탐지됨) AWS 리전, 호스트가 클러스터 ID인 경우 필수
user 문자열 "admin" 데이터베이스 사용자
데이터베이스 문자열 "postgres" 데이터베이스 이름
포트 Integer 5432 데이터베이스 포트
profile 문자열 nil 자격 증명의 AWS 프로파일 이름
token_duration Integer 900(15분) 초 단위의 토큰 유효 기간(최대 허용: 1주, 기본값: 15분)
credentials_provider Aws::Credentials nil 사용자 지정 자격 증명 공급자
max_lifetime Integer 3300(55분) 최대 연결 수명(초 단위)
application_name 문자열 nil application_name의 ORM 접두사
로거 Logger nil OCC 재시도 경고에 대한 로거
occ_max_retries Integer nil(비활성화됨) pool.with에서 최대 OCC 재시도 횟수, 설정 시 재시도 활성화

create_poolConnectionPool.new에 직접 전달하는 옵션 해시가 있는 pool: 키워드도 허용합니다. pool:을 생략하는 경우 커넥터의 기본값은 {size: 5, timeout: 5}입니다. 제공하는 키는 특정 기본값만 재정의합니다.

pool = AuroraDsql::Pg.create_pool( host: "your-cluster.dsql.us-east-1.on.aws", pool: { size: 10, timeout: 10 } )

Authentication

커넥터는 AWS 자격 증명을 사용해 토큰을 생성하여 Aurora DSQL 인증을 자동으로 처리합니다. AWS 리전을 제공하지 않으면 커넥터가 호스트 이름에서 리전을 구문 분석합니다.

Aurora DSQL의 인증에 대한 자세한 내용은 Aurora DSQL에 대한 인증 및 권한 부여 섹션을 참조하세요.

관리자와 일반 사용자

  • "admin"이라는 사용자는 관리자 인증 토큰을 자동으로 사용

  • 다른 모든 사용자는 일반 인증 토큰을 사용합니다.

  • 커넥터는 각 연결에 대해 동적으로 토큰을 생성합니다.