本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过内省构建 GraphQL APIs RDS
AWS AppSync的内省实用程序可以从数据库表中发现模型并提出 GraphQL 类型。 AWS AppSync 控制台的 API “创建” 向导可以立即API从 Aurora My SQL 或 Postgre SQL 数据库生成。它会自动创建用于读取和写入数据的类型和 JavaScript 解析器。
AWS AppSync 通过亚马逊RDS数据提供与亚马逊 Aurora 数据库的直接集成API。Amazon D RDS ata 无需永久数据库连接,而是API提供了一个安全的HTTP终端节点,可以 AWS AppSync 连接到该终端节点进行运行 SQL 声明。你可以用它在 Aurora 上API为我的 My SQL 和 Postgre SQL 工作负载创建关系数据库。
使用API为关系数据库构建 AWS AppSync 具有以下几个优点:
-
您的数据库不会直接暴露给客户端,从而使接入点与数据库本身分离。
-
您可以根据不同应用程序的需求APIs量身定制构建,从而无需在前端使用自定义业务逻辑。这与 Backend-For-Frontend (BFF) 模式一致。
-
可以使用各种授权模式在 AWS AppSync 层上实现授权和访问控制,以控制访问权限。无需额外的计算资源即可连接到数据库,例如托管 Web 服务器或代理连接。
-
可以通过订阅添加实时功能,通过 AppSync 自动将数据变更推送到连接的客户端。
-
客户端可以使用 443 等常APIHTTPS用端口连接到 over。
AWS AppSync 使基于现有关系数据库APIs的构建变得容易。它的自省实用程序可以从数据库表中发现模型并建议 GraphQL 类型。 AWS AppSync 控制台的 API “创建” 向导可以立即API从 Aurora My SQL 或 Postgre SQL 数据库生成。它会自动创建用于读取和写入数据的类型和 JavaScript解析器。
AWS AppSync 提供了集成的 JavaScript 实用程序,用于简化在解析器中编写SQL语句。您可以将 AWS AppSync的sql
标签模板用于具有动态值的静态语句,也可以使用rds
模块实用程序以编程方式生成语句。有关更多信息,请参阅RDS数据源和内置模块的解析器函数参考。
使用自省特征(控制台)
有关详细教程和入门指南,请参阅教程:Aurora Postgre SQL 无服务器处理数据。API
AWS AppSync 控制台允许您在短短几分钟内API从配置了数据的API现有 Aurora 数据库创建 AWS AppSync GraphQL。这会根据您的数据库配置快速生成操作架构。您可以API按原样使用或在其基础上进行构建来添加功能。
-
登录 AWS Management Console 并打开AppSync控制台
。 -
在控制面板中,选择创建API。
-
-
在 “API选项” 下,选择 GraphQL APIs,从 Amazon Aurora 集群开始,然后选择 “下一步”。
-
输入API名称。这将在控制台API中用作的标识符。
-
有关详细联系信息,您可以输入联系人来确定经理API。此为可选字段。
-
在 “私有API配置” 下,您可以启用私有API功能。API只能从已配置的VPC终端节点 (VPCE) 访问私有网络。有关更多信息,请参阅私有APIs。
对于该示例,我们不建议启用该功能。在检查您的输入后,选择下一步。
-
-
在数据库页面中,选择选择数据库。
-
选择 Import(导入)。
AWS AppSync 将开始内省您的数据库,发现表、列、主键和索引。它会检查 Graph API QL 中是否支持发现的表。请注意,为了支持创建新行,表需要一个可以使用多列的主键。 AWS AppSync 将表列映射到类型字段,如下所示:
数据类型 字段类型 VARCHAR String CHAR 字符串 BINARY 字符串 VARBINARY 字符串 TINYBLOB 字符串 TINYTEXT 字符串 TEXT 字符串 BLOB 字符串 MEDIUMTEXT 字符串 MEDIUMBLOB 字符串 LONGTEXT 字符串 LONGBLOB String BOOL 布尔值 BOOLEAN 布尔值 BIT Int TINYINT Int SMALLINT Int MEDIUMINT Int INT Int INTEGER Int BIGINT Int YEAR Int FLOAT 浮点型 DOUBLE 浮点型 DECIMAL 浮点型 DEC 浮点型 NUMERIC 浮点型 DATE AWSDate TIMESTAMP String DATETIME String TIME AWSTime JSON AWSJson ENUM ENUM -
表发现完成后,数据库部分将填充您的信息。在新的数据库表部分中,表中的数据可能已经填充并转换为架构的类型。如果您没有看到某些必填数据,则可以通过以下方式进行检查:选择添加表,在出现的模式中单击这些类型的复选框,然后选择添加。
要从数据库表部分删除类型,请单击要删除的类型旁边的复选框,然后选择删除。如果您想稍后再次添加,删除的类型将置于添加表模式中。
请注意, AWS AppSync 使用表名作为类型名称,但你可以重命名它们,例如,更改复数表名,比如
movies
到类型名称Movie
。 要重命名数据库表部分中的类型,请单击要重命名的类型的复选框,然后单击 “类型名称” 列中的铅笔图标。要根据您的选择预览架构的内容,请选择预览架构。请注意,此架构不能为空,因此必须至少有一个表转换为类型。此外,此架构的大小不能超过 1MB。
-
在服务角色下,选择是专门为此导入创建新的服务角色,还是使用现有的角色。
-
-
选择下一步。
-
接下来,选择是创建只读API(仅限查询)还是API用于读取和写入数据(包含查询和突变)。后者还支持由突变触发的实时订阅。
-
选择下一步。
-
查看您的选择,然后选择 “创建” API。 AWS AppSync 将创建API并将解析器附加到查询和突变。生成的API文件已完全运行,可以根据需要进行扩展。
使用内省功能 () API
您可以使用StartDataSourceIntrospection
内省API以编程方式发现数据库中的模型。有关该命令的更多详细信息,请参阅使用StartDataSourceIntrospection
API。
要使用StartDataSourceIntrospection
,请提供您的 Aurora 集群的亚马逊资源名称 (ARN)、数据库名称和 AWS Secrets Manager 密钥ARN。该命令启动自省过程。您可以使用 GetDataSourceIntrospection
命令检索结果。您可以指定该命令是否应返回已发现模型的存储定义语言 (SDL) 字符串。这对于直接从发现的模型生成SDL架构定义很有用。
例如,如果您对简单Todos
表使用以下数据定义语言 (DDL) 语句:
create table if not exists public.todos ( id serial constraint todos_pk primary key, description text, due timestamp, "createdAt" timestamp default now() );
您从以下内容开始自省。
aws appsync start-data-source-introspection \ --rds-data-api-config resourceArn=<cluster-arn>,secretArn=<secret-arn>,databaseName=database
接下来,使用 GetDataSourceIntrospection
命令检索结果。
aws appsync get-data-source-introspection \ --introspection-id a1234567-8910-abcd-efgh-identifier \ --include-models-sdl
这会返回以下结果。
{ "introspectionId": "a1234567-8910-abcd-efgh-identifier", "introspectionStatus": "SUCCESS", "introspectionStatusDetail": null, "introspectionResult": { "models": [ { "name": "todos", "fields": [ { "name": "description", "type": { "kind": "Scalar", "name": "String", "type": null, "values": null }, "length": 0 }, { "name": "due", "type": { "kind": "Scalar", "name": "AWSDateTime", "type": null, "values": null }, "length": 0 }, { "name": "id", "type": { "kind": "NonNull", "name": null, "type": { "kind": "Scalar", "name": "Int", "type": null, "values": null }, "values": null }, "length": 0 }, { "name": "createdAt", "type": { "kind": "Scalar", "name": "AWSDateTime", "type": null, "values": null }, "length": 0 } ], "primaryKey": { "name": "PRIMARY_KEY", "fields": [ "id" ] }, "indexes": [], "sdl": "type todos\n{\ndescription: String\n\ndue: AWSDateTime\n\nid: Int!\n\ncreatedAt: AW SDateTime\n}\n" } ], "nextToken": null } }