View a markdown version of this page

适用于 PHP PDO_PGSQL 的 Aurora DSQL 连接器 - Amazon Aurora DSQL

适用于 PHP PDO_PGSQL 的 Aurora DSQL 连接器

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

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

关于连接器

适用于 PHP 的 Aurora DSQL 连接器在 PDO_PGSQL 之上添加一个身份验证层来处理 IAM 令牌生成,使您无需更改现有 PDO 工作流程即可连接到 Aurora DSQL。Amazon Aurora DSQL 要求使用 IAM 身份验证以及限时令牌,而连接器自动为您管理令牌生成。

什么是 Aurora DSQL 身份验证?

在 Aurora DSQL 中,身份验证包括:

  • IAM 身份验证:所有连接都使用基于 IAM 的身份验证和限时令牌

  • 令牌生成:连接器使用 AWS 凭证生成身份验证令牌,并且这些令牌具有可配置的生命周期

适用于 PHP 的 Aurora DSQL 连接器了解这些要求,并在建立连接时自动生成 IAM 身份验证令牌。

功能

  • 自动 IAM 身份验证:处理 Aurora DSQL 令牌生成与刷新

  • PDO_PGSQL 之上构建:封装了适用于 PHP 的标准 PostgreSQL 扩展

  • 无缝集成:可与现有的 PDO 工作流程结合使用

  • SSL 强制执行:始终在 verify-full 模式和直接 TLS 协商中使用 SSL

  • 区域自动检测:从 Aurora DSQL 集群主机名中提取 AWS 区域

  • AWS 凭证支持:支持 AWS 配置文件和自定义凭证提供商

  • OCC 重试:选择加入乐观并发控制重试,具有指数回退和抖动功能

  • PSR-3 日志记录:兼容日志记录,用于重试诊断

示例应用程序

有关完整的示例,请参阅 GitHub 上的示例应用程序

快速入门指南

要求

安装

将程序包添加到您的项目:

composer require awslabs/aurora-dsql-pdo-pgsql

用法

基于配置的连接

<?php require_once 'vendor/autoload.php'; use Aws\AuroraDsql\PdoPgsql\AuroraDsql; use Aws\AuroraDsql\PdoPgsql\DsqlConfig; $config = new DsqlConfig( host: 'your-cluster.dsql.us-east-1.on.aws', occMaxRetries: 3 ); $pdo = AuroraDsql::connect($config); // Read $stmt = $pdo->query('SELECT 1 AS result'); $row = $stmt->fetch(PDO::FETCH_ASSOC); echo "Connected: {$row['result']}\n"; // Transactional write with automatic OCC retry $id = $pdo->transaction(function (PDO $conn): string { $stmt = $conn->prepare('INSERT INTO users (name) VALUES (?) RETURNING id'); $stmt->execute(['Alice']); return $stmt->fetchColumn(); });

连接字符串格式

对于简单的脚本或者当您偏好连接字符串语法时,连接器支持带有特定于 Aurora DSQL 的查询参数的 postgres://postgresql:// 连接字符串:

$pdo = AuroraDsql::connectFromDsn( 'postgres://admin@your-cluster.dsql.us-east-1.on.aws/postgres?region=us-east-1' );

支持的查询参数:regionprofiletokenDurationSecsormPrefix

OCC 重试

Aurora DSQL 使用乐观并发控制(OCC)。当两个事务修改相同的数据时,提交的第一个事务获胜,第二个事务收到 OCC 错误。

OCC 重试为选择加入的。在配置中设置 occMaxRetries,以启用带指数回退和抖动的自动重试功能:

$config = new DsqlConfig( host: 'your-cluster.dsql.us-east-1.on.aws', occMaxRetries: 3 ); $pdo = AuroraDsql::connect($config); // Single statements are automatically retried via exec() $pdo->exec("CREATE INDEX ASYNC ON users (email)"); // Multi-statement transactions are retried via transaction() $pdo->transaction(function (PDO $conn) { $conn->exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1"); $conn->exec("UPDATE accounts SET balance = balance + 100 WHERE id = 2"); });
重要

transaction() 在内部管理 beginTransaction()/commit()/rollBack()。您的回调应仅包含数据库操作,并且可以安全地重试。

配置选项

连接器还接受带有配置查询参数的 postgres://postgresql:// 连接字符串。支持的查询参数:regionprofiletokenDurationSecsormPrefix

字段 类型 默认值 说明
host string (必需) 集群端点或 26 个字符集群 ID
region ?string null(自动检测) AWS 区域;如果 host 是集群 ID,则为必需
user string "admin" 数据库用户
database string "postgres" 数据库名称
port int 5432 数据库端口
profile ?string null 凭证的 AWS 配置文件名称
credentialsProvider ?\Closure null 自定义 AWS 凭证提供商
tokenDurationSecs int 900(15 分钟) 令牌有效期,以秒为单位
occMaxRetries ?int null(已禁用) exec()transaction() 的默认最大 OCC 重试次数。
ormPrefix ?string null 附加在 application_name 之前的 ORM 前缀
logger ?LoggerInterface null 用于重试警告和诊断的 PSR-3 记录器

身份验证

该连接器通过使用 AWS 凭证生成令牌来自动处理 Aurora DSQL 身份验证。如果您未提供 AWS 区域,则连接器会从主机名中解析该区域。

有关 Aurora DSQL 中的身份验证的更多信息,请参阅 Aurora DSQL 的身份验证和授权

管理员用户与普通用户

  • 名为“admin”的用户会自动使用管理员身份验证令牌

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

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