• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página
Bluetab

Bluetab

an IBM Company

  • Soluciones
    • DATA STRATEGY
    • DATA READINESS
    • DATA PRODUCTS AI
  • Assets
    • TRUEDAT
    • FASTCAPTURE
    • Spark Tune
  • Conócenos
  • Oficinas
    • España
    • Mexico
    • Perú
    • Colombia
  • talento
    • España
    • TALENT HUB BARCELONA
    • TALENT HUB BIZKAIA
    • TALENT HUB ALICANTE
    • TALENT HUB MÁLAGA
  • Blog
  • English

Bluetab

Cómo depurar una Lambda de AWS en local

octubre 8, 2020 by Bluetab

Cómo depurar una Lambda de AWS en local

Bluetab

AWS Lambda es un servicio serverless mediante el que se puede ejecutar código sin necesidad de levantar ni administrar máquinas. Se paga solamente por el tiempo consumido en la ejecución (15 minutos como máximo).

El servicio dispone de un IDE simple, pero por su propia naturaleza no permite añadir puntos de ruptura para depurar el código. Seguro que algunos de vosotros os habéis visto en esta situación y habéis tenido que hacer uso de métodos poco ortodoxos como prints o ejecutar el código directamente en vuestra máquina, pero esto último no reproduce las condiciones reales de ejecución del servicio.

Para permitir depurar con fiabilidad desde nuestro propio PC, AWS pone a disposición SAM (Serverless Application Model).

Instalación

Los requisitos necesarios son (se ha usado Ubuntu 18.04 LTS):

  • Python (2.7 ó >= 3.6)
  • Docker
  • IDE que se pueda enlazar a un puerto de debug (en nuestro caso usamos VS Code)
  • awscli


Para instalar la CLI de AWS SAM desde AWS recomiendan brew tanto para Linux como macOS, pero en este caso se ha optado por hacerlo con pip por homogeneidad:

python3 -m pip install aws-sam-cli 

Configuración y ejecución

1. Iniciamos un proyecto SAM

sam init 
  • Por simplicidad se selecciona “AWS Quick Start Templates” para crear un proyecto a través de plantillas predefinidas
  • Se elige la opción 9 – python3.6 como el lenguaje del código que contendrá nuestra lambda
  • Se selecciona la plantilla de “Hello World Example»

En este momento ya tenemos nuestro proyecto creado en la ruta especificada:

  • /helloworld: app.py con el código Python a ejecutar y requirements.txt con sus dependencias
  • /events: events.json con ejemplo de evento a enviar a la lambda para su ejecución. En nuestro caso el trigger será un GET a la API a http://localhost:3000/hello
  • /tests : test unitario
  • template.yaml: plantilla con los recursos de AWS a desplegar en formato YAML de CloudFormation. En esta aplicación de ejemplo sería un API gateway + lamba y se emulará ese despliegue localmente

2. Se levanta la API en local y se hace un GET al endpoint

sam local start-api 

Concretamente el endpoint de nuestro HelloWorld
será http://localhost:3000/hello Hacemos un GET

Y obtenemos la respuesta de la API

3. Añadimos la librería ptvsd (Python Tools for Visual Studio) para debugging a requirements.txt quedando como:

requests
ptvsd 

4. Habilitamos el modo debug en el puerto 5890 haciendo uso del siguiente código en helloworld/app.py

import ptvsd

ptvsd.enable_attach(address=('0.0.0.0', 5890), redirect_output=True)
ptvsd.wait_for_attach() 

Añadimos también en app.py dentro de la función lambda_handler varios prints para usar en la depuración

print('punto de ruptura')

print('siguiente línea')

print('continúa la ejecución')

return {
    "statusCode": 200,
    "body": json.dumps({
        "message": "hello world",
        # "location": ip.text.replace("\n", "")
    }),
} 

5. Aplicamos los cambios realizados y construimos el contenedor

sam build --use-container 

6. Configuramos el debugger de nuestro IDE

En VSCode se utiliza el fichero launch.json. Creamos en la ruta principal de nuestro proyecto la carpeta .vscode y dentro el fichero

{
  "version": "0.2.0",
  "configurations": [
      {
          "name": "SAM CLI Python Hello World",
          "type": "python",
          "request": "attach",
          "port": 5890,
          "host": "127.0.0.1",
          "pathMappings": [
              {
                  "localRoot": "${workspaceFolder}/hello_world",
                  "remoteRoot": "/var/task"
              }
          ]
      }
  ]
} 

7. Establecemos un punto de ruptura en el código en nuestro IDE

8. Levantamos nuestra aplicación con la API en el puerto de debug

sam local start-api --debug-port 5890 

9. Hacemos de nuevo un GET a la URL del endpoint http://localhost:3000/hello

10. Lanzamos la aplicación desde VSCode en modo debug, seleccionando la configuración creada en launch.json

Y ya estamos en modo debug, pudiendo avanzar desde nuestro punto de ruptura

Alternativa: Se puede hacer uso de events/event.json para lanzar la lambda a través de un evento definido por nosotros

En este caso lo modificamos incluyendo un solo parámetro de entrada:

{
   "numero": "1"
} 
Y el código de nuestra función para hacer uso del evento:
print('punto de ruptura número: ' + event["numero"]) 
De esta manera, invocamos a través del evento en modo debug:
sam local invoke HelloWorldFunction -d 5890 -e events/event.json 
Podemos ir depurando paso a paso, viendo como en este caso se hace uso del evento creado:
¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

KubeCon 2023: Una mirada hacia el futuro de Kubernetes

abril 26, 2023
LEER MÁS

Workshop Ingeniería del caos sobre Kubernetes con Litmus

julio 7, 2021
LEER MÁS

Análisis de vulnerabilidades en contenedores con trivy

marzo 22, 2024
LEER MÁS

LakeHouse Streaming on AWS with Apache Flink and Hudi (Part 2)

octubre 4, 2023
LEER MÁS

LakeHouse Streaming en AWS con Apache Flink y Hudi (Parte 2)

octubre 4, 2023
LEER MÁS

Bluetab en la ElixirConfEU 2023

mayo 3, 2023
LEER MÁS

Publicado en: Blog, Tech

Cómo depurar una Lambda de AWS en local

octubre 8, 2020 by Bluetab

Cómo depurar una Lambda de AWS en local

Bluetab

AWS Lambda es un servicio serverless mediante el que se puede ejecutar código sin necesidad de levantar ni administrar máquinas. Se paga solamente por el tiempo consumido en la ejecución (15 minutos como máximo).

El servicio dispone de un IDE simple, pero por su propia naturaleza no permite añadir puntos de ruptura para depurar el código. Seguro que algunos de vosotros os habéis visto en esta situación y habéis tenido que hacer uso de métodos poco ortodoxos como prints o ejecutar el código directamente en vuestra máquina, pero esto último no reproduce las condiciones reales de ejecución del servicio.

Para permitir depurar con fiabilidad desde nuestro propio PC, AWS pone a disposición SAM (Serverless Application Model).

Instalación

Los requisitos necesarios son (se ha usado Ubuntu 18.04 LTS):

  • Python (2.7 ó >= 3.6)
  • Docker
  • IDE que se pueda enlazar a un puerto de debug (en nuestro caso usamos VS Code)
  • awscli


Para instalar la CLI de AWS SAM desde AWS recomiendan brew tanto para Linux como macOS, pero en este caso se ha optado por hacerlo con pip por homogeneidad:

python3 -m pip install aws-sam-cli 

Configuración y ejecución

1. Iniciamos un proyecto SAM

sam init 
  • Por simplicidad se selecciona “AWS Quick Start Templates” para crear un proyecto a través de plantillas predefinidas
  • Se elige la opción 9 – python3.6 como el lenguaje del código que contendrá nuestra lambda
  • Se selecciona la plantilla de “Hello World Example»

En este momento ya tenemos nuestro proyecto creado en la ruta especificada:

  • /helloworld: app.py con el código Python a ejecutar y requirements.txt con sus dependencias
  • /events: events.json con ejemplo de evento a enviar a la lambda para su ejecución. En nuestro caso el trigger será un GET a la API a http://localhost:3000/hello
  • /tests : test unitario
  • template.yaml: plantilla con los recursos de AWS a desplegar en formato YAML de CloudFormation. En esta aplicación de ejemplo sería un API gateway + lamba y se emulará ese despliegue localmente

2. Se levanta la API en local y se hace un GET al endpoint

sam local start-api 

Concretamente el endpoint de nuestro HelloWorld
será http://localhost:3000/hello Hacemos un GET

Y obtenemos la respuesta de la API

3. Añadimos la librería ptvsd (Python Tools for Visual Studio) para debugging a requirements.txt quedando como:

requests
ptvsd 

4. Habilitamos el modo debug en el puerto 5890 haciendo uso del siguiente código en helloworld/app.py

import ptvsd

ptvsd.enable_attach(address=('0.0.0.0', 5890), redirect_output=True)
ptvsd.wait_for_attach() 

Añadimos también en app.py dentro de la función lambda_handler varios prints para usar en la depuración

print('punto de ruptura')

print('siguiente línea')

print('continúa la ejecución')

return {
    "statusCode": 200,
    "body": json.dumps({
        "message": "hello world",
        # "location": ip.text.replace("\n", "")
    }),
} 

5. Aplicamos los cambios realizados y construimos el contenedor

sam build --use-container 

6. Configuramos el debugger de nuestro IDE

En VSCode se utiliza el fichero launch.json. Creamos en la ruta principal de nuestro proyecto la carpeta .vscode y dentro el fichero

{
  "version": "0.2.0",
  "configurations": [
      {
          "name": "SAM CLI Python Hello World",
          "type": "python",
          "request": "attach",
          "port": 5890,
          "host": "127.0.0.1",
          "pathMappings": [
              {
                  "localRoot": "${workspaceFolder}/hello_world",
                  "remoteRoot": "/var/task"
              }
          ]
      }
  ]
} 

7. Establecemos un punto de ruptura en el código en nuestro IDE

8. Levantamos nuestra aplicación con la API en el puerto de debug

sam local start-api --debug-port 5890 

9. Hacemos de nuevo un GET a la URL del endpoint http://localhost:3000/hello

10. Lanzamos la aplicación desde VSCode en modo debug, seleccionando la configuración creada en launch.json

Y ya estamos en modo debug, pudiendo avanzar desde nuestro punto de ruptura

Alternativa: Se puede hacer uso de events/event.json para lanzar la lambda a través de un evento definido por nosotros

En este caso lo modificamos incluyendo un solo parámetro de entrada:

{
   "numero": "1"
} 
Y el código de nuestra función para hacer uso del evento:
print('punto de ruptura número: ' + event["numero"]) 
De esta manera, invocamos a través del evento en modo debug:
sam local invoke HelloWorldFunction -d 5890 -e events/event.json 
Podemos ir depurando paso a paso, viendo como en este caso se hace uso del evento creado:
¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

Cómo preparar la certificación AWS Data Analytics – Specialty

noviembre 17, 2021
LEER MÁS

Data-Drive Agriculture; Big Data, Cloud & AI aplicados

noviembre 4, 2020
LEER MÁS

LA BANCA Y LA ERA DEL OPEN DATA

abril 19, 2023
LEER MÁS

Cambios de liderazgo en Bluetab EMEA

abril 3, 2024
LEER MÁS

Azure Data Studio y Copilot

octubre 11, 2023
LEER MÁS

PERSONAL MAPS: conociéndonos más

octubre 24, 2023
LEER MÁS

Publicado en: Blog, Tech

¿Cuánto vale tu cliente?

octubre 1, 2020 by Bluetab

¿Cuánto vale tu cliente?

Bluetab

Nuestro cliente es una multinacional referente del sector de la energía con inversiones en extracción, generación y distribución, con importante implantación en Europa y Latinoamérica. Actualmente está desarrollando iniciativas de inteligencia de negocio explotando sus datos con soluciones embebidas sobre plataformas cloud. 

El problema que tenía era gordo ya que, para generar cualquier caso de uso, había que consultar un sinnúmero de fuentes de información generadas manualmente por diversos departamentos esto incluye archivos de texto y hojas de cálculo, pero no solo eso, también había que echar mano de sistemas de información que van desde Oracle DB hasta Salesforce. 

«El problema que tenía era gordo ya que, para generar cualquier caso de uso, había que consultar un sin número de fuentes de información generadas manualmente.»

La solución estaba clara, había que concentrar toda la información necesaria en un solo lugar, de manera segura, disponible en todo momento, organizada y sobre todo, eficiente en costos. La decisión fue implementar un DataLake en la nube de AWS.

En la evolución del proyecto, el cliente está preocupado ante las vulnerabilidades de sus servidores locales donde ha tenido algunos problemas con la disponibilidad de sus servicios e incluso la intrusión de un virus informático, a lo que /bluetab propone migrar los procesos más críticos completamente a la nube, entre ellos un modelo de segmentación de clientes, desarrollado en R. 

Para segmentar la cartera de clientes se requiere de un ETL desarrollado en Python usando como DWH Amazon Redshift, donde además se ejecuta a demanda un clúster Big Data EMR con tareas desarrolladas en Scala para manejar grandes volúmenes de información de transacciones generadas de manera diaria. Los resultados del proceso que anteriormente eran alojados y explotados desde un servidor Microstrategy, ahora fueron desarrollados en reportes y dashboards usando Power BI.

«…el nuevo diseño de la arquitectura y la mejor gestión de los servicios cloud en su uso diario, nos permitió optimizar la facturación en la nube reduciendo en mas de un 50% el OPEX»

No solo logramos integrar un cúmulo importante de información de negocio en un repositorio centralizado y gobernado, sino que el nuevo diseño de la arquitectura y la mejor gestión de los servicios cloud es su uso diario, nos permitió optimizar la facturación en la nube reduciendo en más de un 50% el OPEX. Pero además este nuevo modelo permite acelerar el desarrollo de cualquier iniciativa que requiera hacer uso de estos datos, y con ello reducir el costo del proyecto

Ahora nuestro cliente quiere poner a prueba y aprovechar las herramientas que hemos puesto en sus manos para responder una pregunta más complicada ¿Cuánto valen mis clientes?…

Su modelo tradicional de segmentación en el negocio de distribución se basaba fundamentalmente en un análisis del histórico de pagos y del volumen de facturación. De esta manera predicen la posibilidad de impagos en nuevos servicios, y el valor potencial del cliente en términos de facturación. Todo ello cruzado con información de estados financieros conformaba aún un modelo con un amplio rango de mejora.

«En /bluetab tenemos experiencia en desarrollo de modelos analiticos que aseguren una aplicación edficiente y medible de los algoritmos más adecuados para cada problemática y cada set de datos»

En /bluetab tenemos experiencia en el desarrollo de modelos analíticos que aseguren una aplicación eficiente y medible de los algoritmos más adecuados para cada problemática y cada set de datos, pero en este momento el mercado aporta soluciones de modelos analíticos muy maduros que, con una mínima parametrización, permiten obtener buenos resultados acortando drásticamente el tiempo de desarrollo. De esta manera, echamos mano de un modelo ampliamente probado de CLV (Customer Lifetime Value) para ayudar a nuestro cliente a evaluar el potencial valor en el ciclo de vida de sus clientes.

En el nuevo escenario, a los datos de ingresos y gastos de los clientes, hemos incorporado variables como Costos de atención Postventa (como gestión de recobro, costes de resolución de incidencias en CC, costos de agentes intermediarios de facturación…), y costes de Logistica de Aprovisionamiento, pudiendo incluir datos sobre posicionamiento geográfico para costes de distribución, madurez del mercado en términos de market share, o cruzarlo con información que proporcionan diferentes fuentes del mercado. De esta manera nuestro cliente puede hacer estimaciones más ajustadas del valor de sus clientes actuales y potenciales, y realizar modelizaciones y predicción de rentabilidad de nuevos mercados o nuevos servicios.

El potencial beneficio en la aplicación de los modelos analíticos depende de aspectos menos “sexis” como son una consistente organización y gobierno en el back office de los datos, la calidad de los datos que aprovisionan el modelo, la puesta en marcha del modelo siguiendo las mejores prácticas DevOps y la constante comunicación con el cliente para asegurar el alineamiento con negocio y poder extraer/visualizar las conclusiones de valor de la información obtenida. Y en /bluetab creemos que esto sólo es posible con un conocimiento técnico experto y una profunda vocación de entendimiento del negocio de nuestros clientes.   

«El potencial beneficio en la aplicacion de los modelos analiticos solo es posible con un conocimiento técnico experto y una profunda vocación de entendimiento del negocio de nuestros clientes»

¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

Deja un comentario

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

Databricks sobre Azure – Una perspectiva de Arquitectura (parte 2)

marzo 24, 2022
LEER MÁS

Entrena y Despliega tu Modelo de Machine Learning en 15 Minutos con Databricks

junio 10, 2025
LEER MÁS

Data governance in the Contact Center services sector

septiembre 1, 2022
LEER MÁS

Mi experiencia en el mundo de Big Data – Parte II

febrero 4, 2022
LEER MÁS

Introducción a los productos de HashiCorp

agosto 25, 2020
LEER MÁS

Detección de Fraude Bancario con aprendizaje automático

septiembre 17, 2020
LEER MÁS

Publicado en: Blog, tendencias

How much is your customer worth?

octubre 1, 2020 by Bluetab

How much is your customer worth?

Bluetab

Our client is a multinational leader in the energy sector with investments in extraction, generation and distribution, with a significant presence in Europe and Latin America. It is currently developing business intelligence initiatives, exploiting its data with embedded solutions on cloud platforms. 

The problem it had was big because, to generate any use case, it needed to consult countless sources of information generated manually by various departments, including text files and spreadsheets, but not just that, it also had to use information systems ranging from Oracle DB to Salesforce. 

«The problem it had was big because, to generate any use case, it needed to consult countless sources of information generated manually»

The solution was clear; all the necessary information needed to be concentrated in a single, secure, continually available, organised and, above all, cost-efficient place. The decision was to implement a Data Lake in the AWS Cloud.

In project evolution, the client was concerned about the vulnerabilities of its local servers, where they have had some problems with service availability and even the a computer virus intrusion, for which /bluetab proposes to migrate the most critical processes completely to the cloud. These include a customer segmentation model, developed in R. 

Segmenting the customer portfolio requires an ETL developed in Python using Amazon Redshift as DWH, where a Big Data EMR cluster is also run on demand with tasks developed in Scala to handle large volumes of transaction information generated on a daily basis. The process results that were previously hosted and exploited from a MicroStrategy server now were developed in reports and dashboards using Power BI.

«…the new architecture design and better management of cloud services in their daily use enabled us to optimise cloud billing, reducing OPEX by over 50%»

Not only did we manage to integrate a significant quantity of business information into a centralised, governed repository, but the new architecture design and better management of cloud services in their daily use enabled us to optimise cloud billing, reducing OPEX by over 50%. Additionally, this new model enables accelerated development of any initiative requiring use of this data, thereby reducing project cost.

Now our customer wants to test and leverage the tools we put into their hands to answer a more complex question: how much are my customers worth?

Its traditional segmentation model in the distribution business was based primarily on an analysis of payment history and turnover. In this way they predict the possibility of defaults in new services, and the potential value of the customer in billing terms. All of this, crossed with financial statement information, still formed a model with ample room for improvement.

«At /bluetab we have experience in development of analytical models that ensure efficient and measurable application of the most suitable algorithms for each problem and each data set»

At /bluetab we have experience in development of analytical models that ensure efficient and measurable application of the most suitable algorithms for each problem and each data set, but the market now provides solutions as very mature analytical models that, with minimum parametrisation, enable good results while drastically reducing development time. As such, we used a well-proven CLV (Customer Lifetime Value) model to help our client evaluate the potential life-cycle value of its customers.

We have incorporated variables in the new scenario such as After-sales service costs (such as recovery management, CC incident resolution costs, intermediary billing agent costs, etc.), and Provisioning logistics costs into the customers’ income and expense data, making it possible to include data on geographical positioning for distribution costs, market maturity in terms of market share, or crossing with information provided by different market sources. This means our client can make better estimates of the value of its current and potential customers, and perform modelling and forecasting of profitability for new markets or new services.

The potential benefit from application of the analytical models depends on less “sexy” aspects, such as consistent organisation and governance of the data in the back office, the quality of the data provisioning the model, implementation of the model following DevOps best practices and constant communication with the client to ensure business alignment and to be able to extract/visualise conclusions of value from the information obtained. And at /bluetab we believe this is only possible with expert technical knowledge and a deep commitment to understanding our clients’ businesses.

«The potential benefit from application of the analytical models is only possible with expert technical knowledge and a deep commitment to understanding our clients’ businesses»

Do you want to know more about what we offer and to see other success stories?
DISCOVER BLUETAB

SOLUTIONS, WE ARE EXPERTS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

You may be interested in

MICROSOFT FABRIC: Una nueva solución de análisis de datos, todo en uno

octubre 16, 2023
READ MORE

Del negocio físico a la explosión del On-Line

abril 7, 2021
READ MORE

Data Mesh

julio 27, 2022
READ MORE

De documentos en papel a datos digitales con Fastcapture y Generative AI

junio 7, 2023
READ MORE

MDM como ventaja competitiva en las organizaciones

junio 18, 2024
READ MORE

Leadership changes at Bluetab EMEA

abril 3, 2024
READ MORE

Publicado en: Blog, tendencias

Conglomerado de multinacionales de varios sectores

septiembre 28, 2020 by Bluetab

Conglomerado de multinacionales de varios sectores

Migración a plataformas Big Data sobre cloud GCP.

Nuestro cliente es un conglomerado de empresas multinacionales con importante implantación en sectores como banca y seguros, retail, hotelería, restaurantes, inmobiliarias, educación, administración, lotería, cines y servicios, y está considerado como de las tres marcas de más valor en su región. Dentro de su plan de transformación ha entrado en el proceso de migración de sus sistemas a plataformas cloud y la utilización de tecnologías big data.

En Bluetab Perú hemos colaborado con ellos en definir e implemetar la estrategia y los lineamientos corporativos sobre Cloud y el despliegue posterior en cada una de sus empresas. Para ello se ha definido las arquitecturas de trabajo y los documentos de buenas prácticas en Integración Continua (CI) y Despliegue Continuo (CD), además de implementar un caso de uso basado en tecnologías DataFusion y AirFlow.

person using MacBook Pro

Y adicionalmente se ha desarrollado software para el control de acceso a Apache Druid, se ha desplegado el pipeline entre los ambientes de Dev, Test y Prod y se ha desarrollado un monitor de metadatos y la integración con su plataforma de Gobierno.

Con ello nuestro cliente ha logrado abrir sus arquitecturas a servicios cloud y sistemas escalables para dotar de eficiencia y capacidad de crecimiento en la gestión de los datos a sus empresas.

CASOS DE ÉXITO

Publicado en: Casos Etiquetado como: data-strategy

Conglomerate of multinational companies in various sectors

septiembre 28, 2020 by Bluetab

Conglomerate of multinational companies in various sectors

Migrating to Big Data platforms on GCP cloud.

Our client is a conglomerate of multinational companies with significant presence in sectors such as banking and insurance, retail, hospitality, restaurants, real estate, education, administration, lottery, cinemas and services, and is considered to be one of the three most valuable brands in its region. As part of its transformation plan, it has initiated the process of migrating its systems to cloud platforms and using big data technologies.

At Bluetab Peru we have collaborated with them in defining and implementing the corporate cloud strategy and guidelines and the subsequent deployment in each of its companies. This involved defining work architectures and best practice documents in Continuous Integration (CI) and Continuous Deployment (CD), as well as implementing a use case based on DataFusion and AirFlow technologies.

Additionally, software was developed to control access to Apache Druid, and the pipeline between was deployed between Dev., Test and Prod, a metadata monitor and the integration with its Governance platform was developed.

With this, our client has successfully opened its architectures to cloud services and scalable systems to provide its businesses with efficiency and growth in data management.

SUCCESS STORIES

Publicado en: Casos Etiquetado como: data-strategy

  • « Ir a la página anterior
  • Página 1
  • Páginas intermedias omitidas …
  • Página 23
  • Página 24
  • Página 25
  • Página 26
  • Página 27
  • Páginas intermedias omitidas …
  • Página 41
  • Ir a la página siguiente »

Footer

LegalPrivacidadPolítica de cookies
LegalPrivacy Cookies policy

Patrono

Patron

Sponsor

Patrocinador

© 2025 Bluetab Solutions Group, SL. All rights reserved.