RDS 自省 - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

RDS 自省

Amazon AppSync 使从现有关系数据库构建 API 变得容易。它的自省实用程序可以从数据库表中发现模型并建议 GraphQL 类型。Amazon AppSync 控制台的“创建 API”向导可以立即从 Aurora MySQL 或 PostgreSQL 数据库生成 API。它会自动创建用于读取和写入数据的类型和 JavaScript 解析器。

Amazon AppSync 通过 Amazon RDS 数据 API 提供与 Amazon Aurora 数据库的直接集成。Amazon RDS 数据 API 不要求永久数据库连接,而是提供了一个安全 HTTP 端点,Amazon AppSync 连接到该端点以运行 SQL 语句。您可以利用这一点在 Aurora 上为您的 MySQL 和 PostgreSQL 工作负载创建关系数据库 API。

使用 Amazon AppSync 为关系数据库构建 API 有几个优点:

  • 您的数据库不会直接暴露给客户端,从而使接入点与数据库本身分离。

  • 您可以根据不同应用程序的需求构建专门构建的 API,无需在前端使用自定义业务逻辑。这与服务于前端的后端 (BFF) 模式一致。

  • 可以使用各种授权模式在 Amazon AppSync 层上实现授权和访问控制,以控制访问权限。无需额外的计算资源即可连接到数据库,例如托管 Web 服务器或代理连接。

  • 可以通过订阅来添加实时功能,通过 AppSync 进行的数据突变会自动推送到连接的客户端。

  • 客户端可以使用常用端口(例如 443)通过 HTTPS 连接到 API。

Amazon AppSync 使从现有关系数据库构建 API 变得容易。它的自省实用程序可以从数据库表中发现模型并建议 GraphQL 类型。Amazon AppSync 控制台的创建 API 向导可以立即从 Aurora MySQL 或 PostgreSQL 数据库生成 API。它会自动创建用于读取和写入数据的类型和 JavaScript 解析器。

Amazon AppSync 提供了集成的 JavaScript 实用程序,以简化在解析器中编写 SQL 语句。您可以将 Amazon AppSync 的 sql 标签模板用于具有动态值的静态语句,也可以使用 rds 模块实用程序以编程方式构建语句。有关更多信息,请参阅 RDS 的解析器函数参考数据来源和内置模块

使用自省特征(控制台)

有关详细教程和入门指南,请参阅教程:带数据 API 的 Aurora PostgreSQL Serverless

Amazon AppSync 控制台可让您在短短几分钟内从配置了数据 API 的现有 Aurora 数据库创建 Amazon AppSync GraphQL API。这会根据您的数据库配置快速生成操作架构。您可以按原样使用 API,也可以在它的基础之上构建来添加特征。

  1. 登录到 Amazon Web Services Management Console,然后打开 AppSync 控制台

    1. 控制面板中,选择创建 API

  2. API 选项下,选择 GraphQL API以 Amazon Aurora 集群开始,然后选择下一步

    1. 输入 API 名称。这将在控制台中用作 API 的标识符。

    2. 对于联系信息,您可以输入联系人以指定 API 的管理员。此为可选字段。

    3. 私有 API 配置下面,您可以启用私有 API 功能。只能从配置的 VPC 终端节点 (VPCE) 中访问私有 API。有关更多信息,请参阅私有 API

      对于该示例,我们不建议启用该功能。在检查您的输入后,选择下一步

  3. 数据库页面中,选择选择数据库

    1. 您需要从集群中选择数据库。第一步是选择您的集群所在的区域

    2. 从下拉列表中选择 Aurora 集群。请注意,在使用资源之前,您必须已创建并启用相应的数据 API。

    3. 接下来,您必须将数据库的凭证添加到服务中。这主要是使用 Amazon Secrets Manager 来完成的。选择您的密钥所在的区域。有关如何检索密钥信息的更多信息,请参阅查找密钥检索密钥

    4. 从下拉列表中添加您的密钥。请注意,用户必须对您的数据库具有读取权限

  4. 选择导入

    Amazon AppSync 将开始自省您的数据库,同时发现表、列、主键和索引。它会检查 GraphQL API 是否支持所发现的表。请注意,为了支持创建新行,表需要一个可以使用多列的主键。Amazon AppSync 将表列映射到类型字段,如下所示:

    数据类型 字段类型
    VARCHAR String
    CHAR String
    BINARY String
    VARBINARY String
    TINYBLOB String
    TINYTEXT String
    TEXT String
    BLOB String
    MEDIUMTEXT String
    MEDIUMBLOB String
    LONGTEXT String
    LONGBLOB String
    BOOL Boolean
    BOOLEAN Boolean
    BIT Int
    TINYINT Int
    SMALLINT Int
    MEDIUMINT Int
    INT Int
    INTEGER Int
    BIGINT Int
    YEAR Int
    FLOAT Float
    DOUBLE Float
    DECIMAL Float
    DEC Float
    NUMERIC Float
    DATE AWSDate
    TIMESTAMP String
    DATETIME String
    TIME AWSTime
    JSON AWSJson
    ENUM ENUM
  5. 表发现完成后,数据库部分将填充您的信息。在新的数据库表部分中,表中的数据可能已经填充并转换为架构的类型。如果您没有看到某些必填数据,则可以通过以下方式进行检查:选择添加表,在出现的模式中单击这些类型的复选框,然后选择添加

    要从数据库表部分删除类型,请单击要删除的类型旁边的复选框,然后选择删除。如果您想稍后再次添加,删除的类型将置于添加表模式中。

    请注意,Amazon AppSync 使用表名称作为类型名称,但您可以对其进行重命名,例如,将诸如 movies 之类的复数表名更改为类型名称 Movie。要重命名数据库表部分中的类型,请单击要重命名的类型的复选框,然后单击类型名称列中的铅笔图标。

    要根据您的选择预览架构的内容,请选择预览架构。请注意,此架构不能为空,因此必须至少有一个表转换为类型。此外,此架构的大小不能超过 1MB。

    1. 服务角色下,选择是专门为此导入创建新的服务角色,还是使用现有的角色。

  6. 选择下一步

  7. 接下来,选择是创建只读 API(仅限查询),还是创建用于读取和写入数据(包含查询和突变)的 API。后者还支持由突变触发的实时订阅。

  8. 选择下一步

  9. 查看您的选择,然后选择创建 API。Amazon AppSync 将创建 API 并将解析器附加到查询和突变。生成的 API 可完全运行,可以根据需要进行扩展。

使用自省特征 (API)

您可以使用 StartDataSourceIntrospection 自省 API 以编程方式发现数据库中的模型。有关该命令的更多详细信息,请参阅“使用 StartDataSourceIntrospection API”。

要使用 StartDataSourceIntrospection,请提供您的 Aurora 集群 Amazon 资源名称 (ARN)、数据库名称和 Amazon 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 } }