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\activate
pip install -r requirements.txt
pip list -
Archivo
.env: Crea un archivo.enven el directorio raiz del proyecto con las siguientes variables:ENV=local
LOG_LEVEL=debug
SILS_ENV=local
DB_HOST=sils_mysql_host
DB_PORT=sils_mysql_port
DB_NAME=sils_mysql_dbname
DB_USER=sils_mysql_dbuser
DB_PASSWORD=sils_mysql_dbpassword
PROJECT_ID=dev
BQ_DATASET=test_dataset
BQ_ENDPOINT="http://localhost:9050/"
QUEUE_LOCATION=here
QUEUE_NAME=anotherq
MIGRATION_TASK_PROCESSOR_URL="http://localhost:8081/"
CLOUD_TASKS_EMULATOR_HOST="localhost:8123"
INSTANCE_UNIX_SOCKET=instancia_cloudsql_sils_des_sql
REDIS_HOST=127.0.0.1
REDIS_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:latest
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
ports:
- "${DB_PORT}:3306"
volumes:
- db_data:/var/lib/mysql
networks:
- app_network
bigquery:
image: ghcr.io/goccy/bigquery-emulator:latest
container_name: bigquery_emulator
command: ["--project=dev"]
ports:
- "9050:9050" # Puerto HTTP para consultas
- "9060:9060" # Puerto gRPC (opcional)
volumes:
- bigquery_data:/data
networks:
- app_network
redis:
image: redis:latest
container_name: redis_container
ports:
- "${REDIS_PORT}:6379"
restart: always
networks:
- app_network
volumes:
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/datasets
Content-Type: application/json
Body:
{
"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 --debug
go 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