Pruebas locales
Requisitos Previos
-
Python: Verificar tener Python instalado en tu sistema.
-
Docker: Verificar tener Docker instalado en tu sistema.
-
Postman: Verificar tener Postman instalado en tu sistema.
-
Dependencias: Instalar dependencias necesarias ejecutando:
python -m venv [nombre_entorno | venv][nombre_entorno | venv]\Scripts\activatepip install -r requirements.txtpip list -
Archivo
.env: Crea un archivo.enven el directorio raiz del proyecto con las siguientes variables:ENV=localLOG_LEVEL=debugSILS_ENV=localDB_HOST=sils_mysql_hostDB_PORT=sils_mysql_portDB_NAME=sils_mysql_dbnameDB_USER=sils_mysql_dbuserDB_PASSWORD=sils_mysql_dbpasswordPROJECT_ID=devBQ_DATASET=test_datasetBQ_ENDPOINT="http://localhost:9050/"QUEUE_LOCATION=hereQUEUE_NAME=anotherqMIGRATION_TASK_PROCESSOR_URL="http://localhost:8081/"CLOUD_TASKS_EMULATOR_HOST="localhost:8123"INSTANCE_UNIX_SOCKET=instancia_cloudsql_sils_des_sqlREDIS_HOST=127.0.0.1REDIS_PORT=6379
Ejecución del Script con functions-framework
-
Crear un archivo
docker-compose.ymlen el directorio raiz del proyecto con el contenido:services:db:image: mysql:latestcontainer_name: mysql_containerenvironment:MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}MYSQL_DATABASE: ${DB_NAME}ports:- "${DB_PORT}:3306"volumes:- db_data:/var/lib/mysqlnetworks:- app_networkbigquery:image: ghcr.io/goccy/bigquery-emulator:latestcontainer_name: bigquery_emulatorcommand: ["--project=dev"]ports:- "9050:9050" # Puerto HTTP para consultas- "9060:9060" # Puerto gRPC (opcional)volumes:- bigquery_data:/datanetworks:- app_networkredis:image: redis:latestcontainer_name: redis_containerports:- "${REDIS_PORT}:6379"restart: alwaysnetworks:- app_networkvolumes:db_data:bigquery_data:networks:app_network:driver: bridge -
Levantar el contenedor de Docker con bases de datos de prueba:
docker-compose up --build -d -
En caso de querer eliminar el contenedor:
docker-compose down -v -
Revisar Logs de BigQuery:
docker-compose logs -f bigquery -
Crear un dataset en BigQuery para la base de datos de prueba mediante Postman:
POST http://localhost:9050/projects/test/datasetsContent-Type: application/jsonBody:{"datasetReference": {"datasetId": "test_dataset"}} -
Ejecutar servidor de functions-framework para la función
migrate_mysql_to_bigquery, ademas correr servicio local de Cloud Tasks:functions-framework --target=migrate_mysql_to_bigquery --port=8080 --debuggo run ./ -host localhost -port 8123 -queue projects/dev/locations/here/queues/anotherq -
Probar la función
migrate_mysql_to_bigqueryenviando por medio de peticion HTTP POST de Postman a la URLhttp://localhost:8080con el body de la petición en formato Pub/Sub codificando el JSON en base64 y enviándolo pordata:{"years_to_migrate": 1,"months_to_migrate": 6,"source_tables": ["infracciones", "incidentesHistoricos"],"destination_tables": ["historico_infracciones", "historico_incidentes"],"tasks_enqueued_limit": 20,"filter_columns": ["fechaGPS", "fechaGPS"]}{"specversion": "1.0","type": "google.cloud.pubsub.topic.v1.messagePublished","source": "//pubsub.googleapis.com/projects/YOUR_PROJECT/topics/YOUR_TOPIC","id": "test-123","time": "2024-03-18T12:34:56.789Z","datacontenttype": "application/json","data": {"message": {"data": "eyJ5ZWFyc190b19taWdyYXRlIjoxLCJtb250aHNfdG9fbWlncmF0ZSI6Niwic291cmNlX3RhYmxlcyI6WyJpbmZyYWNjaW9uZXMiLCJpbmNpZGVudGVzSGlzdG9yaWNvcyJdLCJkZXN0aW5hdGlvbl90YWJsZXMiOlsiaGlzdG9yaWNvX2luZnJhY2Npb25lcyIsImhpc3Rvcmljb19pbmNpZGVudGVzIl0sInRhc2tzX2VucXVldWVkX2xpbWl0IjoyMCwiZmlsdGVyX2NvbHVtbnMiOlsiZmVjaGFHUFMiLCJmZWNoYUdQUyJdfQ=="}}} -
Comprobar correcta creación de tablas en BigQuery mediante Postman:
GET http://localhost:9050/projects/test/datasets/test_dataset/tables