Data Team TigoApache Ceph es el sistema de almacenamiento distribuido del Storage Layer de TIGO. Provee almacenamiento de objetos compatible con la API S3 a través de Ceph Object Gateway (RGW), utilizado como base del Data Lake.
Configurar las credenciales de acceso
$ aws configure --profile ceph-tigo
# AWS Access Key ID: <tu_access_key_tigo>
# AWS Secret Access Key: <tu_secret_key_tigo>
# Default region name: us-east-1
# Default output format: json
Usar el endpoint de Ceph TIGO
$ export CEPH_ENDPOINT=https://ceph-rgw.tigo.internal:7480
# Alias para facilitar el uso
$ alias s3ceph='aws s3 --endpoint-url $CEPH_ENDPOINT --profile ceph-tigo'
Verificar acceso
$ s3ceph ls
# Lista todos tus buckets
| Comando | Descripción |
|---|---|
s3ceph ls |
Listar todos los buckets |
s3ceph ls s3://bucket-name/ |
Listar contenido de un bucket |
s3ceph ls s3://bucket-name/prefix/ --recursive |
Listar recursivamente |
s3ceph mb s3://nuevo-bucket |
Crear un bucket |
s3ceph rb s3://bucket-vacio |
Eliminar bucket vacío |
s3ceph rb s3://bucket --force |
Eliminar bucket con contenido |
Subir un archivo
$ s3ceph cp archivo_local.parquet s3://tigo-data-raw/etl/ventas/2026/
Subir un directorio completo
$ s3ceph cp ./datos_locales/ s3://tigo-data-raw/etl/batch/ \
--recursive \
--exclude "*.tmp"
Descargar un archivo
$ s3ceph cp s3://tigo-data-raw/etl/ventas/2026/data.parquet ./local/
Descargar un directorio
$ s3ceph cp s3://tigo-data-analytics/resultados/ ./resultados/ \
--recursive
Sync local → Ceph (solo sube diferencias)
$ s3ceph sync ./datos/ s3://tigo-data-raw/etl/datos/ \
--delete \
--exclude "*.log"
Sync Ceph → local
$ s3ceph sync s3://tigo-data-analytics/reportes/ ./reportes_local/
Sync entre buckets Ceph
$ s3ceph sync s3://tigo-data-raw/etl/ s3://tigo-data-backup/etl/
| Bucket | Capa | Descripción |
|---|---|---|
tigo-data-raw |
Raw Layer | Datos crudos sin procesar (landing zone) |
tigo-data-staging |
Staging | Datos en proceso de transformación |
tigo-data-analytics |
Analytics | Datos procesados listos para consumo |
tigo-data-ml |
ML Layer | Datasets y modelos de machine learning |
tigo-data-backup |
Backup | Copias de seguridad |
tigo-data-temp |
Temp | Archivos temporales (limpieza automática 30d) |
s3://tigo-data-raw/
└── {area}/{fuente}/{año}/{mes}/{dia}/
└── {nombre_archivo}.{formato}
# Ejemplo:
s3://tigo-data-raw/comercial/crm/2026/03/11/clientes.parquet
s3://tigo-data-analytics/telco/kpis/2026/03/kpi_red_mensual.parquet
Ver metadatos de un objeto
$ aws s3api head-object \
--bucket tigo-data-raw \
--key etl/ventas/data.parquet \
--endpoint-url $CEPH_ENDPOINT \
--profile ceph-tigo
Agregar metadatos personalizados al subir
$ aws s3api put-object \
--bucket tigo-data-analytics \
--key reportes/reporte_marzo.parquet \
--body reporte_marzo.parquet \
--metadata '{"area":"comercial","owner":"data-engineering","version":"1.0"}' \
--endpoint-url $CEPH_ENDPOINT \
--profile ceph-tigo
Copiar objeto dentro de Ceph
$ aws s3api copy-object \
--copy-source tigo-data-raw/etl/ventas/data.parquet \
--bucket tigo-data-analytics \
--key procesado/ventas/data.parquet \
--endpoint-url $CEPH_ENDPOINT \
--profile ceph-tigo
Mover (copiar + borrar)
# Paso 1: Copiar
$ s3ceph cp s3://tigo-data-raw/temp/archivo.parquet \
s3://tigo-data-analytics/final/archivo.parquet
# Paso 2: Borrar original
$ s3ceph rm s3://tigo-data-raw/temp/archivo.parquet
Generar URL de descarga válida por 1 hora
$ aws s3 presign s3://tigo-data-analytics/reportes/informe.xlsx \
--expires-in 3600 \
--endpoint-url $CEPH_ENDPOINT \
--profile ceph-tigo
import boto3
from botocore.client import Config
s3 = boto3.client(
's3',
endpoint_url='https://ceph-rgw.tigo.internal:7480',
aws_access_key_id='TU_ACCESS_KEY',
aws_secret_access_key='TU_SECRET_KEY',
config=Config(signature_version='s3v4'),
region_name='us-east-1',
)
Listar archivos en un prefijo
paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(
Bucket='tigo-data-raw',
Prefix='etl/ventas/2026/03/'
)
for page in pages:
for obj in page.get('Contents', []):
print(obj['Key'], obj['Size'])
Subir archivo
s3.upload_file(
Filename='local_data.parquet',
Bucket='tigo-data-raw',
Key='etl/ventas/2026/03/11/data.parquet',
ExtraArgs={'Metadata': {'owner': 'de-team', 'version': '1.0'}}
)
Descargar archivo
s3.download_file(
Bucket='tigo-data-analytics',
Key='reportes/kpi_mensual.parquet',
Filename='kpi_mensual.parquet'
)
Leer Parquet directo desde Ceph con pandas
import pandas as pd
import s3fs
fs = s3fs.S3FileSystem(
endpoint_url='https://ceph-rgw.tigo.internal:7480',
key='TU_ACCESS_KEY',
secret='TU_SECRET_KEY',
)
df = pd.read_parquet(
's3://tigo-data-analytics/ventas/2026/03/',
filesystem=fs
)
Ver espacio usado por bucket
$ aws s3api list-objects-v2 \
--bucket tigo-data-analytics \
--query '[sum(Contents[].Size), length(Contents[])]' \
--endpoint-url $CEPH_ENDPOINT \
--profile ceph-tigo
Ver estadísticas rápidas de un bucket
$ s3ceph ls s3://tigo-data-raw --recursive --summarize --human-readable
Buscar archivos por extensión en todo un bucket
$ s3ceph ls s3://tigo-data-raw/ --recursive | grep "\.parquet$"
{
"Rules": [
{
"ID": "eliminar-temporales-30-dias",
"Filter": { "Prefix": "temp/" },
"Status": "Enabled",
"Expiration": { "Days": 30 }
}
]
}
Aplicar política de lifecycle
$ aws s3api put-bucket-lifecycle-configuration \
--bucket tigo-data-temp \
--lifecycle-configuration file://lifecycle.json \
--endpoint-url $CEPH_ENDPOINT \
--profile ceph-tigo