Volver al blog
Cloud & FinOps2026-10-01

Gestión de costes AWS con FinOps: auditar la factura con AWS CLI

Gestión de costes AWS con FinOps y AWS CLI: costo por servicio en el mes, volúmenes EBS sueltos, IPs elásticas sin uso y snapshots antiguos.

La gestión de costes en AWS con FinOps empieza por una lista: qué pagó la cuenta en el mes y qué sigue encendido sin servir a ninguna aplicación. Esta guía usa AWS CLI v2 para esa auditoría. No borre ningún recurso hasta que alguien confirme que el ID está huérfano.

El marco, sin los comandos, está en cómo reducir costos en AWS. Leer la factura junto con la arquitectura es el trabajo de la consultoría FinOps.

1. Comprobar la cuenta y la región

Cost Explorer responde en us-east-1. EC2 es regional: el mismo comando tiene que correr en cada región donde la cuenta crea recursos.

aws sts get-caller-identity
export AWS_DEFAULT_REGION=us-east-1

La política mínima para los comandos de abajo es ce:GetCostAndUsage, ec2:DescribeVolumes, ec2:DescribeAddresses y ec2:DescribeSnapshots. Sin ce:GetCostAndUsage, el primer bloque devuelve AccessDenied.

2. Coste del mes por servicio

La fecha final de Cost Explorer es exclusiva. Para septiembre de 2026, End es el 1 de octubre.

aws ce get-cost-and-usage \
  --time-period Start=2026-09-01,End=2026-10-01 \
  --granularity MONTHLY \
  --metrics UnblendedCost \
  --group-by Type=DIMENSION,Key=SERVICE \
  --output table

Lo que importa en la tabla es el servicio que no se esperaba: NAT Gateway, Elastic IP y snapshots suelen crecer sin un deploy nuevo. Anote los tres mayores antes de mirar instancia por instancia.

3. Volúmenes EBS sin instancia

Un volumen en available no está adjunto. La cuenta sigue pagando los GB.

for region in us-east-1 sa-east-1 eu-west-1; do
  echo "== $region =="
  aws ec2 describe-volumes \
    --region "$region" \
    --filters Name=status,Values=available \
    --query 'Volumes[].{ID:VolumeId,GiB:Size,AZ:AvailabilityZone}' \
    --output table
done

Incluya las regiones que la empresa realmente usa. Un volumen de 100 GB en available durante semanas es candidato a snapshot y borrado, después de la confirmación del equipo.

4. IP elástica sin asociación

AWS cobra la Elastic IP que está reservada y no está unida a una instancia ni a un NAT en uso.

aws ec2 describe-addresses \
  --region eu-west-1 \
  --query 'Addresses[?AssociationId==`null`].[PublicIp,AllocationId]' \
  --output table

Repita con --region en cada región. La lista vacía es el resultado sano. Una IP en la lista es un recurso huérfano, no una dirección para reutilizar sin dueño.

5. Snapshots antiguos del dueño de la cuenta

aws ec2 describe-snapshots \
  --region eu-west-1 \
  --owner-ids self \
  --query 'sort_by(Snapshots, &StartTime)[].{ID:SnapshotId,Inicio:StartTime,GiB:VolumeSize}' \
  --output table

Los snapshots diarios sin política de retención acumulan GB. La regla práctica es conservar lo necesario para restaurar (por ejemplo 7 diarios y 4 semanales) y borrar el resto con aws ec2 delete-snapshot --snapshot-id snap-... solo después de nombrar qué protege cada uno.

Conclusión

Estos cuatro comandos separan la factura en servicio, disco suelto, IP suelta y backup antiguo. Es la primera hora de una auditoría FinOps. El right-sizing de instancias y Graviton quedan en reducción de costos en AWS. Quien quiera la lectura junto con el cambio de arquitectura sigue en la consultoría FinOps.

Consultoría FinOps y nube

Auditoría de la factura y arquitectura multicloud con gobernanza de costos en AWS, GCP y Azure.

Hablar de FinOps