AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

适用于 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:18889
用户头像

发布了 1920 篇内容, 共 152.1 次阅读, 收获喜欢 81 次。

关注

评论

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

Dragonfly 基于 P2P 的文件和镜像分发系统

SOFAStack

容器 云原生 镜像 日志 文件

行业智能化走向何方?昇腾AICE带来的新范式,新起点

脑极体

数据治理的内核:数据质量

小鲸数据

数据治理 数据质量管理 数据质量 数据生命周期

验证一个小小的问题

艾小仙

Java MySQL 编程 程序员 compact

Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架

阿里巴巴中间件

阿里云 云原生 Koordinator

MobLink后台基本配置

MobTech袤博科技

android 开发者 iOS SDK

2022服贸会 | 洞见科技姚明:从智能化到密态化,数据科技向善升级

洞见科技

面向对象分析与设计的底层逻辑

阿里巴巴中间件

阿里云 云原生

发挥CODING 敏捷开发能力,腾讯云加速提升国产芯片研发效率

科技热闻

使用 CRD 开启您的 Ingress 可观测之路

观测云

与紧张为友,享受紧张

宇宙之一粟

读书笔记 个人成长 演讲 9月月更 享受紧张

设计模式的艺术 第八章建造者设计模式练习(开发一个视频播放软件,为了方便用户使用,该播放软件提供多种界面显示模式,例如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异。例如,在精简模式下只显示主窗口、控制条)

代廉洁

设计模式的艺术

动态规划-编辑距离

wing

为什么要用小程序容器做小程序生态

Geek_99967b

小程序 小程序容器 小程序开发

蓝凌OA

科技云未来

WAIC 2022 | 洞见科技王湾湾出席BPAA第二届应用算法实践典范,共话前沿算法产业发展

洞见科技

ShareSDK Android端主流平台分享示例

MobTech袤博科技

an'droid

前端食堂技术周刊第 51 期:pnpm v7.10.0、8 月登陆网络平台的新内容、重新思考流行的 Node.js 模式和工具、打包 JavaScript 库的现代化指南

童欧巴

chrome Node React Chrome开发者工具 pnpm

mysql查询 limit 1000,10 和limit 10 速度一样快吗?如果我要分页,我该怎么办?

Java快了!

MySQL

lodash 在vue3+vite中按需加载

木叶🐱

vite Vue3 lodash

ShareSDK iOS端微信如何获取authcode值

MobTech袤博科技

微信 iOS SDK

WAIC 2022 | 洞见科技在可信AI论坛联合发布《可信人工智能产业生态发展报告》

洞见科技

技术团队如何高效落地代码CR

慕枫技术笔记

架构 后端 9月月更

Vue基础语法--插槽(Slot)基础使用

Sam9029

Vue 前端 基础 9月月更

设计模式的艺术 第七章原型设计模式练习(在某销售管理系统中设计并实现了一个客户类Customer,其中包含一个名为客户地址的成员变量,客户地址的类型为Address。用浅克隆和深克隆分别实现Customer对象的复制)

代廉洁

设计模式的艺术

用过这个API接口工具后,确实感觉postman有点鸡肋......

Liam

Java Postman swagger API开发 API调式

Dubbo Mesh:从服务框架到统一服务控制平台

阿里巴巴中间件

阿里云 微服务 云原生 dubbo

对jdbc的讲解

楠羽

JDBC 笔记 9月月更

Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?

Java快了!

Java并发 java;

观测云&亚马逊云科技「可观测性体验日」北京站圆满落幕

观测云

轻松理解20种常用AI算法

Baihai IDP

AI 算法

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