使用 Amazon CLI 调用 Amazon RDS 数据 API
您可以使用 Amazon CLI 调用 RDS 数据 API(数据 API)。
以下示例将 Amazon CLI 用于数据 API。有关更多信息,请参阅 Data API 的 Amazon CLI 参考。
在每个示例中,将数据库集群的 Amazon 资源名称(ARN)替换为 Aurora 数据库集群的 ARN。另外,将密钥 ARN 替换为 Secrets Manager 中允许访问该数据库集群的密钥的 ARN。
注意
Amazon CLI 可以使用 JSON 设置响应格式。
启动 SQL 事务
您可以使用 aws rds-data
begin-transaction
CLI 命令启动 SQL 事务。调用会返回事务标识符。
重要
在数据 API 中,如果三分钟之内没有任何调用使用某个事务的 ID,该事务将超时。如果事务在提交之前超时,数据 API 会自动进行回滚。
事务内的 MySQL 数据定义语言(DDL,Data Definition Language)语句会导致隐式提交。建议您在单独的 execute-statement
命令中,采用 --continue-after-timeout
选项运行每个 MySQL DDL 语句。
除了常用选项之外,请指定提供数据库名称的 --database
选项。
例如,以下 CLI 命令开始 SQL 事务。
对于 Linux、macOS 或 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
(可选)– 数据库的名称。当您在先前的请求中运行
--sql "use
之后运行 SQL 语句时,database_name
;"--database
选项可能不起作用。建议您使用--database
选项,而不是运行--sql "use
语句。database_name
;" -
--continue-after-timeout | --no-continue-after-timeout
(可选)– 一个值,指定当调用超过了数据 API 超时间隔(45 秒)后,是否继续运行语句。默认为--no-continue-after-timeout
。对于数据定义语言(DDL)语句,我们建议在调用超时后继续运行语句,以避免错误以及数据结构损坏的可能性。
-
--format-records-as "JSON"|"NONE"
– 一个可选值,它指定是否将结果集格式化为 JSON 字符串。默认值为"NONE"
。有关处理 JSON 结果集的使用信息,请参阅处理 JSON 格式的 Amazon RDS 数据 API 查询结果。
数据库集群为调用返回响应。
注意
响应大小限制为 1MiB。如果调用返回的响应数据超过 1MiB,则调用将终止。
对于 Aurora Serverless v1,每秒最大请求数为 1000。对于所有其它受支持的数据库,没有限制。
例如,以下 CLI 命令运行单个 SQL 语句,并在结果中省略元数据(默认设置)。
对于 Linux、macOS 或 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、macOS 或 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、macOS 或 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 intomytable
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 intomytable
values (:id
,:val
)" --parameters "[{\"name\": \"id
\", \"value\": {\"longValue\":1
}},{\"name\": \"val
\", \"value\": {\"stringValue\": \"value1
\"}}]"
以下为响应示例。
{
"numberOfRecordsUpdated": 1
}
以下 CLI 命令运行数据定义语言 (DDL) SQL 语句。DDL 语句将列 job
重命名为列 role
。
重要
对于 DDL 语句,我们建议在调用超时后继续运行语句。如果 DDL 语句在结束运行之前终止,则可能导致错误以及数据结构损坏。要在调用超过 RDS 数据 API 超时间隔(45 秒)后继续运行语句,请指定 --continue-after-timeout
选项。
对于 Linux、macOS 或 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 语句。提示
对于与 MySQL 兼容的语句,不要在
--sql
参数末尾包含分号。尾随的分号可能会导致语法错误。 -
--transaction-id
(可选)– 使用begin-transaction
CLI 命令开始的事务的标识符。指定您希望包含 SQL 语句的事务的事务 ID。 -
--parameter-set
(可选)– 批处理操作的参数集。 -
--database
(可选)– 数据库的名称。
数据库集群返回调用的响应。
注意
参数集数量没有固定的上限。但是,通过数据 API 提交的 HTTP 请求的最大大小为 4MiB。如果请求超出此限制,数据 API 将返回错误并且不处理请求。此 4MiB 限制包括 HTTP 标头的大小和请求中的 JSON 符号。因此,可以包含的参数集数取决于因素的组合,例如 SQL 语句的大小和每个参数集的大小。
响应大小限制为 1MiB。如果调用返回的响应数据超过 1MiB,则调用将终止。
对于 Aurora Serverless v1,每秒最大请求数为 1000。对于所有其它受支持的数据库,没有限制。
例如,以下 CLI 命令采用参数集对数据数组运行批处理 SQL 语句。
对于 Linux、macOS 或 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 intomytable
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 intomytable
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、macOS 或 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。
例如,以下 Amazon CLI 命令回滚 SQL 事务。
对于 Linux、macOS 或 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"
}