Gestión de cambios importantes en el índice - Amazon DynamoDB

Gestión de cambios importantes en el índice

OpenSearch puede añadir nuevos atributos a su índice de forma dinámica. Sin embargo, después de configurar la plantilla de asignación para una clave determinada, tendrá que tomar medidas adicionales para cambiarla. Además, si el cambio requiere que vuelva a procesar todos los datos de la tabla de DynamoDB, tendrá que tomar medidas para iniciar una nueva exportación.

nota

En todas estas opciones, es posible que siga teniendo problemas si la tabla de DynamoDB tiene conflictos de tipo con la plantilla de asignación que ha especificado. Asegúrese de tener activada una cola de mensajes fallidos (DLQ) (incluso en desarrollo). Esto facilita la comprensión sobre lo que puede estar mal en el registro que provoca un conflicto cuando se indexa en su índice en OpenSearch.

Funcionamiento

Esta es una visión global rápida de las medidas que se deben tomar al gestionar cambios importantes en un índice. Consulte los procedimientos paso a paso en las secciones siguientes.

  • Detener e iniciar la canalización: esta opción restablece el estado de la canalización y esta se reiniciará con una nueva exportación completa. No es destructivo, por lo que no elimina el índice ni ningún dato de DynamoDB. Si no crea un índice nuevo antes de hacerlo, es posible que se produzca un gran número de errores debido a conflictos de versiones, ya que la exportación intenta insertar documentos más antiguos que los actuales de _version del índice. Estos errores se pueden ignorar tranquilamente. No se le facturará por la canalización mientras esté detenida.

  • Actualizar la canalización: esta opción actualiza la configuración de la canalización con un enfoque azul/verde, sin perder ningún estado. Si realizas cambios importantes en la canalización (como añadir nuevas rutas, índices o claves a los índices existentes), es posible que tengas que restablecer completamente la canalización y volver a crear el índice. Esta opción no realiza una exportación completa.

  • Eliminar y volver a crear el índice: esta opción elimina los datos y la configuración de asignación del índice. Debe hacerlo antes de realizar cualquier cambio importante en las asignaciones. Romperá cualquier aplicación que dependa del índice hasta que se vuelva a crear y sincronizar el índice. Al eliminar el índice no se inicia ninguna nueva exportación. Deberías eliminar el índice después de actualizar la canalización. De lo contrario, es posible que se vuelva a crear el índice antes de que se actualice la configuración.

Eliminación del índice y restablecimiento de la canalización (opción centrada en la canalización)

Este método suele ser la opción más rápida si aún se encuentra en la fase de desarrollo. Deberá eliminar el índice en OpenSearch Service y, a continuación, detener e iniciar la canalización para iniciar una nueva exportación de todos los datos. De esta manera se garantiza que no haya conflictos entre las plantillas de asignación y los índices existentes y que no se pierdan datos porque la tabla no se ha procesado por completo.

  1. Detenga la canalización desde la AWS Management Console o use la operación de la API StopPipeline con la AWS CLI o un SDK.

  2. Actualice la configuración de la canalización con los nuevos cambios.

  3. Elimine el índice en OpenSearch Service, ya sea mediante una llamada a la API REST o desde el panel de OpenSearch.

  4. Inicie la canalización desde la consola o use la operación de la API StartPipeline con la AWS CLI o un SDK.

    nota

    Al hacerlo, se inicia una nueva exportación completa, que incurrirá en costos adicionales.

  5. Monitoree cualquier problema inesperado, pues se genera una nueva exportación para crear el nuevo índice.

  6. Confirme que el índice coincide con sus expectativas en OpenSearch Service.

Cuando se complete la exportación y se reanude la lectura de la secuencia, los datos de la tabla de DynamoDB estarán disponibles en el índice.

Recreación del índice y restablecimiento de la canalización (opción centrada en el índice)

Este método es adecuado si necesita realizar muchas iteraciones en el diseño del índice en OpenSearch Service antes de reanudar la canalización desde DynamoDB. Esto puede resultar útil para el desarrollo si se quiere iterar rápidamente los patrones de búsqueda y quiere evitar tener que esperar a que se completen nuevas exportaciones entre cada iteración.

  1. Detenga la canalización desde la AWS Management Console o llame a la operación de la API StopPipeline con la AWS CLI o un SDK.

  2. Elimine y vuelva a crear el índice en OpenSearch con la plantilla de asignación que desee usar. Puede insertar manualmente algunos datos de muestra para confirmar que las búsquedas funcionan según lo previsto. Si los datos de muestra pueden entrar en conflicto con algún dato de DynamoDB, asegúrese de eliminarlos antes de continuar con el siguiente paso.

  3. Si tiene una plantilla de indexación en proceso, elimínela o sustitúyala por una que ya haya creado en OpenSearch Service. Asegúrese de que el nombre de su índice coincida con el nombre de la canalización.

  4. Inicie la canalización desde la consola o llame a la operación de la API StartPipeline con la AWS CLI o un SDK.

    nota

    Al hacerlo, se inicia una nueva exportación completa, que incurrirá en costos adicionales.

  5. Monitoree cualquier problema inesperado, pues se genera una nueva exportación para crear el nuevo índice.

Cuando se complete la exportación y se reanude la lectura de la secuencia, los datos de la tabla de DynamoDB estarán disponibles en el índice.

Creación de un índice y un receptor nuevos (opción en línea)

Este método funciona bien si tiene que actualizar su plantilla de asignación, pero está utilizando el índice en producción. Esto crea un índice completamente nuevo, al que tendrá que mover la aplicación después de sincronizarla y validarla.

nota

De este modo se creará otro consumidor en la secuencia. Esto puede ser un problema si también tiene otros consumidores como AWS Lambda o tablas globales. Es posible que tenga que pausar las actualizaciones de la canalización existente para crear capacidad para cargar el nuevo índice.

  1. Cree una nueva canalización con una nueva configuración y un nombre de índice diferente.

  2. Monitoree el nuevo índice para detectar cualquier problema inesperado.

  3. Cambie la aplicación al nuevo índice.

  4. Detenga y elimine la canalización anterior después de comprobar que todo funciona correctamente.

Prácticas recomendadas para evitar y depurar los conflictos de tipos

  • Utilice siempre una cola de mensajes fallidos (DLQ) para facilitar la depuración cuando haya conflictos de tipos.

  • Utilice siempre una plantilla de índice con asignaciones y establezca include_keys. Si bien OpenSearch Service asigna nuevas claves de forma dinámica, esto puede provocar problemas con comportamientos inesperados (como esperar que algo sea un GeoPoint, pero se crea como string o object) o errores (como tener un number que es una combinación de valores long y float).

  • Si necesita que el índice actual siga funcionando durante la fase de producción, también puede sustituir cualquiera de los pasos anteriores para eliminar el índice y cambiarle el nombre al índice en el archivo de configuración de la canalización. Al hacerlo se crea un índice completamente nuevo. A continuación, tendrá que actualizar la aplicación para que apunte hacia el nuevo índice una vez que se haya completado.

  • Si tiene un problema de conversión de tipos que haya solucionado con un procesador, puede probarlo con UpdatePipeline. Para ello, tendrá que detener e iniciar o procesar las colas de mensajes fallidos para corregir cualquier documento que se hubiera omitido previamente y que tuviera errores.