Introspección de RDS - AWS AppSync

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Introspección de RDS

AWS AppSync facilita la creación de API a partir de bases de datos relacionales existentes. Su utilidad de introspección puede descubrir modelos a partir de tablas de bases de datos y proponer tipos de GraphQL. El asistente Creación de API de la consola de AWS AppSync puede generar una API al instante a partir de una base de datos Aurora MySQL o PostgreSQL. Crea automáticamente tipos y solucionadores de JavaScript para leer y escribir datos.

AWS AppSync ofrece una integración directa con las bases de datos de Amazon Aurora a través de la API de datos de Amazon RDS. En lugar de requerir una conexión de base de datos persistente, la API de datos de Amazon RDS ofrece un punto de conexión HTTP seguro al que AWS AppSync se conecta para ejecutar instrucciones SQL. Puede utilizarlo para crear una API de base de datos relacional para sus cargas de trabajo de MySQL y PostgreSQL en Aurora.

La creación de una API para su base de datos relacional con AWS AppSync tiene varias ventajas:

  • Su base de datos no está expuesta directamente a los clientes, lo que desacopla el punto de acceso de la propia base de datos.

  • Puede crear API diseñadas específicamente para que se adapten a las necesidades de las distintas aplicaciones, lo que elimina la necesidad de una lógica empresarial personalizada en los frontends. Esto se ajusta al patrón Backend-For-Frontend (BFF).

  • La autorización y el control de acceso se pueden implementar en la capa de AWS AppSync mediante diversos modos de autorización para controlar el acceso. No se requieren recursos informáticos adicionales para conectarse a la base de datos, como alojar un servidor web o establecer conexiones mediante proxy.

  • Las capacidades en tiempo real se pueden añadir mediante suscripciones, y las mutaciones de datos realizadas a través de AppSync se envían automáticamente a los clientes conectados.

  • Los clientes pueden conectarse a la API a través de HTTPS mediante puertos comunes, como el 443.

AWS AppSync facilita la creación de API a partir de bases de datos relacionales existentes. Su utilidad de introspección puede descubrir modelos a partir de tablas de bases de datos y proponer tipos de GraphQL. El asistente Creación de API de la consola de AWS AppSync puede generar una API al instante a partir de una base de datos Aurora MySQL o PostgreSQL. Crea automáticamente tipos y solucionadores de JavaScript para leer y escribir datos.

AWS AppSync ofrece utilidades de JavaScript integradas para simplificar la escritura de instrucciones SQL en los solucionadores. Puede utilizar las plantillas de la etiqueta sql de AWS AppSync para instrucciones estáticas con valores dinámicos o las utilidades del módulo rds para crear instrucciones mediante programación. Para obtener más información, consulte los orígenes de datos Referencia a la función de solucionador para RDS y los módulos integrados.

Uso de la característica de introspección (consola)

Para ver un tutorial detallado y una guía de introducción, consulte Tutorial: Aurora PostgreSQL sin servidor con API de datos.

La consola AWS AppSync le permite crear una API de GraphQL de AWS AppSync a partir de su base de datos de Aurora existente configurada con la API de datos en solo unos minutos. Esto genera rápidamente un esquema operativo basado en la configuración de la base de datos. Puede usar la API tal cual o desarrollarla para añadir características.

  1. Inicie sesión en la AWS Management Console y abra la consola de AppSync.

    1. En el Panel, elija Crear API.

  2. En Opciones de API, seleccione API de GraphQL, Comenzar con un clúster de Amazon Aurora y, a continuación, Siguiente.

    1. Escriba un Nombre de API. Se utilizará como identificador de la API en la consola.

    2. Para obtener los detalles de contacto, puede introducir un punto de contacto para identificar al administrador de la API. Se trata de un campo opcional.

    3. En Configuración de API privada, puede habilitar las características de API privadas. Solo se puede acceder a una API privada desde un punto de conexión de VPC (VPCE) configurado. Para obtener más información, consulte API privadas.

      No le recomendamos habilitar esta característica para este ejemplo. Seleccione Siguiente después de revisar sus entradas.

  3. En la página Base de datos, elija Seleccionar base de datos.

    1. Es necesario elegir la base de datos de su clúster. El primer paso es elegir la región en la que se encuentra el clúster.

    2. Elija el clúster de Aurora en la lista desplegable. Tenga en cuenta que debe haber creado y habilitado la API de datos correspondiente antes de utilizar el recurso.

    3. A continuación, debe añadir las credenciales de la base de datos al servicio. Esto se hace principalmente con AWS Secrets Manager. Elija la región en la que se encuentra su secreto. Para obtener más información sobre cómo recuperar información del secreto, consulte Buscar secretos o Recuperar secretos.

    4. Añada su secreto en la lista desplegable. Tenga en cuenta que el usuario debe tener permisos de lectura para su base de datos.

  4. Seleccione Importar.

    AWS AppSync empezará a realizar la introspección de la base de datos y descubrirá tablas, columnas, claves principales e índices. Comprueba que las tablas descubiertas se pueden admitir en una API de GraphQL. Tenga en cuenta que para permitir la creación de nuevas filas, las tablas necesitan una clave principal, que puede usar varias columnas. AWS AppSync asigna las columnas de la tabla a los campos de texto de la siguiente manera:

    Tipo de datos Tipo de campo
    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. Una vez que se haya completado la detección de tablas, la sección Base de datos se rellenará con su información. En la nueva sección Tablas de base de datos, es posible que los datos de la tabla ya estén rellenados y convertidos a un tipo para su esquema. Si no ve algunos de los datos necesarios, puede comprobarlos. Para ello, seleccione Añadir tablas, haga clic en las casillas de verificación de esos tipos en el modal que aparece y, a continuación, seleccione Añadir.

    Para eliminar un tipo de la sección Tablas de bases de datos, haga clic en la casilla de verificación situada junto al tipo que desea eliminar y, a continuación, seleccione Eliminar. Los tipos eliminados se colocarán en el modal Añadir tablas si desea volver a añadirlos más adelante.

    Tenga en cuenta que AWS AppSync utiliza los nombres de las tablas como nombres de tipos, pero puede cambiarles el nombre; por ejemplo, cambiar el nombre de una tabla en plural, como películas, por el nombre de tipo Película. Para cambiar el nombre de un tipo en la sección Tablas de bases de datos, haga clic en la casilla de verificación del tipo al que desee cambiar el nombre y, a continuación, haga clic en el icono del lápiz en la columna Nombre del tipo.

    Para obtener una vista previa del contenido del esquema en función de sus selecciones, elija Vista previa del esquema. Tenga en cuenta que este esquema no puede estar vacío, por lo que tendrá al menos una tabla convertida en un tipo. Además, este esquema no puede tener un tamaño superior a 1 MB.

    1. En Rol de servicio, elija si desea crear un nuevo rol de servicio específicamente para esta importación o utilizar un rol existente.

  6. Elija Siguiente.

  7. A continuación, elija si desea crear una API de solo lectura (solo consultas) o una API para leer y escribir datos (con consultas y mutaciones). Esta última también admite suscripciones en tiempo real activadas por mutaciones.

  8. Elija Siguiente.

  9. Revise sus opciones y, a continuación, seleccione Crear API. AWS AppSync creará la API y adjuntará los solucionadores a las consultas y mutaciones. La API generada es totalmente operativa y se puede ampliar según sea necesario.

Uso de la característica de introspección (API)

Puede usar la API de introspección StartDataSourceIntrospection para descubrir modelos en su base de datos mediante programación. Para obtener más información sobre el comando, consulte el uso de la API StartDataSourceIntrospection.

Para usar StartDataSourceIntrospection, proporcione el nombre de recurso de Amazon (ARN), el nombre de base de datos y el ARN del secreto AWS Secrets Manager de su clúster de Aurora. El comando inicia el proceso de introspección. Puede recuperar los resultados con el comando GetDataSourceIntrospection. Puede especificar si el comando debe devolver la cadena de lenguaje de definición de almacenamiento (SDL) de los modelos descubiertos. Esto resulta útil para generar una definición de esquema de SDL directamente a partir de los modelos descubiertos.

Por ejemplo, si tiene la siguiente instrucción de lenguaje de definición de datos (DDL) para una tabla Todos sencilla:

create table if not exists public.todos ( id serial constraint todos_pk primary key, description text, due timestamp, "createdAt" timestamp default now() );

Comience la introspección con lo siguiente.

aws appsync start-data-source-introspection \ --rds-data-api-config resourceArn=<cluster-arn>,secretArn=<secret-arn>,databaseName=database

A continuación, utilice el comando GetDataSourceIntrospection para recuperar el resultado.

aws appsync get-data-source-introspection \ --introspection-id a1234567-8910-abcd-efgh-identifier \ --include-models-sdl

Esto devuelve el resultado siguiente.

{ "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 } }