Ruby コネクタを使用した Aurora DSQL クラスターへの接続
Ruby 用 Aurora DSQL コネクタ
このコネクタは、トークン生成、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 ワークフローと連携
-
接続プーリング - max_lifetime の適用による
connection_poolgem を介した組み込みサポート -
リージョンの自動検出 - Aurora DSQL クラスターホスト名から AWS リージョンを抽出
-
AWS 認証情報のサポート: AWS プロファイルとカスタム認証情報プロバイダーをサポート
-
OCC 再試行 - エクスポネンシャルバックオフを使用したオプトインのオプティミスティック同時実行制御の再試行
サンプルアプリケーション
詳細な例については、GitHub のサンプルアプリケーション
クイックスタートガイド
要件
-
Ruby 3.1 以降
-
AWS 認証情報の設定 (AWS CLI、環境変数、または IAM ロール経由)。
インストール
Gemfile に追加:
gem "aurora-dsql-ruby-pg"
または直接インストール:
gem install aurora-dsql-ruby-pg
Usage
プール接続
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) を使用します。2 つのトランザクションが同じデータを変更する場合、最初のトランザクションはコミットに成功し、2 番目のトランザクションは OCC エラーを受け取ります。
OCC 再試行はオプトインです。プールの作成時に occ_max_retries を設定し、pool.with でエクスポネンシャルバックオフとジッターによる自動再試行を有効にします。
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
設定オプション
| フィールド | タイプ | デフォルト | 説明 |
|---|---|---|---|
| ホスト | String | (必須) | クラスターエンドポイントまたはクラスター ID |
| リージョン | String | (自動検出) | AWS リージョン (host がクラスター ID の場合は必須) |
| ユーザー | String | 「admin」 | データベースユーザー |
| データベース | String | 「postgres」 | データベース名 |
| ポート | 整数 | 5432 | データベースポート |
| profile | String | nil | 認証情報の AWS プロファイル名 |
| token_duration | 整数 | 900 (15 分) | トークンの有効期間 (秒) (最大許容時間: 1 週間、デフォルト: 15 分) |
| credentials_provider | Aws::Credentials | nil | カスタム認証情報プロバイダー |
| max_lifetime | 整数 | 3300 (55 分) | 最大接続有効期間 (秒単位) |
| application_name | String | nil | application_name の ORM プレフィックス |
| ロガー | ロガー | nil | OCC 再試行警告のロガー |
| occ_max_retries | 整数 | nil (無効) | pool.with での最大 OCC 再試行回数。設定すると再試行が有効化 |
create_pool は、ConnectionPool.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 } )
認証
コネクタは、AWS 認証情報を使用してトークンを生成することで、Aurora DSQL 認証を自動的に処理します。AWS リージョンを指定しない場合、コネクタはホスト名からリージョンを解析します。
Aurora DSQL の認証の詳細については、「Aurora DSQL の認証および認可」を参照してください。
管理者ユーザーと通常のユーザー
-
「admin」という名前のユーザーは、管理者認証トークンを自動的に使用します。
-
他のすべてのユーザーは通常の認証トークンを使用します。
-
コネクタは、接続ごとにトークンを動的に生成します。