¿Por qué compartir datos genómicos es un problema de arquitectura cloud?
¡Hola Devs! Imagínate esto: biobancos con cientos de millones de individuos, miles de millones de posiciones genómicas, y la necesidad de mantener datos sensibles bajo control de sus custodios originales. Nada de eso encaja con un data lake centralizado. 🧬
El protocolo GA4GH Beacon se diseñó exactamente para esto: una API federada para descubrir datos genómicos y fenotípicos sin centralizarlos. Pero un estándar sin implementación de referencia es solo papel.
CSIRO, la agencia nacional de ciencia de Australia, construyó sBeacon — una implementación Beacon 100% serverless en AWS, lista para producción. Escala a cohortes de mega-biobanco, ingesta archivos VCF estándar sin transformación y responde consultas reales en ~1.5 segundos.
¿El costo? Alrededor de US$ 0.40 al mes para un dataset a escala del 1000 Genomes. Vamos a ver cómo es posible. 🚀
![]()
La arquitectura: dos flujos, cero servidores
sBeacon se divide en dos procesos limpios: onboarding de datos y consulta de datos. Todo corre sobre Amazon S3, AWS Lambda, Amazon DynamoDB y Amazon Athena.
Onboarding — Indexa, no copies
El insight clave: los datos genómicos nunca salen del bucket S3 original. Solo el metadata (estado de enfermedad, edad, ubicación) se indexa.
# Flujo simplificado de onboarding (pseudo-código del sBeacon)
# 1. El usuario envía la ubicación del dataset al API Gateway
payload = {
"vcfLocations": ["s3://bucket-custodio/cohorte.vcf.gz"],
"metadataSource": "endpoint-ontoserver"
}
# 2. Lambda escribe metadata en S3 en formato ORC
write_orc(metadata, "s3://sbeacon-bucket/metadata/")
# 3. Índice de ontología construido vía Ontoserver (o Ensembl OLS V4)
build_ontology_index(terms)
# 4. Athena CTAS arma tablas de metadata consultables
athena.execute("""
CREATE TABLE AS SELECT *
FROM metadata_orc
WHERE ...
""")
# 5. Los VCF se referencian, no se copian — el índice tabix permite acceso aleatorio
Como solo se duplica el metadata, el costo de ingesta lo dominan unos pocos megabytes de ORC, no gigabytes de secuencia.
Consulta — Fan-out con Lambda
Cuando llega una consulta, API Gateway la enruta a una Lambda Microservice. Esa Lambda resuelve términos de ontología en DynamoDB, consulta Athena para metadata y — si se necesitan variantes — hace fan-out por los VCFs:
# Módulo de Consulta de Variantes — patrón fan-out
def initiator_handler(event, context):
# Fan-out de splitQuery por los archivos VCF
for vcf in event["vcfLocations"]:
invoke_lambda("splitQuery", {"vcf": vcf, "query": event["query"]})
# Cada VCF dispara performQuery por región genómica
# performQuery usa bcftools + htslib con HTTP byte-range
# Solo ~1 KB se busca por consulta — el VCF crudo nunca entra a la memoria de Lambda
La magia está en las peticiones HTTP byte-range de htslib: performQuery pasa la URL de S3 directo a bcftools, que solo trae la región indexada por tabix. Los bytes crudos de la secuencia nunca pasan por Lambda como dato retornable.
Las matemáticas del costo (chr1, 2504 genomas)
| Escenario | Por 1000 ops | Idle mensual |
|---|---|---|
| Ingesta | ~MX$ 10 | — |
| Cómputo de consulta (Lambda) | ~MX$ 5 | — |
| Consulta (Athena) | ~MX$ 1 | — |
| Lookups DynamoDB | ~MX$ 0.01 | — |
| Storage (1.1 GB) | — | ~MX$ 0.55 |
El tiempo de consulta se mantiene plano conforme crece el número de variantes retornadas — de 4 a 400 variantes, la respuesta sigue en ~1.5 segundos.

Zero Trust, federado por diseño — y dónde se rompe
Modelo de seguridad
sBeacon aplica un modelo zero trust donde ningún componente, usuario o petición es implícitamente confiable:
- Auth explícita: cada request carga un JWT de Amazon Cognito, validado en API Gateway antes de que corra cualquier Lambda.
- RBAC vía grupos Cognito mapeados a niveles de divulgación:
| Grupo Cognito | Divulgación máxima |
|---|---|
sbeacon-boolean-access-user-group | Solo exists: true/false |
sbeacon-count-access-user-group | Conteos agregados |
sbeacon-record-access-user-group | Detalles completos + nombres de muestras |
sbeacon-admin-group | Lo anterior + gestión de datasets |
- Cómputo efímero:
/tmpde Lambda se limpia entre cold starts, el subprocesobcftoolscorre con timeout de 10s, ningún estado persiste. - Storage descentralizado: los
vcfLocationsde un dataset son URIs S3 que pueden apuntar a buckets de otras organizaciones. Cada institución despliega su propio stack Terraform — sin infra compartida, sin data lake central.
⚠️ Limitaciones que debes planear
-
Consultas de genoma completo dan timeout. API Gateway tiene timeout fijo. Si alguien intenta escanear el genoma entero por accidente, el request falla. Operaciones funcionales sobre el genoma completo requieren otra arquitectura (ej: Step Functions para orquestación larga).
-
La concurrencia de Lambda se puede agotar. Un solo fan-out genera muchísimas invocaciones paralelas. Consultas en ráfaga pueden dejar sin recursos a otras funciones de la misma cuenta AWS. Monitorea la métrica
ConcurrentExecutionsa nivel cuenta y función. -
Pérdida silenciosa por throttle. Las invocaciones síncronas de Lambda no reintentan automáticamente en throttle. Un
429deperformQuerysignifica que el resultado se pierde silenciosamente a menos que lo manejes. Configura alarmas CloudWatch en la métricaThrottles— o usa un error-catcher que mande email con diagnóstico en fallo. -
Cold starts tras periodos ociosos. Fan-out en ráfaga tras ociosidad agrega latencia. Provisioned concurrency ayuda, pero sube el costo idle.
¿Por qué Lambda en vez de Step Functions?
El equipo eligió Lambda explícitamente porque procesa payloads mucho más grandes — crítico dado el tamaño y complejidad de los datos genómicos y el patrón fan-in/fan-out. Para esta carga, Lambda fue más barato y más flexible.

El aprendizaje: las plataformas federadas de datos son un patrón resuelto
sBeacon es uno de esos raros casos donde las decisiones de arquitectura son directamente rastreables a números de costo y latencia:
- No copies lo que puedes indexar. Referenciar VCFs en su lugar en vez de ingestarlos tiró el storage a centavos.
- Byte-range reads le ganan a los data lakes. Las peticiones HTTP Range de htslib traen ~1 KB por consulta — sin ETL, sin centralización.
- Fan-out serverless encaja con genómica. Invocaciones paralelas de Lambda mapean naturalmente al formato "escanea muchos archivos, retorna resultados chicos".
- Zero trust no es buzzword aquí. Grupos Cognito, claims JWT y stacks Terraform por institución lo aplican estructuralmente.
Si estás construyendo genómica en AWS, puedes desplegar sBeacon sobre VCFs ya hospedados en S3 y federar progresivamente con otros Beacons para descubrimiento cross-institucional.
Próximos pasos:
- Lee el paper de sBeacon ("Scalable genomic data exchange and analytics with sBeacon") para la metodología de benchmarks.
- Clona el repo
terraform-aws-serverless-beacony corre un deploy local contra un VCF chico. - Estudia el patrón error-catcher para surfear fallas de Lambda en arquitecturas fan-out.
Para otra perspectiva sobre cómo fallas de capacity planning y observabilidad se desenvuelven en pipelines de producción, checa nuestro análisis de un outage real de pipeline de medios. Y si andas siguiendo cómo la IA está remodelando plataformas de servicio, Gemini for Home muestra cómo la IA proactiva se volvió una preocupación full-stack.
Fuente: AWS Architecture Blog — How CSIRO built scalable, cost-optimized genomic variant querying on AWS