2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

适用于 Amazon Aurora Serverless 的数据 API

  • 2019-09-29
  • 本文字数:2894 字

    阅读完需:约 9 分钟

适用于 Amazon Aurora Serverless 的数据 API

如果您曾经写过访问关系数据库的代码,那您肯定轻车熟路。您会打开一个连接,使用它来处理一个或多个 SQL 查询或其他语句,然后关闭连接。您也许使用过操作系统、编程语言和数据库特定的客户端库。有时,您会意识到创建连接需要大量的时钟时间,消耗数据库引擎内存,并且很快发现您可以(或者必须)处理连接池和其他陷阱。听起来很熟悉?


上面我描述的这种模式以连接为导向,对于长时间运行的传统程序而言足够,设置时间可以经历数小时,甚至几天。但对于会频繁调用并且运行间隔仅为数毫秒至几分钟的无服务器函数,这就不太适合了。由于不再有长时间运行的服务器,也就没有地方存储连接识别符以便重复使用。


Aurora Serverless 数据 API


为了解决无服务器应用程序与关系数据库之间的这种错位,我们推出了一种适用于 MySQL 兼容版 Amazon Aurora Serverless 的数据 API。该 API 免除了传统连接管理所涉及的复杂性和开销,让您能够快速、轻松地执行访问和修改 Amazon Aurora Serverless 数据库实例的 SQL 语句。


数据 API 旨在满足传统应用程序和无服务器应用程序的需求。它负责管理和扩展数据库的长期性连接,并以 JSON 格式返回数据,以便于解析。所有流量都通过安全的 HTTPS 连接运行。它包含下列函数:


ExecuteStatement – 运行单个 SQL 语句,可以在一个事务中运行。


BatchExecuteStatement – 跨大量数据运行单个 SQL 语句,可以在一个事务中运行。


BeginTransaction – 开始事务处理,返回一个事务识别符。事务预计会很短(一般 2 至 5 分钟)。


CommitTransaction – 结束事务并提交其中发生的操作。


RollbackTransaction – 结束事务但不提交其中发生的操作。


每个函数都必须在 1 分钟内完成运行,并且最高可以返回 1MB 的数据。


数据 API 的使用


我可以通过 Amazon RDS 控制台、命令行或者编写调用上述函数的代码来使用数据 API。我将在本博文中向大家介绍所有这三种方式。


数据 API 的使用异常简单! 第一步是为需要的 Amazon Aurora Serverless 数据库启用此功能。我打开 Amazon RDS 控制台,找到并选中集群,然后单击修改:



然后我下翻至网络与安全性部分,单击数据 API,然后单击继续:



在下一页,我选择立即应用设置,然后单击修改集群:



现在我需要创建一个密钥,以便存储访问我的数据库所需的凭证。我打开 Secrets Manager 控制台,然后单击存储新密钥。我选中 RDS 数据库凭证,输入有效的数据库用户名和密码,也可选择一个非默认的加密密钥,然后选中我的无服务器数据库。然后我单击下一步:



我给我的密钥命令并添加标签,然后单击下一步进行配置:



我在下一页使用默认值,然后再次单击下一步,这时我将拥有一个全新的密钥:



现在我需要两个 ARN,即数据库的 ARN 和密钥的 ARN。我从控制台中找到这两个 ARN,第一个是数据库的:



然后是密钥的:



这一对 ARN(数据库和密钥)让我能够访问我的数据库,我将妥善保管它们!


通过 Amazon RDS 控制台使用数据 API


我可以在 Amazon RDS 控制台使用查询编辑器来运行调用数据 API 的查询。我打开控制台并单击查询编辑器,然后创建一个到数据库的连接。我选择集群,输入我的凭证,然后预选择需要的表。然后我单击连接到数据库继续:



我输入一条查询,单击运行,然后在编辑器中查看结果:



通过命令行使用数据 API


我可以通过命令行来练习使用数据 API:


$ aws rds-data execute-statement \  --secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:aurora-serverless-data-api-sl-admin-2Ir1oL" \  --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:aurora-sl-1" \  --database users \  --sql "show tables" \  --output json
复制代码


我可以使用 jq 来从结果中选出我感兴趣的部分:


... | jq .records[  {    "values": [      {        "stringValue": "users"      }    ]  }]
复制代码


我可以查询该表并得到结果


(SQL 语句是 "select * from users where userid='jeffbarr'"):
... | jq .records[ { "values": [ { "stringValue": "jeffbarr" }, { "stringValue": "Jeff" }, { "stringValue": "Barr" } ] }
复制代码


如果我指定 --include-result-metadata,则该查询还将返回描述结果列的数据(为节约篇幅,我将仅显示第一个):


... | jq .columnMetadata[0]{  "type": 12,  "name": "userid",  "label": "userid",  "nullable": 1,  "isSigned": false,  "arrayBaseColumnType": 0,  "scale": 0,  "schemaName": "",  "tableName": "users",  "isCaseSensitive": false,  "isCurrency": false,  "isAutoIncrement": false,  "precision": 15,  "typeName": "VARCHAR"}
复制代码


借助数据 API,我还可以将一系列的语句打包装入一个事务中,然后提交或回滚。下面是我的操作方式(为明确起见,我将省略 --secret-arn 和 --resource-arn):


$ $ID=`aws rds-data begin-transaction --database users --output json | jq .transactionId`$ echo $ID"ATP6Gz88GYNHdwNKaCt/vGhhKxZs2QWjynHCzGSdRi9yiQRbnrvfwF/oa+iTQnSXdGUoNoC9MxLBwyp2XbO4jBEtczBZ1aVWERTym9v1WVO/ZQvyhWwrThLveCdeXCufy/nauKFJdl79aZ8aDD4pF4nOewB1aLbpsQ=="
$ aws rds-data execute-statement --transaction-id $ID --database users --sql "..."$ ...$ aws rds-data execute-statement --transaction-id $ID --database users --sql "..."$ aws rds-data commit-transaction $ID

复制代码


如果我决定不提交,我会改为调用 rollback-transaction。


通过 Python 和 Boto 使用数据 API


由于它是一种 API,非常方便通过编程方式访问。下面是一个非常简单的 Python/Boto 代码:


import boto3
client = boto3.client('rds-data')
response = client.execute_sql( secretArn = 'arn:aws:secretsmanager:us-east-1:123456789012:secret:aurora-serverless-data-api-sl-admin-2Ir1oL', database = 'users', resourceArn = 'arn:aws:rds:us-east-1:123456789012:cluster:aurora-sl-1', sql = 'select * from users')
for user in response['records']: userid = user[0]['stringValue'] first_name = user[1]['stringValue'] last_name = user[2]['stringValue'] print(userid + ' ' + first_name + ' ' + last_name)
复制代码


输出将是:


$ python data_api.pyjeffbarr Jeff Barrcarmenbarr Carmen Barr
复制代码


真正生产质量的代码将使用作为应答的一部分返回的元数据,通过符号的方式引用表中的列。


再说一句,根据我的 Amazon Aurora Serverless 集群配置,它的容量将在不活动时一直缩减至零。例如在我编写此博文并运行查询过程中,扩展活动就是下面这个样子:



现已推出


您可以在美国东部(弗吉尼亚北部)、美国东部(俄亥俄)、美国西部(俄勒冈)、亚太地区(东京)以及欧洲(爱尔兰)区域立即使用数据 API。该 API 不会产生其他费用,仅需按照将数据传出 AWS 的正常价格付费。


作者介绍:


Jeff Barr


AWS 首席布道师; 2004 年开始发布博客,此后便笔耕不辍。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/new-data-api-for-amazon-aurora-serverless/


2019-09-29 09:18947
用户头像

发布了 1963 篇内容, 共 168.5 次阅读, 收获喜欢 82 次。

关注

评论

发布
暂无评论
发现更多内容

Cocos 常用功能介绍

空城机

Cocos 5月月更

企评家|广州白云国际机场股份有限公司成长性报告简述

企评家

Redis「5」事件处理模型与键过期策略

Samson

学习笔记 Redis 核心技术与实战 5月月更

Spark离线开发框架设计与实现

百度开发者中心

6 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

直播预告丨Hello HarmonyOS进阶课程第三课——游戏开发实践

HarmonyOS开发者

游戏开发 HarmonyOS

抢先预约 | 阿里云无影云应用线上发布会预约开启

阿里云弹性计算

无影云电脑 云应用

不会吧不会吧!听说还有人在手动迁移Vault密钥?

Jianmu

自动化 数据迁移 密钥 建木CI vault

明明已部署EDR,服务器为什么还是被入侵了?

青藤云安全

安全攻防 网络安全 主机安全

企评家 | 白银有色集团股份有限公司成长性评价简介

企评家

一文彻悟容器网络通信

阿里巴巴中间件

阿里云 容器 云原生 中间件

李俊刚:我是如何在OpenHarmony完成ap6275s WiFi驱动的HDF适配工作的?

OpenHarmony开发者

OpenHarmony WiFi驱动

服务网格接口 SMI 规范解读

Flomesh

云原生 服务网格 SMI OpenServiceMesh

FinClip+系列 | VUE前端开发框架核心原理

Speedoooo

Vue 前端框架 移动开发 移动端开发 小程序容器

OpenHarmony浏览器上新,在Dayu200开发板上终于能优雅地浏览网页

离北况归

浏览器 OpenHarmony Openharmony啃论文俱乐部 PIMF OpenHarmony应用安装

漏洞扫描器并非100%靠谱,那么容器镜像安全又当如何保证?

青藤云安全

网络安全 安全管理 漏洞修复

三、云原生安全关键要素

穿过生命散发芬芳

云原生安全 5月月更

在线文本列表补集计算工具

入门小站

工具

企评家,企业数据分析评价提供投资信息支撑

企评家

DTMO直播预告|Taier1.1新功能详解&控制台介绍

袋鼠云数栈

大数据

小白福利!教你用低代码实现一个简单的HarmonyOS页面跳转功能

HarmonyOS开发者

HarmonyOS 低代码开发

HDD·耀星领航出海峰会:华为游戏中心联运服务加速游戏出海获量增长

最新动态

JavaWeb 数据库操作

Emperor_LawD

sql javaWeb 5月月更

工业质检如何以“智”取胜?15分钟上手工业零部件检测全流程方案

百度开发者中心

Dubbo3 落地实践及 Mesh 解决方案

阿里巴巴中间件

阿里云 开源 云原生 dubbo 中间件

接口测试工具简介!

Liam

测试 自动化测试 测试工具 测试自动化 测试管理工具

linux中vi,vim操作技巧

入门小站

Linux

在线TSV转YAML工具

入门小站

工具

柏拉图会成为元宇宙风险标吗?PlatoFarm的机会很大

小哈区块

HIVE3 深度剖析 (下篇)

明哥的IT随笔

大数据 hive

适用于 Amazon Aurora Serverless 的数据 API_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章