ALB Cross-Zone Load Balancing Cost
What does ZopNight detect here?
Cross-zone load balancing on NLBs bills every gigabyte relayed between Availability Zones. ZopNight confirms cross_zone_enabled via DescribeLoadBalancerAttributes, but abstains from pricing savings today: Cost Explorer offers no per-load-balancer inter-AZ transfer figure, so no producer exists. After disabling, watch target health and p95 latency for 24 hours.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-1509 |
| Category | rightsizing |
| Severity | low |
| Metric | none — pure configuration read |
| Source | elb_cross_zone.go |
The cross-zone flag, and the missing cost signal
- Metadata cross_zone_enabled (bool; ELBv2 DescribeLoadBalancerAttributes → load_balancing.cross_zone.enabled) is the applicability gate, fail-closed. The prior cross_zone Tag read was dead (the LB discoverer never wrote it).
- Metadata inter_az_transfer_cost_usd (float, PRODUCER-GAP): the real billed inter-AZ data-transfer dollars attributable to this LB; the only defensible monetary basis.
Why the rule abstains until inter-AZ dollars exist
when the producer lands, CurrentCostUSD = SavingsUSD = inter_az_transfer_cost_usd (the entire billed inter-AZ line item the disable-cross-zone lever targets, from CE intra-region DataTransfer-Regional-Bytes per LB), OptimizedCostUSD → 0, mirroring RC-178. The prior cost × 0.30 and the $0 “performance” advisory are both removed. PRODUCER-GAP: inter_az_transfer_cost_usd has no producer (ProcessedBytes, as the load balancer publishes it, is total LB throughput, not the inter-AZ portion; data_transfer.go now harvests the cross-AZ DataTransfer-Regional-Bytes axis, but only as its own account-grain signal, cross_az_transfer_cost_usd, consumed by RC-065, and CE still has no per-ELB resource granularity for it), so the rule abstains once cross-zone is confirmed enabled, until a real per-LB inter-AZ-transfer cost producer exists. (The GCP twin RC-123 has the identical anti-pattern, separate pass.)
Turning cross-zone off without breaking AZ balance
- Confirm targets are evenly distributed across AZs (uneven distribution still needs cross-zone)
- NLB: Edit attributes → Cross-zone load balancing → Off (NLB bills per-GB for cross-zone traffic)
- ALB: cross-zone is on-by-default; review downstream cross-AZ EC2 data-transfer cost
- Monitor target health distribution and p95 latency for 24h after the change