Creé un punto final de AWS Firehose (podría cambiar a Kinesis simple) que recibe registros de los productores y los guarda en un depósito S3 y una función lambda que consume datos, los procesa y guarda la salida en db.
Todo funciona bien. Ahora estoy planeando crear un flujo de puesta en escena y desarrollo para toda esta estructura. Cuando lanzo una nueva versión, no soy capaz de reemplazar productores completos al instante, por lo tanto, necesito mantener las versiones de producción anteriores hasta que no quede ningún productor, porque podría hacer cambios de protocolo importantes en las nuevas versiones.
No estoy seguro de cuál sería el mejor enfoque para crear un sistema versionable usando kinesis y lambda. ¿Debería copiar la estructura completa para las nuevas versiones (incluido el desarrollo y la puesta en escena) y hacer que los productores escriban en un flujo versionado específico?
¿O debería crear una función lambda media que inspeccione los paquetes (que contienen su información de versión) y envíe eventos a un s3 específico que tenga carpetas versionadas? Para que las funciones lambda consuman solo los datos que conocen. Esto me permitirá usar el soporte de versiones para las funciones lambda.
Aquí hay una imagen de estructura para la primera idea.
Aquí está la segunda estructura.
Me pregunto cuál será una mejor solución o hay mejores formas de lograr esto
En primer lugar, Lambdas se puede activar directamente con Kinesis, sin necesidad de Kinesis Firehose o S3.
En segundo lugar, su pregunta realmente se reduce a: ¿necesita una canalización separada de Kinesis+Lambda por versión o no? Yo iría con la siguiente solución:
Las ventajas del enfoque anterior frente a una canalización de Kinesis+Lambda por versión:
Por supuesto, mantenga separadas las canalizaciones de desarrollo y producción, para minimizar el radio de explosión del código de código incorrecto en el anterior.