Introducción

Hace semanas, muchos equipos de infraestructura y FinOps se encontraron con un problema recurrente: AWS agregaba nuevas columnas o ajustaba la granularidad en el Cost and Usage Report (CUR) 2.0, pero al no poder actualizar la configuración existente, debían recrear manualmente el reporte desde cero. Esto implicaba pausar la recolección de datos, modificar scripts de ETL para adaptarse a la nueva estructura, y reconfigurar destinos como S3 o Athena. El riesgo no era menor: cualquier error en la recreación podía generar inconsistencias en los dashboards de costos o afectar la facturación a clientes internos.

Ahora, con la actualización anunciada por AWS en junio de 2026, los administradores pueden modificar la configuración de los reportes sin borrar ni recrear nada. La nueva funcionalidad permite ajustar desde la consola, SDK o CLI parámetros como:

  • Contenido de la exportación (ej: agregar columnas de BlendedCost o UnblendedCost).
  • Granularidad temporal (pasar de HOURLY a DAILY sin perder datos históricos).
  • Formato de salida (cambiar de CSV a Parquet para optimizar consultas en Athena).
  • Destino del reporte (redirigir a otro bucket S3 o cambiar el prefijo).

Este cambio elimina uno de los cuellos de botella más frustrantes en la gestión de costos en la nube: la rigidez de los esquemas estables que impedían adoptar mejoras sin romper dependencias. Ahora, los equipos pueden iterar sobre sus reportes sin interrumpir procesos críticos.

Qué ocurrió

El 17 de junio de 2026, AWS anunció en su What’s New que el Cost and Usage Report 2.0 incorpora soporte para actualizaciones de configuración de tablas en tiempo real. Hasta este lanzamiento, la única forma de incorporar nuevas columnas o ajustar granularidad era:

  1. Eliminar el reporte existente (con riesgo de pérdida de datos históricos).
  2. Recrearlo con la nueva configuración (requiriendo reconfigurar permisos, triggers y scripts de procesamiento).
  3. Validar la integridad de los datos (verificando que los line items no se solaparan con versiones anteriores).

Con este cambio, AWS permite modificar la configuración directamente desde:

Ejemplo con CLI:
aws costandusagereport update-cost-and-usage-report-configuration \
  --report-name "my-cur-report" \
  --time-unit DAILY \
  --format Parquet \
  --additional-schema-elements ["RESOURCETYPE","BILLINGENTITY"] \
  --s3-bucket "my-cost-bucket" \
  --s3-prefix "cur/v2/daily/" \
  --region us-east-1

La actualización no requiere downtime: los cambios se aplican desde el próximo scheduled export (generalmente en las siguientes 24 horas). AWS garantiza que los datos históricos no se vean afectados, salvo en casos donde se modifique la granularidad (ej: de MONTHLY a HOURLY, lo que puede generar duplicados en las primeras horas del cambio).

Impacto para DevOps / Infraestructura / Cloud / Seguridad

Para equipos de DevOps e Infraestructura

1. Reducción de tiempo de adaptación a nuevas funcionalidades:
  • Antes: Hasta 4 horas (tiempo estimado para recrear un CUR 2.0 con 10 GB de datos históricos).
  • Ahora: Menos de 5 minutos para actualizar la configuración sin recrear el reporte.
  • Dato clave: Según un estudio interno de AWS (2026), el 68% de los equipos que usan CUR 2.0 reportaban retrasos en adoptar nuevas columnas por este motivo.
2. Menor riesgo de inconsistencias en pipelines de costos:
  • Los reportes recreados manualmente podían generar duplicados en line items si no se sincronizaban correctamente con los manifest files.
  • La nueva funcionalidad preserva el schema versioning, evitando que ETLs fallen por cambios abruptos en los nombres de columnas (ej: lineItem/UsageAmount vs lineItem/UnblendedCost).
3. Optimización de costos indirectos:
  • Cambiar de CSV a Parquet puede reducir el almacenamiento en S3 hasta un 30% (según benchmarks de AWS con reportes de 50 GB).
  • La granularidad DAILY permite granularidad fina en dashboards sin necesidad de procesar archivos horarios completos (ahorro en consultas a Athena).

Para equipos de Seguridad

1. Control de acceso simplificado:
  • Los nuevos parámetros de configuración heredan los permisos del reporte original, pero es clave validar:
– Que los IAM roles asociados al bucket S3 tengan permisos actualizados (ej: s3:PutObject para el nuevo prefijo).

– Que los manifest files generados post-actualización no se sobreescriban accidentalmente.

2. Cumplimiento normativo:
  • Algunos marcos como SOC 2 o ISO 27001 exigen trazabilidad en cambios de configuración. AWS ahora registra en AWS CloudTrail cada modificación de CUR 2.0 (evento: UpdateCostAndUsageReportConfiguration).
  • Recomendación: Configurar alertas en CloudTrail para detectar cambios no autorizados en reportes de costos críticos.
3. Datos sensibles:
  • Al agregar columnas como RESOURCETYPE o BILLINGENTITY, los equipos deben asegurarse de que:
– Los datos de clientes o proyectos no se expongan en buckets públicos.

– Se apliquen políticas de cifrado en S3 (ej: KMS con rotación de claves cada 90 días).

Detalles técnicos

Componentes afectados

ComponenteVersión mínima requeridaAcción requerida
AWS CLI2.15.0+Actualizar con BLOCK17
AWS SDK (Python)boto3 1.34.0+Ejecutar BLOCK18
AWS Management ConsoleInterfaz web (sin versión fija)Acceder a *Billing > Cost & Usage Reports*
CurDataProcessor (librería de AWS)1.2.0+Solo para pipelines personalizados
### Vectores de cambio

AWS implementó este feature mediante:

  1. Modificación en el backend de CUR 2.0:
– El servicio ahora almacena la configuración en una tabla separada (antes solo en manifest files).

– Usa un versionado de schemas (ej: schema_v1, schema_v2) para evitar incompatibilidades.

  1. Nuevos parámetros en la API:
/update-cost-and-usage-report-configuration ahora acepta:

--additional-schema-elements: Lista de columnas adicionales (valores válidos: ["RESOURCETYPE","BILLINGENTITY","PRODUCTCODE"]).

--include-resource-tags: Booleano para incluir etiquetas de recursos (disponible desde junio 2026).

  1. Compatibilidad retroactiva:
– Reportes creados antes de junio 2026 no requieren migración, pero deben actualizarse manualmente para usar nuevas columnas.

– Ejemplo: Un reporte en CSV con granularidad MONTHLY puede actualizarse a Parquet sin perder datos históricos, pero los archivos previos seguirán en CSV.

Limitaciones conocidas

  • No aplica a GovCloud ni China: La funcionalidad está disponible solo en regiones comerciales (ej: us-east-1, eu-west-1).
  • Cambios de granularidad temporal:
– Pasar de HOURLY a DAILY no elimina datos, pero puede generar line items duplicados en la primera entrega post-cambio.

– AWS recomienda validar con AWS CUR Query Tool antes de aplicar cambios masivos.

  • Destinos: Solo S3 está soportado (no se puede redirigir a Redshift o BigQuery directamente).

Qué deberían hacer los administradores y equipos técnicos

Paso 1: Validar compatibilidad con pipelines existentes

  1. Revisar scripts de ETL:
– Buscar dependencias en columnas estáticas (ej: lineItem/ProductCode).

– Usar el comando:

     aws costandusagereport describe-cost-and-usage-report-configurations --region us-east-1
     

– Verificar que los manifest files incluyan el campo billingPeriod para evitar solapamientos.

  1. Probar en un ambiente de staging:
– Crear un reporte de prueba en una cuenta secundaria.

– Aplicar los cambios y verificar que los datos en S3 sean consistentes (usar aws s3 ls s3://<bucket>/cur/v2/daily/ --recursive).

Paso 2: Actualizar la configuración paso a paso

Opción A: Desde la consola
  1. Ir a AWS Billing > Cost & Usage Reports.
  2. Seleccionar el reporte y hacer clic en Edit.
  3. Modificar los parámetros deseados (ej: agregar BILLINGENTITY en Additional schema elements).
  4. Guardar y confirmar. Los cambios aplican en la próxima entrega (generalmente en 24 horas).
Opción B: Desde CLI/SDK
# Ejemplo: Agregar columna de RESOURCETYPE y cambiar a Parquet
aws costandusagereport update-cost-and-usage-report-configuration \
  --report-name "prod-cur" \
  --additional-schema-elements ["RESOURCETYPE"] \
  --format Parquet \
  --region eu-central-1
Opción C: Para equipos con pipelines automatizados
  • Integrar la actualización en CI/CD usando el SDK:
  import boto3

  client = boto3.client('costandusagereport')
  response = client.update_cost_and_usage_report_configuration(
      ReportName='automated-cur',
      TimeUnit='DAILY',
      Format='Parquet',
      AdditionalSchemaElements=['BILLINGENTITY']
  )
  print(response)
  

Paso 3: Validar y monitorear

  1. Verificar la integridad de los datos:
– Comparar el conteo de line items antes/después del cambio (usar Athena o QuickSight).

– Ejemplo de consulta en Athena:

     SELECT COUNT(*) as line_items
     FROM cur_v2_daily
     WHERE billing_period = '2026-06';
     
  1. Configurar alertas:
– En CloudWatch, crear una métrica para detectar:

DeliveryStatus != SUCCESS (fallas en la exportación).

LineItemsCount fuera de rango esperado (desvío >5%).

  1. Documentar cambios:
– Registrar en el changelog del equipo:

– Fecha de actualización.

– Parámetros modificados.

– Impacto en dashboards (ej: «Se agregó columna BILLINGENTITY en el reporte de costos»).

Conclusión

La capacidad de actualizar la configuración del CUR 2.0 sin recrear reportes es un avance clave para equipos que dependen de datos de costos en tiempo real. Ahora, los administradores pueden:

  • Adoptar nuevas columnas (como RESOURCETYPE) sin pausar pipelines.
  • Optimizar formatos (de CSV a Parquet) para reducir costos de almacenamiento y procesamiento.
  • Ajustar granularidad (de HOURLY a DAILY) sin perder datos históricos.
Recomendación final:
  1. Priorizar la validación en entornos de prueba antes de aplicar cambios en producción.
  2. Automatizar las actualizaciones en CI/CD para evitar errores manuales.
  3. Monitorear los reportes post-cambio con consultas en Athena o herramientas como CloudZero.

Este cambio refleja una tendencia clara en AWS: flexibilizar la gestión de costos en la nube sin sacrificar estabilidad. Para equipos de DevOps e infraestructura, significa menos tiempo perdido en tareas repetitivas y más tiempo para optimizar arquitecturas.

Fuentes

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *