Multi-cloud FinOps: Practical Optimization Strategies on AWS and Azure

July 15, 20266 min read
FinOpsAWSAzureCloudDevOps

Introduction

Migrating to the cloud promises unlimited flexibility and scalability. However, without structured financial governance, the cloud bill can quickly turn into the biggest nightmare for a technology department.

FinOps (Cloud Financial Operations) emerges as a cultural and operational discipline to unite engineering, finance, and business in smart cloud cost management. In this article, we share field-tested practical strategies to reduce waste by up to 40% on AWS and Azure.


1. Identifying Orphaned Resources

The first step to cutting costs is a basic cleanup of resources that are turned on and generating costs but are not being used:

Orphaned Disks (EBS volumes on AWS / Managed Disks on Azure): When a virtual machine is destroyed, the disk attached to it is often preserved. These volumes continue to charge per GB/month. Unassociated Public IPs (Elastic IPs): AWS charges additional fees for reserved Elastic IPs that are not associated with any running instance. Zombie Database Instances: Staging or test databases that have not received connections for months.

CLI Command for Cleaning Orphaned IPs (AWS CLI):

aws ec2 describe-addresses --query "Addresses[?AssociationId==null].{AddressID:AllocationId,IP:PublicIp}" --output table
This command returns all reserved public IPs that are not in use so that you can release them immediately.

2. Implementing Storage Lifecycle Management (S3/Blob Storage)

Storing gigabytes of logs or old backups in the Standard storage class is a classic cost mistake.

AWS S3 Lifecycle Rules: Move files older than 30 days to S3 Standard-IA (Infrequent Access) and files older than 90 days to S3 Glacier Deep Archive. Azure Blob Access Tiers: Move historical data from the Hot tier to the Cool or Archive tiers.

This can reduce the cost per GB stored from $0.023 to $0.00099 (a savings of over 95%!).


3. Savings Plans and Reserved Instances

For predictable workloads (such as production databases running 24x7), On-Demand usage is inefficient.

AWS Compute Savings Plans: Offer discounts of up to 66% in exchange for a commitment to consistent compute usage (EC2, Fargate, Lambda) for 1 or 3 years. Azure Reservations: Guarantees significant discounts by pre-purchasing VM instances, Azure SQL, or Azure Synapse for long periods.

Golden tip: Never buy 100% of your projected capacity in Savings Plans on day one. Buy around 60-70% and adjust gradually in the following months by monitoring the AWS Cost Explorer dashboard.*


Multi-cloud cost check on AWS

After the orphaned-IP cleanup, I group the bill by service in Cost Explorer before buying a Savings Plan.

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

Unattached disks on Azure:

az disk list --query "[?diskState=='Unattached'].{name:name,size:diskSizeGb}" -o table

Move old logs off S3 Standard:

aws s3api put-bucket-lifecycle-configuration \
  --bucket company-logs \
  --lifecycle-configuration file://lifecycle.json
{
  "Rules": [{
    "ID": "logs-to-glacier",
    "Status": "Enabled",
    "Filter": { "Prefix": "logs/" },
    "Transitions": [
      { "Days": 30, "StorageClass": "STANDARD_IA" },
      { "Days": 90, "StorageClass": "DEEP_ARCHIVE" }
    ]
  }]
}

Conclusion

FinOps is not a "once a year" activity; it is a continuous routine of monitoring and optimization. By empowering engineers to understand the financial impact of their architectural decisions, companies can accelerate development without breaking the budget.

Does your company face cloud cost issues? Let's talk and draw up a structured FinOps plan. Get in touch via my LinkedIn!

Related Articles