¿Cómo puedo notificar a los suscriptores de AWS AppSync las actualizaciones de bases de datos externas que no se producen por mutaciones por el lado del cliente?

8 minutos de lectura
0

Necesito que los clientes de mi aplicación se actualicen en tiempo real cuando se hagan cambios en la base de datos externa que no se hagan mediante mutaciones del lado del cliente. ¿Cómo utilizo AWS AppSync para notificar a los suscriptores acerca de estos cambios?

Descripción breve

Utilice solucionadores locales para notificar a los suscriptores acerca de los cambios en la base de datos externa en tiempo real, sin llamar al origen de datos. Por ejemplo, los solucionadores locales son útiles para las aplicaciones que actualizan la información con regularidad, como la aplicación de una aerolínea.

Complete los pasos de la sección Resolución para crear un ejemplo de API de GraphQL. La API de GraphQL actualiza a los suscriptores en tiempo real cuando los datos se escriben en un origen de datos de tablas de Amazon DynamoDB.

Resolución

Cree una API de GraphQL mediante el asistente

Utilice el asistente de esquemas guiados de AWS AppSync para crear una nueva API de GraphQL. Para obtener más información, consulte Diseño de una API de GraphQL.

1.    Abra la consola de AWS AppSync.

2.    Elija Crear API.

3.    En la página de Introducción, en Personalice su API o importe desde Amazon DynamoDB, elija Crear con el asistente y, a continuación, elija Iniciar.

4.    En la página Crear un modelo:
En Asignar un nombre al modelo, introduzca un nombre para el modelo. Para este ejemplo, Book es el nombre.
En Configurar los campos del modelo, defina los tipos de datos de la aplicación. Para esta configuración de ejemplo, mantenga los nombres de campo predeterminados (ID y título) y los tipos.
(Opcional) Amplíe Configurar la tabla del modelo (opcional) para añadir un índice.
Elija Crear.

5.    En la página Crear recursos, introduzca un nombre para su API. A continuación, seleccione Crear. AWS AppSync crea la API y abre la página de consultas de la API.

Crear una suscripción de prueba

1.    Abra la consola de AWS AppSync.

2.    Vaya a la página de consultas de su API y, a continuación, abra una pestaña o ventana duplicada del navegador.

3.    En la pestaña o ventana duplicada del navegador, borre el contenido del editor de consultas e introduzca la siguiente consulta:

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

La consulta anterior crea una suscripción a mutaciones createBook.

4.    Seleccione el botón de reproducción (Ejecutar consulta). La pestaña o ventana duplicada del navegador está suscrita a mutaciones createBook.

5.    En la pestaña o ventana original del navegador, elija el botón de reproducción (Ejecutar consulta) y, a continuación, elija createBook para ejecutar la mutación. Los resultados se muestran tanto en las pestañas o ventanas del navegador original como en las duplicadas (suscripción).

6.    Cuando vea la suscripción, cierre la pestaña o ventana duplicada del navegador.

Crear un origen de datos sin tipo

El tipo de origen de datos Ninguno pasa la plantilla de asignación de solicitudes directamente a la plantilla de asignación de respuestas.

1.    En la pestaña o ventana original del navegador, abra la consola de AWS AppSync.

2.    En el panel de navegación de la izquierda, seleccione Orígenes de datos.

3.    Elija Crear origen de datos.

4.    En la página Nuevo origen de datos, en Crear el origen de datos nuevo, complete los siguientes pasos:
En Nombre del origen de datos, introduzca un nombre. Por ejemplo, real_time_data.
En Tipo de origen de datos, elija Ninguno.

5.    Elija Crear.

Para obtener más información, consulte Adjuntar un origen de datos.

Añadir una mutación al esquema

Cree una segunda mutación para que la utilice un administrador o para activarla cuando actualice el esquema.

Actualice el esquema con una mutación que transfiera las actualizaciones de la base de datos al origen de datos de tipo Ninguno.

1.    Abra la consola de AWS AppSync.

2.    En el panel de navegación de la izquierda, seleccione Esquema.

3.    En el editor de esquemas, en el campo Tipo de mutación {, añada el siguiente comando para crear el nuevo tipo de mutación para las actualizaciones externas:

createBookExt(input: CreateBookInput!): Book

4.    En el editor de esquemas, en Tipo de suscripción {, busque la siguiente línea:

onCreateBook(id: ID, title: String): Book
        @aws_subscribe(mutations: ["createBook"])

5.    Añada «createBookExt» a la lista de mutaciones:

onCreateBook(id: ID, title: String): Book
        @aws_subscribe(mutations: ["createBook", "createBookExt"])

6.    Seleccione Guardar esquema.

Para obtener más información, consulte Diseñar el esquema.

Adjuntar un solucionador a la mutación

1.    Abra la consola de AWS AppSync.

2.    En la página de esquemas de su API, en Solucionadores, desplácese hacia abajo hasta Mutación. O bien, para los Tipos de filtros, introduzca Mutación.

3.    Junto a createBookExt(...): Book, en Solucionador, seleccione Adjuntar.

4.    En la página Crear el solucionador nuevo, en Nombre del origen de datos, elija el nombre del origen de datos de tipo Ninguno tipo que creó. Por ejemplo, real_time_data.

5.    En Configurar la plantilla de asignación de solicitudes, busque la función de solicitud:

export function request(ctx) {
    return {};
}

6.    Modifique la función para devolver ctx.args:

export function request(ctx) {
    return ctx.args;
}

7.    Elija Crear.

Para obtener más información, consulte Configuración de solucionadores (VTL).

Crear una nueva suscripción de prueba

1.    Abra la consola de AWS AppSync.

2.    En el panel de navegación de la izquierda, seleccione Consultas.

3.    En la página Consultas de su API, abra una pestaña o ventana del navegador duplicada.

4.    En la pestaña o ventana duplicada del navegador, borre el contenido del editor de consultas e introduzca la siguiente consulta:

subscription onCreateBook {
  onCreateBook {
    id
    title
  }
}

5.    Seleccione el botón de reproducción (Ejecutar consulta). La pestaña o ventana duplicada del navegador ahora está suscrita a las mutaciones createBook y createBookExt.

Crear una nueva mutación de prueba

1.    En la pestaña o ventana original del navegador, en la página Consultas de su API, borre el contenido del editor de consultas. A continuación, introduzca la siguiente consulta:

mutation createBook($createbookinput: CreateBookInput!) {
  createBook(input: $createbookinput) {
    id
    title
  }
}

En la sección Variables de consulta de la parte inferior del editor, borre el contenido e introduzca la siguiente consulta:

{
  "createbookinput": {
    "title": "My New Book"
  }
}

La consulta anterior crea un nuevo Book con la mutación createBook.

2.    Seleccione el botón de reproducción (Ejecutar consulta).

3.    En la pestaña o ventana duplicada del navegador (suscripción), observe que el suscriptor recibe la actualización en tiempo real.

(Opcional) Consulte ejemplos de casos de uso

Al crear la aplicación de cliente y aplicar estos conceptos, puede utilizar el siguiente ejemplo de creación de una aplicación de aerolínea que proporciona precios y horarios de vuelo.

Los siguientes pasos muestran cómo notificar a los clientes suscritos cuando cambian los detalles del vuelo en una tabla de DynamoDB:

1.    Cree una función de AWS Lambda que utilice una transmisión de DynamoDB como desencadenador. Cuando la tabla de DynamoDB se actualiza, invoca la función de Lambda. Para obtener más información, consulte Uso de AWS Lambda con Amazon DynamoDB.

2.    En el código de la función de Lambda, incluya la lógica para filtrar las actualizaciones adecuadas y hacer una llamada de mutación a AWS AppSync. Esto hace que AWS AppSync notifique a los suscriptores a través de la suscripción. Para obtener más información, consulte el Tutorial: Solucionadores de AWS Lambda.

3.    En AWS AppSync, añada un nuevo campo de mutación (por ejemplo, denominado publishPrice) con un solucionador local.

4.    Suscríbase a esa mutación en un campo de suscripción (por ejemplo, denominado onPriceUpdate).

Esquema de ejemplo

type flightDetails {
  id: ID!
  src: String!
  destn: String!
  price : Int
}

type Mutation {
   # A local resolver targeting a None data source that publishes the message to subscribed clients.
  publishPrice(price: Int): flightDetails
}

type Subscription {
  # Notified whenever *publishPrice* is called.
  onPriceUpdate: Message
    @aws_subscribe(mutations: ["publishPrice"])
}

type Query { ... }

Para obtener más información, consulte Diseñar el esquema.

5.    Cree otra función de AWS Lambda que utilice una transmisión de DynamoDB como activación. En esta función, llame a la mutación publishPrice. Como la mutación de publishPrice tiene un solucionador local, los datos no se vuelven a escribir en DynamoDB. Con este método, puede utilizar AWS AppSync como agente de PubSub.

Para obtener más información y otro ejemplo de caso de uso, consulte el Tutorial: Solucionador locales.


Información relacionada

Tutoriales de solucionadores (VTL)

Ejecutar consultas y mutaciones

Referencia de plantilla de asignación de solucionadores (VTL)