Amazon Aurora
Aurora 用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用适用于 Aurora Serverless 的数据 API

您可以使用内置数据 API 访问 Aurora Serverless 数据库集群。利用此 API,您可以使用基于 Web 服务的应用程序(包括 AWS Lambda、AWS AppSync 和 AWS Cloud9)访问 Aurora Serverless。有关这些应用程序的更多信息,请参阅 AWS LambdaAWS AppSyncAWS Cloud9 中的详细信息。

数据 API 不需要与数据库集群的持久连接。相反,它提供了安全 HTTP 终端节点以及与 AWS 开发工具包的集成。您可以使用终端节点运行 SQL 语句,而无需管理连接。对数据 API 的所有调用都是同步的。默认情况下,如果未完成处理,调用会在 45 秒后超时并终止。调用超时后,您可以使用 continueAfterTimeout 参数继续运行 SQL 语句。

API 使用存储在 AWS Secrets Manager 中的数据库凭证,因此,您无需在 API 调用中传递凭证。API 还提供了一种更安全的 AWS Lambda 使用方式。通过此方式,您无需配置 Lambda 函数来访问 Virtual Private Cloud (VPC) 中的资源,即可访问数据库集群。有关 AWS Secrets Manager 的更多信息,请参阅 AWS Secrets Manager 用户指南 中的什么是 AWS Secrets Manager?

注意

在启用数据 API 时,您也可以使用 Aurora Serverless 的查询编辑器。有关更多信息,请参阅 使用 Aurora Serverless 的查询编辑器

数据 API 的可用性

数据 API 仅适用于以下 Aurora 无服务器数据库集群:

  • 与 MySQL 版本 5.6 兼容的 Aurora

  • Aurora 与 PostgreSQL 版本 10.7 的兼容性

下表显示了目前数据 API 可用于 Aurora Serverless 的 AWS 区域。使用 HTTPS 协议访问这些 AWS 区域中的数据 API。

区域 链接
美国东部(弗吉尼亚北部) rds-data.us-east-1.amazonaws.com
美国东部(俄亥俄州) rds-data.us-east-2.amazonaws.com
美国西部(俄勒冈) rds-data.us-west-2.amazonaws.com
欧洲(爱尔兰) rds-data.eu-west-1.amazonaws.com
亚太区域(东京) rds-data.ap-northeast-1.amazonaws.com

授予对数据 API 的访问权限

用户必须获得授权才能访问数据 API。您可以通过向用户添加 AmazonRDSDataFullAccess 策略(预定义的 AWS Identity and Access Management (IAM) 策略),授予该用户访问数据 API 的权限。

您还可以创建 IAM 策略,授予对数据 API 的访问权限。在创建策略后,将该策略添加到需要访问数据 API 的每个用户。

以下策略提供用户访问数据 API 所需的最低权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "SecretsManagerDbCredentialsAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:PutResourcePolicy", "secretsmanager:PutSecretValue", "secretsmanager:DeleteSecret", "secretsmanager:DescribeSecret", "secretsmanager:TagResource" ], "Resource": "arn:aws:secretsmanager:*:*:secret:rds-db-credentials/*" }, { "Sid": "RDSDataServiceAccess", "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:ListSecrets", "secretsmanager:GetRandomPassword", "tag:GetResources", "rds-data:BatchExecuteStatement", "rds-data:BeginTransaction", "rds-data:CommitTransaction", "rds-data:ExecuteStatement", "rds-data:RollbackTransaction" ], "Resource": "*" } ] }

有关创建 IAM 策略的信息,请参阅 IAM 用户指南 中的创建 IAM 策略

有关将 IAM 策略添加到用户的信息,请参阅 IAM 用户指南 中的添加和删除 IAM 身份权限

启用数据 API

要使用数据 API,请为 Aurora Serverless 数据库集群启用它。您可以在创建或修改数据库集群时启用数据 API。

控制台

在创建或修改 Aurora Serverless 数据库集群时,您可以使用 RDS 控制台启用数据 API。在创建 Aurora Serverless 数据库集群时,您可以在 RDS 控制台的连接部分中启用数据 API 以实现该目的。在修改 Aurora Serverless 数据库集群时,您可以在 RDS 控制台的网络与安全部分中启用数据 API 以实现该目的。

以下屏幕截图显示了在修改 Aurora Serverless 数据库集群时启用的数据 API


                            使用控制台为 Aurora Serverless 数据库集群启用数据 API

有关说明,请参阅创建 Aurora Serverless 数据库集群修改 Aurora Serverless 数据库集群

AWS CLI

如果使用 AWS CLI 命令创建或修改 Aurora Serverless 数据库集群,将在指定 -enable-http-endpoint 时启用数据 API。

您可以使用以下 AWS CLI 命令指定 -enable-http-endpoint

以下示例修改 sample-cluster 以启用数据 API。

针对 Linux、OS X 或 Unix:

aws rds modify-db-cluster \ --db-cluster-identifier sample-cluster \ --enable-http-endpoint

对于 Windows:

aws rds modify-db-cluster ^ --db-cluster-identifier sample-cluster ^ --enable-http-endpoint
RDS API

在使用 Amazon RDS API 操作创建或修改 Aurora Serverless 数据库集群时,您可以将 EnableHttpEndpoint 值设置为 true 以启用数据 API。

您可以使用以下 API 操作设置 EnableHttpEndpoint 值:

在 AWS Secrets Manager 中存储数据库凭证

在调用数据 API 时,您可以使用 AWS Secrets Manager 中的密钥传递 Aurora Serverless 数据库集群的凭证。要通过此方式传递凭证,您需要指定密钥的名称或密钥的 Amazon 资源名称 (ARN)。

在密钥中存储数据库集群凭证

  1. 使用 AWS Secrets Manager 创建包含 Aurora 数据库集群的凭证的密钥。

    有关说明,请参阅 AWS Secrets Manager 用户指南 中的创建基本密钥

  2. 使用 AWS Secrets Manager 控制台查看创建的密钥的详细信息,或运行 aws secretsmanager describe-secret AWS CLI 命令。

    记下密钥的名称和 ARN。您可以将其用于对数据 API 的调用中。

调用数据 API

在为 Aurora Serverless 数据库集群启用数据 API 后,您可以调用数据 API 或 AWS CLI 以对数据库集群运行 SQL 语句。Data API 支持 AWS 开发工具包所支持的编程语言。有关更多信息,请参阅用于在 AWS 上进行构建的工具

数据 API 提供了以下操作执行 SQL 语句。

Data API 操作

AWS CLI 命令

说明

ExecuteStatement

aws rds-data execute-statement

对数据库运行 SQL 语句。

BatchExecuteStatement

aws rds-data batch-execute-statement

对数据数组运行批处理 SQL 语句,以执行批量更新和插入操作。您可以使用参数集数组运行 DML 语句。相比单个插入和更新语句,批处理 SQL 语句可提供显著的性能改进。

您可以运行这两个操作以单独执行 SQL 语句,也可以在事务中运行这些操作。数据 API 提供了以下操作来支持事务。

Data API 操作

AWS CLI 命令

说明

BeginTransaction

aws rds-data begin-transaction

开始 SQL 事务。

CommitTransaction

aws rds-data commit-transaction

结束 SQL 事务并提交更改。

RollbackTransaction

aws rds-data rollback-transaction

执行事务回滚。

执行 SQL 语句和支持事务的操作具有以下常用数据 API 参数和 AWS CLI 选项。某些操作支持其他参数或选项。

Data API 操作参数

AWS CLI 命令选项

是否必需

描述

resourceArn

--resource-arn

Aurora Serverless 数据库集群的 Amazon 资源名称 (ARN)。

secretArn

--secret-arn

允许访问数据库集群的密钥的名称或 ARN。

您可以在对 ExecuteStatementBatchExecuteStatement 的数据 API 调用中使用参数,或在运行 AWS CLI 命令 execute-statementbatch-execute-statement 时使用。要使用参数,请在 SqlParameter 数据类型中指定名称/值对。您可以使用 Field 数据类型指定值。下表将 Java 数据库连接 (JDBC) 数据类型映射到您在数据 API 调用中指定的数据类型。

JDBC 数据类型

数据 API 数据类型

INTEGER, TINYINT, SMALLINT, BIGINT

LONG

FLOAT, REAL, DOUBLE

DOUBLE

DECIMAL

STRING

BOOLEAN, BIT

BOOLEAN

BLOB, BINARY, LONGVARBINARY, VARBINARY

BLOB

CLOB

STRING

其他类型(包括与日期和时间有关的类型)

STRING

注意

这些示例并不详尽。

使用 AWS CLI 调用数据 API

您可以使用 AWS Command Line Interface (AWS CLI) 调用数据 API。

以下示例将 AWS CLI 用于数据 API。有关更多信息,请参阅数据 API 的 AWS Command Line Interface 参考

在每个示例中,将数据库集群 ARN 替换为您的 Aurora Serverless 数据库集群。另外,将密钥 ARN 替换为允许访问数据库集群的 AWS Secrets Manager 中的密钥的 ARN。

注意

AWS CLI 可以使用 JSON 设置响应格式。

启动 SQL 事务

您可以使用 aws rds-data begin-transaction CLI 命令启动 SQL 事务。调用会返回事务标识符。

重要

如果三分钟之内没有任何调用使用其事务 ID,事务将超时。如果事务在提交之前超时,则会自动回滚。

事务内的 DDL 语句会导致隐式提交。我们建议您在单独的 execute-statement 命令中,采用 --continue-after-timeout 选项运行每个 DDL 语句。

除常用选项之外,还可指定以下选项:

  • --database(可选)– 数据库的名称。

例如,以下 CLI 命令开始 SQL 事务。

针对 Linux、OS X 或 Unix:

aws rds-data begin-transaction --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"

对于 Windows:

aws rds-data begin-transaction --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" ^ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"

以下为响应示例。

{ "transactionId": "ABC1234567890xyz" }

运行 SQL 语句

您可以使用 aws rds-data execute-statement CLI 命令运行 SQL 语句。

您可以采用 --transaction-id 选项指定事务标识符,从而在事务中运行 SQL 语句。您可以使用 aws rds-data begin-transaction CLI 命令开始事务。您可以使用 aws rds-data commit-transaction CLI 命令结束并提交事务。

重要

如果未指定 --transaction-id 选项,则调用产生的更改将自动提交。

除常用选项之外,还可指定以下选项:

  • --sql(必需)– 在数据库集群上运行的 SQL 语句。

  • --transaction-id(可选)– 使用 begin-transaction CLI 命令开始的事务的标识符。指定您希望包含 SQL 语句的事务的事务 ID。

  • --parameters(可选)– SQL 语句的参数。

  • --include-result-metadata | --no-include-result-metadata(可选)– 指定是否在结果中包含元数据的值。默认值为 --no-include-result-metadata

  • --database(可选)– 数据库的名称。

  • --continue-after-timeout | --no-continue-after-timeout(可选)– 指定在调用超时后是否继续运行语句的值。默认值为 --no-continue-after-timeout

    对于数据定义语言 (DDL) 语句,我们建议在调用超时后继续运行语句,以避免错误以及数据结构损坏的可能性。

数据库集群为调用返回响应。

注意

响应大小限制为 1 MB 或 1,000 条记录。如果调用返回的响应数据超过 1 MB 或 1,000 条记录,则调用将终止。

例如,以下 CLI 命令运行单个 SQL 语句,并在结果中省略元数据(默认设置)。

针对 Linux、OS X 或 Unix:

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" \ --sql "select * from mytable"

对于 Windows:

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" ^ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" ^ --sql "select * from mytable"

以下为响应示例。

{ "numberOfRecordsUpdated": 0, "records": [ [ { "longValue": 1 }, { "stringValue": "ValueOne" } ], [ { "longValue": 2 }, { "stringValue": "ValueTwo" } ], [ { "longValue": 3 }, { "stringValue": "ValueThree" } ] ] }

以下 CLI 命令通过指定 --transaction-id 选项,在事务中运行单个 SQL 语句。

针对 Linux、OS X 或 Unix:

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" \ --sql "update mytable set quantity=5 where id=201" --transaction-id "ABC1234567890xyz"

对于 Windows:

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" ^ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" ^ --sql "update mytable set quantity=5 where id=201" --transaction-id "ABC1234567890xyz"

以下为响应示例。

{ "numberOfRecordsUpdated": 1 }

以下 CLI 命令使用参数运行单个 SQL 语句。

针对 Linux、OS X 或 Unix:

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" \ --sql "insert into mytable values (:id, :val)" --parameters "[{\"name\": \"id\", \"value\": {\"longValue\": 1}},{\"name\": \"val\", \"value\": {\"stringValue\": \"value1\"}}]"

对于 Windows:

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" ^ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" ^ --sql "insert into mytable values (:id, :val)" --parameters "[{\"name\": \"id\", \"value\": {\"longValue\": 1}},{\"name\": \"val\", \"value\": {\"stringValue\": \"value1\"}}]"

以下为响应示例。

{ "numberOfRecordsUpdated": 1 }

以下 CLI 命令运行数据定义语言 (DDL) SQL 语句。DDL 语句将列 job 重命名为列 role

重要

对于 DDL 语句,我们建议在调用超时后继续运行语句。如果 DDL 语句在结束运行之前终止,则可能导致错误以及数据结构损坏。要在调用超时后继续运行语句,请指定 --continue-after-timeout 选项。

针对 Linux、OS X 或 Unix:

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" \ --sql "alter table mytable change column job role varchar(100)" --continue-after-timeout

对于 Windows:

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" ^ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" ^ --sql "alter table mytable change column job role varchar(100)" --continue-after-timeout

以下为响应示例。

{ "generatedFields": [], "numberOfRecordsUpdated": 0 }

注意

Aurora PostgreSQL 不支持 generatedFields 数据。若要获取生成字段的值,请使用 RETURNING 子句。有关更多信息,请参阅 PostgreSQL 文档中的从已修改的行返回数据

对数据数组运行批处理 SQL 语句

您可以通过使用 aws rds-data batch-execute-statement CLI 命令,对数据数组运行批处理 SQL 语句。您可以使用该命令执行批量导入或更新操作。

您可以采用 --transaction-id 选项指定事务标识符,从而在事务中运行 SQL 语句。您可以使用 aws rds-data begin-transaction CLI 命令开始事务。您可以使用 aws rds-data commit-transaction CLI 命令结束并提交事务。

重要

如果未指定 --transaction-id 选项,则调用产生的更改将自动提交。

除常用选项之外,还可指定以下选项:

  • --sql(必需)– 在数据库集群上运行的 SQL 语句。

  • --transaction-id(可选)– 使用 begin-transaction CLI 命令开始的事务的标识符。指定您希望包含 SQL 语句的事务的事务 ID。

  • --parameter-set(可选)– 批处理操作的参数集。

  • --database(可选)– 数据库的名称。

数据库集群返回调用的响应。

注意

响应大小限制为 1 MB 或 1,000 条记录。如果调用返回的响应数据超过 1 MB 或 1,000 条记录,则调用将终止。

例如,以下 CLI 命令采用参数集对数据数组运行批处理 SQL 语句。

针对 Linux、OS X 或 Unix:

aws rds-data batch-execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" \ --sql "insert into mytable values (:id, :val)" \ --parameter-sets "[[{\"name\": \"id\", \"value\": {\"longValue\": 1}},{\"name\": \"val\", \"value\": {\"stringValue\": \"ValueOne\"}}], [{\"name\": \"id\", \"value\": {\"longValue\": 2}},{\"name\": \"val\", \"value\": {\"stringValue\": \"ValueTwo\"}}], [{\"name\": \"id\", \"value\": {\"longValue\": 3}},{\"name\": \"val\", \"value\": {\"stringValue\": \"ValueThree\"}}]]"

对于 Windows:

aws rds-data batch-execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" ^ --database "mydb" --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" ^ --sql "insert into mytable values (:id, :val)" ^ --parameter-sets "[[{\"name\": \"id\", \"value\": {\"longValue\": 1}},{\"name\": \"val\", \"value\": {\"stringValue\": \"ValueOne\"}}], [{\"name\": \"id\", \"value\": {\"longValue\": 2}},{\"name\": \"val\", \"value\": {\"stringValue\": \"ValueTwo\"}}], [{\"name\": \"id\", \"value\": {\"longValue\": 3}},{\"name\": \"val\", \"value\": {\"stringValue\": \"ValueThree\"}}]]"

注意

--parameter-sets 选项中请勿包括换行符。

提交 SQL 事务

通过使用 aws rds-data commit-transaction CLI 命令,您可以结束使用 aws rds-data begin-transaction 开始的 SQL 事务并提交更改。

除常用选项之外,还可指定以下选项:

  • --transaction-id(必需)– 使用 begin-transaction CLI 命令开始的事务的标识符。指定您希望结束并提交的事务的事务 ID。

例如,以下 CLI 命令结束 SQL 事务并提交更改。

针对 Linux、OS X 或 Unix:

aws rds-data commit-transaction --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \ --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" \ --transaction-id "ABC1234567890xyz"

对于 Windows:

aws rds-data commit-transaction --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" ^ --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" ^ --transaction-id "ABC1234567890xyz"

以下为响应示例。

{ "transactionStatus": "Transaction Committed" }

回滚 SQL 事务

通过使用 aws rds-data rollback-transaction CLI 命令,您可以回滚使用 aws rds-data begin-transaction 开始的 SQL 事务。回滚事务会取消其更改。

重要

如果事务 ID 已过期,事务将自动回滚。在此情况下,指定已过期事务 ID 的 aws rds-data rollback-transaction 命令将返回错误。

除常用选项之外,还可指定以下选项:

  • --transaction-id(必需)– 使用 begin-transaction CLI 命令开始的事务的标识符。指定您希望回滚的事务的事务 ID。

例如,以下 AWS CLI 命令回滚 SQL 事务。

针对 Linux、OS X 或 Unix:

aws rds-data rollback-transaction --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" \ --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" \ --transaction-id "ABC1234567890xyz"

对于 Windows:

aws rds-data rollback-transaction --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" ^ --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret" ^ --transaction-id "ABC1234567890xyz"

以下为响应示例。

{ "transactionStatus": "Rollback Complete" }

从 Python 应用程序调用数据 API

您可以从 Python 应用程序调用数据 API。

以下示例使用适用于 Python 的 AWS 开发工具包 (Boto)。有关 Boto 的更多信息,请参阅适用于 Python 的 AWS 开发工具包 (Boto 3 ) 文档

在每个示例中,将数据库集群的 Amazon 资源名称 (ARN) 替换为您的 Aurora Serverless 数据库集群。另外,将密钥 ARN 替换为允许访问数据库集群的 AWS Secrets Manager 中的密钥的 ARN。

运行 SQL 查询

您可以运行 SELECT 语句并使用 Python 应用程序提取结果。

以下示例运行 SQL 查询。

import boto3 rdsData = boto3.client('rds-data') cluster_arn = 'arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster' secret_arn = 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret' response1 = rdsData.execute_statement( resourceArn = cluster_arn, secretArn = secret_arn, database = 'mydb', sql = 'select * from employees limit 3') print (response1['records']) [ [ { 'longValue': 1 }, { 'stringValue': 'ROSALEZ' }, { 'stringValue': 'ALEJANDRO' }, { 'stringValue': '2016-02-15 04:34:33.0' } ], [ { 'longValue': 1 }, { 'stringValue': 'DOE' }, { 'stringValue': 'JANE' }, { 'stringValue': '2014-05-09 04:34:33.0' } ], [ { 'longValue': 1 }, { 'stringValue': 'STILES' }, { 'stringValue': 'JOHN' }, { 'stringValue': '2017-09-20 04:34:33.0' } ] ]

运行 DML SQL 语句

您可以运行数据操作语言 (DML) 语句,在数据库中插入、更新或删除数据。在 DML 语句中也可以使用参数。

重要

如果调用由于未包含 transactionID 参数而不属于事务的一部分,则调用产生的更改将自动提交。

以下示例运行插入 SQL 语句并使用参数。

import boto3 rdsData = boto3.client('rds-data') cluster_arn = 'arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster' secret_arn = 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret' response2 = rdsData.execute_statement( resourceArn = cluster_arn, secretArn = secret_arn, database = 'mydb', sql = 'insert into employees(first_name, last_name) VALUES(:firstname, :lastname)') param1 = {'name':'firstname', 'value':{'stringValue': 'JACKSON'}} param2 = {'name':'lastname', 'value':{'stringValue': 'MATEO'}} paramSet = [param1, param2] response2 = rdsData.execute_statement( resourceArn = cluster_arn, secretArn = secret_arn, database = 'mydb', parameters = paramSet, sql = 'insert into employees(first_name, last_name) VALUES(:firstname, :lastname)') 'numberOfRecordsUpdated': 1} response2['numberOfRecordsUpdated'] 1

运行 SQL 事务

您可以通过 Python 应用程序开始 SQL 事务、运行一个或多个 SQL 语句,然后提交更改。

重要

如果三分钟之内没有任何调用使用其事务 ID,事务将超时。如果事务在提交之前超时,则会自动回滚。

如果未指定事务 ID,则调用产生的更改将自动提交。

以下示例运行 SQL 事务在表中插入行。

import boto3 rdsData = boto3.client('rds-data') cluster_arn = 'arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster' secret_arn = 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret' tr = rdsData.begin_transaction( resourceArn = cluster_arn, secretArn = secret_arn, database = 'mydb') response3 = rdsData.execute_statement( resourceArn = cluster_arn, secretArn = secret_arn, database = 'mydb', sql = 'insert into employees(first_name, last_name) values('XIULAN', 'WANG')', transactionId = tr['transactionId']) cr = rdsData.commit_transaction( resourceArn = cluster_arn, secretArn = secret_arn, transactionId = tr['transactionId']) cr['transactionStatus'] 'Transaction Committed' response3['numberOfRecordsUpdated'] 1

注意

如果运行数据定义语言 (DDL) 语句,我们建议在调用超时后继续运行语句。如果 DDL 语句在结束运行之前终止,则可能导致错误以及数据结构损坏。要在调用超时后继续运行语句,请将 continueAfterTimeout 参数设置为 true

从 Java 应用程序调用数据 API

您可以从 Java 应用程序调用数据 API。

以下示例使用适用于 Java 的 AWS 开发工具包。有关更多信息,请参阅AWS SDK for Java Developer Guide

在每个示例中,将数据库集群的 Amazon 资源名称 (ARN) 替换为您的 Aurora Serverless 数据库集群。另外,将密钥 ARN 替换为允许访问数据库集群的 AWS Secrets Manager 中的密钥的 ARN。

运行 SQL 查询

您可以运行 SELECT 语句并使用 Java 应用程序提取结果。

以下示例运行 SQL 查询。

package com.amazonaws.rdsdata.examples; import com.amazonaws.services.rdsdata.AWSRDSData; import com.amazonaws.services.rdsdata.AWSRDSDataClient; import com.amazonaws.services.rdsdata.model.ExecuteStatementRequest; import com.amazonaws.services.rdsdata.model.ExecuteStatementResult; import com.amazonaws.services.rdsdata.model.Field; import java.util.List; public class FetchResultsExample { public static final String RESOURCE_ARN = "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"; public static final String SECRET_ARN = "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"; public static void main(String[] args) { AWSRDSData rdsData = AWSRDSDataClient.builder().build(); ExecuteStatementRequest request = new ExecuteStatementRequest() .withResourceArn(RESOURCE_ARN) .withSecretArn(SECRET_ARN) .withDatabase("mydb") .withSql("select * from mytable"); ExecuteStatementResult result = rdsData.executeStatement(request); for (List<Field> fields: result.getRecords()) { String stringValue = fields.get(0).getStringValue(); long numberValue = fields.get(1).getLongValue(); System.out.println(String.format("Fetched row: string = %s, number = %d", stringValue, numberValue)); } } }

运行 SQL 事务

您可以通过 Java 应用程序开始 SQL 事务、运行一个或多个 SQL 语句,然后提交更改。

重要

如果三分钟之内没有任何调用使用其事务 ID,事务将超时。如果事务在提交之前超时,则会自动回滚。

如果未指定事务 ID,则调用产生的更改将自动提交。

以下示例运行 SQL 事务。

package com.amazonaws.rdsdata.examples; import com.amazonaws.services.rdsdata.AWSRDSData; import com.amazonaws.services.rdsdata.AWSRDSDataClient; import com.amazonaws.services.rdsdata.model.BeginTransactionRequest; import com.amazonaws.services.rdsdata.model.BeginTransactionResult; import com.amazonaws.services.rdsdata.model.CommitTransactionRequest; import com.amazonaws.services.rdsdata.model.ExecuteStatementRequest; public class TransactionExample { public static final String RESOURCE_ARN = "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"; public static final String SECRET_ARN = "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"; public static void main(String[] args) { AWSRDSData rdsData = AWSRDSDataClient.builder().build(); BeginTransactionRequest beginTransactionRequest = new BeginTransactionRequest() .withResourceArn(RESOURCE_ARN) .withSecretArn(SECRET_ARN) .withDatabase("mydb"); BeginTransactionResult beginTransactionResult = rdsData.beginTransaction(beginTransactionRequest); String transactionId = beginTransactionResult.getTransactionId(); ExecuteStatementRequest executeStatementRequest = new ExecuteStatementRequest() .withTransactionId(transactionId) .withResourceArn(RESOURCE_ARN) .withSecretArn(SECRET_ARN) .withSql("INSERT INTO test_table VALUES ('hello world!')"); rdsData.executeStatement(executeStatementRequest); CommitTransactionRequest commitTransactionRequest = new CommitTransactionRequest() .withTransactionId(transactionId) .withResourceArn(RESOURCE_ARN) .withSecretArn(SECRET_ARN); rdsData.commitTransaction(commitTransactionRequest); } }

注意

如果运行数据定义语言 (DDL) 语句,我们建议在调用超时后继续运行语句。如果 DDL 语句在结束运行之前终止,则可能导致错误以及数据结构损坏。要在调用超时后继续运行语句,请将 continueAfterTimeout 参数设置为 true

运行批处理 SQL 操作

您可以使用 Java 应用程序,对数据数组运行批量插入和更新操作。您可以使用参数集数组运行 DML 语句。

重要

如果未指定事务 ID,则调用产生的更改将自动提交。

以下示例运行批处理插入操作。

package com.amazonaws.rdsdata.examples; import com.amazonaws.services.rdsdata.AWSRDSData; import com.amazonaws.services.rdsdata.AWSRDSDataClient; import com.amazonaws.services.rdsdata.model.BatchExecuteStatementRequest; import com.amazonaws.services.rdsdata.model.Field; import com.amazonaws.services.rdsdata.model.SqlParameter; import java.util.Arrays; public class BatchExecuteExample { public static final String RESOURCE_ARN = "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"; public static final String SECRET_ARN = "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"; public static void main(String[] args) { AWSRDSData rdsData = AWSRDSDataClient.builder().build(); BatchExecuteStatementRequest request = new BatchExecuteStatementRequest() .withDatabase("test") .withResourceArn(RESOURCE_ARN) .withSecretArn(SECRET_ARN) .withSql("INSERT INTO test_table2 VALUES (:string, :number)") .withParameterSets(Arrays.asList( Arrays.asList( new SqlParameter().withName("string").withValue(new Field().withStringValue("Hello")), new SqlParameter().withName("number").withValue(new Field().withLongValue(1L)) ), Arrays.asList( new SqlParameter().withName("string").withValue(new Field().withStringValue("World")), new SqlParameter().withName("number").withValue(new Field().withLongValue(2L)) ) )); rdsData.batchExecuteStatement(request); } }

解决数据 API 问题

使用以下部分(标题为常见错误消息)帮助解决数据 API 问题。

注意

如果您有与数据 API 相关的问题或评论,请将电子邮件发送到 Rds-data-api-feedback@amazon.com

未找到事务 <transaction_ID>

在此情况下,找不到数据 API 调用中指定的事务 ID。导致此问题的原因几乎总是下列原因之一:

  • BeginTransaction 调用未创建指定的事务 ID。

  • 指定的事务 ID 已过期。

    如果在 3 分钟内没有调用使用事务 ID,则事务将过期。

要解决此问题,请确保您的调用具有有效的事务 ID。另请确保每个事务调用在最后一个事务调用之后的 3 分钟内运行。

有关运行事务的信息,请参阅调用数据 API

用于查询的包太大

在此情况下,为行返回的结果集太大。数据库返回的结果集中的数据 API 大小限制为每行 64 KB。

要解决此问题,请确保结果集中的每一行都小于或等于 64 KB。

查询响应超过记录数限制

在此情况下,返回的结果集中的行数太大。数据库返回的结果集中的数据 API 限制为 1000 行。

要解决此问题,请确保对数据 API 的调用返回 1000 行或更少。如果需要返回 1000 行以上,您可以在查询中将多个 ExecuteStatement 调用与 LIMIT 子句结合使用。

有关 LIMIT 子句的更多信息,请参阅 MySQL 文档中的 SELECT 语法

数据库响应超出大小限制

在此情况下,数据库返回的结果集太大。数据库返回的结果集中的数据 API 限制为 1 MB。

要解决此问题,请确保对数据 API 的调用返回 1 MB 或更少数据。如果需要返回 1 MB 以上的数据,您可以在查询中将多个 ExecuteStatement 调用与 LIMIT 子句结合使用。

有关 LIMIT 子句的更多信息,请参阅 MySQL 文档中的 SELECT 语法

未为集群 <cluster_ID> 启用 HttpEndpoint

导致此问题的原因几乎总是下列原因之一:

  • 未为 Aurora Serverless 数据库集群启用数据 API。要将数据 API 与 Aurora Serverless 数据库集群结合使用,必须为该数据库集群启用数据 API。

  • 在为数据库集群启用数据 API 之后,已重命名该数据库集群。

如果尚未为数据库集群启用数据 API,请启用它。

如果在为数据库集群启用数据 API 后重命名了数据库集群,请禁用数据 API,然后再次启用它。

有关启用数据 API 的信息,请参阅启用数据 API