Zero-ETL Pipeline: Relájate y deja que los datos fluyan.
Tags: database, analytics, aws, spanish
Published: 2024-05-24 15:10:22

# Visualización de datos en tiempo real con OpenSearch y Amazon DynamoDB: A Zero-ETL Pipeline

🇻🇪🇨🇱 [Dev.to](https://dev.to/elizabethfuentes12) [Linkedin](https://www.linkedin.com/in/lizfue/) [GitHub](https://github.com/elizabethfuentes12/) [Twitter](https://twitter.com/elizabethfue12) [Instagram](https://www.instagram.com/elifue.tech) [Youtube](https://www.youtube.com/channel/UCr0Gnc-t30m4xyrvsQpNp2Q)
[Linktr](https://linktr.ee/elizabethfuentesleone)

{% embed https://dev.to/elizabethfuentes12 %}

[Amazon OpenSearch](https://docs.aws.amazon.com/es_es/opensearch-service/latest/developerguide/what-is.html) Service y Amazon DynamoDB proporcionan una poderosa combinación para la visualización de datos en tiempo real sin la necesidad de procesos complejos de Extracción, Transformación y Carga (ETL). Este repositorio introduce una pila de AWS Cloud Development Kit (CDK) que despliega una arquitectura sin servidor para la ingesta eficiente de datos en tiempo real utilizando el servicio [OpenSearch Ingestion](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ingestion.html) (OSIS).

Al aprovechar OSIS, puedes procesar y transformar datos de los streams de DynamoDB directamente en OpenSearch, permitiendo la visualización y análisis casi instantáneos. Esta canalización sin ETL elimina la sobrecarga de los flujos de trabajo tradicionales de transformación de datos, permitiéndote enfocarte en obtener información de tus datos.

El stack de CDK aprovisiona componentes clave como Amazon Cognito para autenticación, roles de IAM para acceso seguro, un dominio de OpenSearch para indexación y visualización, un bucket de S3 para respaldos de datos y una tabla de DynamoDB como fuente de datos. OpenSearch Ingestion actúa como el componente central, procesando eficientemente los datos basados en una configuración declarativa YAML.

## Requisitos previos

- [Cuenta de AWS](https://aws.amazon.com/resources/create-account/?sc_channel=el&sc_campaign=datamlwave&sc_content=cicdcfnaws&sc_geo=mult&sc_country=mult&sc_outcome=acq)
- [Conocimientos fundamentales de Python](https://catalog.us-east-1.prod.workshops.aws/workshops/3d705026-9edc-40e8-b353-bdabb116c89c/)

## 💰 Costo para completar:
- [Precios de Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/)
- [Precios de Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/pricing/) 
- [Precios de Amazon Cognito](https://aws.amazon.com/cognito/pricing/)
- [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/)

## ¿Cómo funciona esta aplicación?
![diagrama](https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization/blob/main/imagen/diagram.jpg?raw=true)

El flujo comienza con datos almacenados en Amazon DynamoDB, una base de datos NoSQL administrada y escalable. Luego, los datos se transmiten a [Amazon S3](https://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/Welcome.html).

Desde los datos en S3, se indexan utilizando Amazon OpenSearch, un servicio que permite la búsqueda y análisis en tiempo real en grandes volúmenes de datos. OpenSearch indexa los datos y los hace fácilmente accesibles para consultas rápidas.

El siguiente componente es Amazon Cognito, un servicio que permite la identidad del usuario y la gestión de acceso. Cognito autentica y autoriza a los usuarios para acceder al Panel de OpenSearch.

Se utiliza [AWS Identity and Access Management Roles](https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/id_roles.html) para definir roles y permisos de acceso.

Para crear una canalización de ingesta de OpenSearch, necesitas un [rol de IAM que la canalización](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/creating-pipeline.html?icmpid=docs_console_unmapped#manage-pipeline-prerequisites) asumirá para escribir datos en el sumidero (un dominio de OpenSearch Service o una colección de OpenSearch Serverless). El ARN del rol debe incluirse en la configuración de la canalización. El sumidero, que puede ser un dominio de OpenSearch Service (ejecutando OpenSearch 1.0+ o Elasticsearch 7.4+) o una colección de OpenSearch Serverless, debe tener una política de acceso que otorgue los permisos necesarios al rol de canalización de IAM. ([Otorgar acceso a las canalizaciones de ingesta de Amazon OpenSearch a dominios](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-domain-access.html) - [Otorgar acceso a las canalizaciones de ingesta de Amazon OpenSearch a colecciones](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-collection-access.html)).

OpenSearch Ingestion requiere [permisos específicos de IAM](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/creating-pipeline.html?icmpid=docs_console_unmapped#create-pipeline-permissions) para crear canalizaciones, incluyendo `osis:CreatePipeline` para crear una canalización, `osis:ValidatePipeline` para validar la configuración de la canalización, y `iam:PassRole` para pasar el rol de canalización a OpenSearch Ingestion, permitiéndole escribir datos en el dominio. El permiso `iam:PassRole` debe otorgarse en el [recurso de rol de canalización](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-domain-access.html#pipeline-access-configure) (especificado como sts_role_arn en la configuración de la canalización) o establecerse en * si se utilizarán diferentes roles para cada canalización.

El enlace principal de esta configuración de canalización es un [formato de archivo YAML](https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization/blob/main/dashboard/dashboard/template.txt) que conecta la tabla DynamoDB con OpenSearch:

La configuración de la canalización se realiza a través de un formato de archivo [YAML](https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization/blob/main/dashboard/dashboard/template.txt) como:

```
version: "2"
dynamodb-pipeline:
  source:
    dynamodb:
      acknowledgments: true
      tables:
        # REQUIRED: Supply the DynamoDB table ARN and whether export or stream processing is needed, or both
        - table_arn: "DYNAMODB_TABLE_ARN"
          # Remove the stream block if only export is needed
          stream:
            start_position: "LATEST"
          # Remove the export block if only stream is needed
          export:
            # REQUIRED for export: Specify the name of an existing S3 bucket for DynamoDB to write export data files to
            s3_bucket: "<<my-bucket>>"
            # Specify the region of the S3 bucket
            s3_region: "<<REGION_NAME>"
            # Optionally set the name of a prefix that DynamoDB export data files are written to in the bucket.
            s3_prefix: "ddb-to-opensearch-export/"
      aws:
        # REQUIRED: Provide the role to assume that has the necessary permissions to DynamoDB, OpenSearch, and S3.
        sts_role_arn: "<<STS_ROLE_ARN>>"
        # Provide the region to use for aws credentials
        region: "<<REGION_NAME>>"
  sink:
    - opensearch:
        # REQUIRED: Provide an AWS OpenSearch endpoint
        hosts:
          [
            "<<https://OpenSearch_DOMAIN>>"
          ]
        index: "<<table-index>>"
        index_type: custom
        document_id: "${getMetadata(\"primary_key\")}"
        action: "${getMetadata(\"opensearch_action\")}"
        document_version: "${getMetadata(\"document_version\")}"
        document_version_type: "external"
        aws:
          # REQUIRED: Provide a Role ARN with access to the domain. This role should have a trust relationship with osis-pipelines.amazonaws.com
          sts_role_arn: "<<STS_ROLE_ARN>>"
          # Provide the region of the domain.
          region: "<<REGION_NAME>>"
```
El archivo de configuración de la canalización se crea automáticamente en la pila CDK junto con todos los demás recursos.

## ¡Construyamos!

### Paso 1: Configuración de la APP

✅ **Clonar el repositorio**

```
git clone https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization
```

✅ **Ir a**:

```
cd dashboard
```

- Configurar la [Interfaz de línea de comandos de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

- Implemente la arquitectura con CDK [Siga los pasos:](https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization/blob/main/dashboard/README.md)

✅ **Cree el Entorno Virtual**: siguiendo los pasos en el [README](https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization/blob/main/dashboard/README.md)

```
python3 -m venv .venv
```

```
source .venv/bin/activate
```
para windows: 

```
.venv\Scripts\activate.bat
```

✅ **Instale los Requisitos**:

```
pip install -r requirements.txt
```

✅ **Sintetice la Plantilla de Cloudformation con el Siguiente Comando**:

```
cdk synth
```

✅🚀 **El Despliegue**:

```
cdk deploy
```

El despliegue tomará entre 5 y 10 minutos, que es el tiempo que tarda en crearse el dominio de OpenSearch.

Cuando esté listo, verá que el estado cambia a completado:

![Authentication](https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization/blob/main/imagen/domain_done.jpg?raw=true)

Para acceder a los Dashboards de OpenSearch a través de la [URL de Dashboards de OpenSearch (IPv4)](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/dashboards.html) necesita [crear un usuario en los grupos de usuarios de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/managing-users.html?icmpid=docs_cognito_console_help_panel).

![Authentication](https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization/blob/main/imagen/domain_information.jpg?raw=true)

Con el usuario creado, acceda al Dashboard y comience a experimentar la magia de Zero-ETL entre la tabla de DynamoDB y OpenSearch.

En este repositorio, creó una tabla a la que puede inyectar datos, pero también puede cambiarla [Actualizando las tuberías de ingesta de Amazon OpenSearch](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/update-pipeline.html) realizando un cambio en el archivo YAML o modificando la [pila CDK](https://github.com/build-on-aws/realtime-dynamodb-zero-etl-opensearch-visualization/blob/main/dashboard/dashboard/dashboard_stack.py).

## Conclusión

La combinación de Amazon OpenSearch y Amazon DynamoDB permite la visualización de datos en tiempo real sin las complejidades de los procesos ETL tradicionales. Al utilizar el Servicio de Ingesta de OpenSearch (OSIS), se puede implementar una arquitectura sin servidor que procesa y transforma eficientemente los datos de DynamoDB directamente en OpenSearch. La construcción de la aplicación con AWS CDK simplifica la configuración de componentes clave como la autenticación, el acceso seguro, la indexación, la visualización y el respaldo de datos.

Este es el contenido del blog traducido al español:

Esta solución permite a los usuarios centrarse en obtener información de sus datos en lugar de administrar la infraestructura. Ideal para paneles de control en tiempo real, análisis de registros o monitoreo de eventos de IoT, este pipeline Zero-ETL ofrece un enfoque escalable y ágil para la ingesta y visualización de datos. Se recomienda clonar el repositorio, personalizar la configuración e implementar la pila en AWS para aprovechar el poder de OpenSearch y DynamoDB para la visualización de datos en tiempo real.

{% embed https://dev.to/elizabethfuentes12 %}

🇻🇪🇨🇱 [Dev.to](https://dev.to/elizabethfuentes12) [Linkedin](https://www.linkedin.com/in/lizfue/) [GitHub](https://github.com/elizabethfuentes12/) [Twitter](https://twitter.com/elizabethfue12) [Instagram](https://www.instagram.com/elifue.tech) [Youtube](https://www.youtube.com/channel/UCr0Gnc-t30m4xyrvsQpNp2Q)
[Linktr](https://linktr.ee/elizabethfuentesleone)