.NET 커넥터를 사용하여 Aurora DSQL 클러스터에 연결
.NET용 Amazon Aurora DSQL 커넥터
이 커넥터는 토큰 생성, SSL 구성 및 연결 풀링을 처리하므로 애플리케이션 로직에 집중할 수 있습니다.
커넥터 정보
Amazon Aurora DSQL에는 기존 .NET PostgreSQL 드라이버가 기본적으로 지원하지 않는 시간 제한 토큰을 사용한 IAM 인증이 필요합니다. .NET용 Aurora DSQL 커넥터는 IAM 토큰 생성을 처리하는 Npgsql 위에 인증 계층을 추가하여 기존 Npgsql 워크플로를 변경하지 않고도 Aurora DSQL에 연결할 수 있도록 합니다.
Aurora DSQL 인증이란 무엇인가요?
Aurora DSQL에서 인증에는 다음이 포함됩니다.
-
IAM 인증: 모든 연결은 시간 제한 토큰이 있는 IAM 기반 인증을 사용합니다.
-
토큰 생성: 커넥터는 AWS 자격 증명을 사용하여 인증 토큰을 생성하며 이러한 토큰에는 구성 가능한 수명이 있습니다.
.NET용 Aurora DSQL 커넥터는 이러한 요구 사항을 이해하고 연결을 설정할 때 IAM 인증 토큰을 자동으로 생성합니다.
특성
-
자동 IAM 인증 - Aurora DSQL 토큰 생성 및 새로 고침 처리
-
Npgsql 기반 - .NET용 주요 PostgreSQL 드라이버 래핑
-
원활한 통합 - 기존 Npgsql 워크플로와 함께 작동
-
연결 풀링 - 최대 수명 적용으로
NpgsqlDataSource를 통한 지원 기본 제공 -
리전 자동 감지 - DSQL 클러스터 호스트 이름에서 AWS 리전 추출
-
AWS 자격 증명 지원: AWS 프로파일 및 사용자 지정 자격 증명 공급자 지원
-
OCC 재시도 - 지수 백오프를 사용하여 옵트인 낙관적 동시성 제어 재시도
-
SSL 적용 - 항상
verify-full모드 및 직접 TLS 협상과 함께 SSL 사용
애플리케이션 예시
전체 예제는 GitHub의 예제 애플리케이션
빠른 시작 설명서
요구 사항
-
.NET 8.0 이상
-
AWS CLI, 환경 변수 또는 IAM 역할을 통해 AWS 자격 증명 구성
설치
패키지를 프로젝트에 추가합니다.
dotnet add package Amazon.AuroraDsql.Npgsql
사용법
풀 연결
using Amazon.AuroraDsql.Npgsql; // Create a connection pool await using var ds = await AuroraDsql.CreateDataSourceAsync(new DsqlConfig { Host = "your-cluster.dsql.us-east-1.on.aws", OccMaxRetries = 3 }); // Read await using (var conn = await ds.OpenConnectionAsync()) { await using var cmd = conn.CreateCommand(); cmd.CommandText = "SELECT 'Hello, DSQL!'"; var greeting = await cmd.ExecuteScalarAsync(); Console.WriteLine(greeting); } // Transactional write with OCC retry await ds.WithTransactionRetryAsync(async conn => { await using var cmd = conn.CreateCommand(); cmd.CommandText = "INSERT INTO users (id, name) VALUES (gen_random_uuid(), @name)"; cmd.Parameters.AddWithValue("name", "Alice"); await cmd.ExecuteNonQueryAsync(); });
단일 연결
간단한 스크립트의 경우 또는 연결 풀링이 필요하지 않은 경우:
await using var conn = await AuroraDsql.ConnectAsync(new DsqlConfig { Host = "your-cluster.dsql.us-east-1.on.aws" }); await using var cmd = conn.CreateCommand("SELECT 1"); await cmd.ExecuteScalarAsync();
OCC 재시도
Aurora DSQL은 낙관적 동시성 제어(OCC)를 사용합니다. 두 개의 트랜잭션이 동일한 데이터를 수정할 경우, 먼저 커밋된 트랜잭션이 우선권을 가지며 두 번째 트랜잭션은 OCC 오류를 수신합니다.
OCC 재시도가 옵트인되었습니다. 지수 백오프 및 지터를 사용하여 자동 재시도를 활성화하려면 구성에서 OccMaxRetries를 설정합니다. 트랜잭션 쓰기에는 WithTransactionRetryAsync를 사용합니다.
await ds.WithTransactionRetryAsync(async conn => { await using var cmd = conn.CreateCommand(); cmd.CommandText = "UPDATE accounts SET balance = balance - 100 WHERE id = @from"; cmd.Parameters.AddWithValue("from", fromId); await cmd.ExecuteNonQueryAsync(); cmd.CommandText = "UPDATE accounts SET balance = balance + 100 WHERE id = @to"; cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("to", toId); await cmd.ExecuteNonQueryAsync(); });
DDL 또는 단일 문에는 ExecWithRetryAsync를 사용합니다.
await ds.ExecWithRetryAsync("CREATE TABLE IF NOT EXISTS users (id UUID PRIMARY KEY, name TEXT)");
중요
WithTransactionRetryAsync는 BEGIN/COMMIT/ROLLBACK을 내부적으로 관리하고 각 시도에 대해 새 연결을 엽니다. 콜백은 데이터베이스 작업만 포함하고 재시도해도 안전해야 합니다.
구성 옵션
커넥터는 region 및 profile 쿼리 파라미터가 있는 postgres:// 및 postgresql:// 연결 문자열도 허용합니다.
| Field | Type | 기본값 | 설명 |
|---|---|---|---|
Host |
string |
(필수) | 클러스터 엔드포인트 또는 26자 클러스터 ID |
Region |
string? |
(자동 탐지됨) | AWS 리전, Host가 클러스터 ID인 경우 필수 |
User |
string |
"admin" |
데이터베이스 사용자 |
Database |
string |
"postgres" |
데이터베이스 이름 |
Port |
int |
5432 |
데이터베이스 포트 |
Profile |
string? |
null |
자격 증명의 AWS 프로파일 이름 |
CustomCredentialsProvider |
AWSCredentials? |
null |
사용자 지정 AWS 자격 증명 공급자 |
TokenDurationSecs |
int? |
null(SDK 기본값, 900초) |
토큰 유효 기간(초 단위) |
OccMaxRetries |
int? |
null(비활성) |
데이터 소스의 재시도 메서드에 대한 기본 최대 OCC 재시도 횟수 |
OrmPrefix |
string? |
null |
application_name 앞에 추가되는 ORM 접두사 |
LoggerFactory |
ILoggerFactory? |
null |
재시도 경고 및 진단을 위한 로거 팩토리 |
ConfigureConnectionString |
Action<NpgsqlConnectionStringBuilder>? |
null |
풀 설정을 재정의하거나 추가 Npgsql 연결 문자열 속성을 설정하는 콜백입니다. SSL 및 Enlist는 보안 불변수이며 재정의할 수 없습니다. |
Authentication
커넥터는 AWS 자격 증명을 사용해 토큰을 생성하여 Aurora DSQL 인증을 자동으로 처리합니다. AWS 리전을 제공하지 않으면 커넥터가 호스트 이름에서 리전을 구문 분석합니다.
Aurora DSQL의 인증에 대한 자세한 내용은 Aurora DSQL에 대한 인증 및 권한 부여 섹션을 참조하세요.
관리자와 일반 사용자
-
"admin"이라는 사용자는 관리자 인증 토큰을 자동으로 사용
-
다른 모든 사용자는 일반 인증 토큰을 사용합니다.
-
커넥터는 각 연결에 대해 동적으로 토큰을 생성합니다.