使用 Ruby 连接器连接到 Aurora DSQL 集群 - Amazon Aurora DSQL

使用 Ruby 连接器连接到 Aurora DSQL 集群

Aurora DSQL Connector for Ruby 是一款基于 pg 构建的 Ruby 连接器,它集成了 IAM 身份验证功能,用于将 Ruby 应用程序连接到 Amazon Aurora DSQL 集群。

此连接器处理令牌生成、SSL 配置和连接池,因此您可以专注于应用程序逻辑。

关于连接器

Amazon Aurora DSQL 要求使用 IAM 身份验证以及限时令牌,而现有 Ruby PostgreSQL 驱动程序并不原生支持这种方法。适用于 Ruby 的 Aurora DSQL 连接器在 pg gem 之上添加一个身份验证层来处理 IAM 令牌生成,使您无需更改现有 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 提供内置支持,具有 max_lifetime 强制执行

  • 区域自动检测:从 Aurora 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&...]

支持的查询参数:regionprofiletokenDurationSecs

# 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 重试为选择加入的。当创建池时设置 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

配置选项

字段 类型 默认值 说明
host 字符串 (必需) 集群端点或集群 ID
region 字符串 (自动检测) AWS 区域;如果主机是集群 ID,则为必需
用户 字符串 “admin” 数据库用户
database 字符串 “postgres” 数据库名称
端口 整数 5432 数据库端口
配置文件 字符串 nil 凭证的 AWS 配置文件名称
token_duration 整数 900(15 分钟) 令牌有效期以秒为单位(支持的最长时间:1 周,默认值:15 分钟)
credentials_provider Aws::Credentials nil 自定义凭证提供商
max_lifetime 整数 3300(55 分钟) 最大连接生命周期,以秒为单位
application_name 字符串 nil application_name 的 ORM 前缀
日志记录程序 记录器 nil OCC 重试警告的记录器
occ_max_retries 整数 nil(已禁用) pool.with 上的 OCC 最大重试次数;设置后启用重试

create_pool 还接受带有选项哈希值的 pool: 关键字,您可以直接将其传递给 ConnectionPool.new。如果忽略 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”的用户会自动使用管理员身份验证令牌

  • 所有其他用户都使用普通身份验证令牌

  • 该连接器为每个连接动态生成令牌