Summary
This issue tracks the feature parity gaps between the AWS and Azure provider implementations, identified via static analysis of the codebase.
Services Covered
| Domain |
AWS |
Azure |
| Compute |
EC2 |
Compute (VMs) |
| Relational DB |
RDS |
Database (Azure SQL) |
| Cache |
ElastiCache |
Cache (Redis) |
| NoSQL |
(none) |
CosmosDB |
| Search |
OpenSearch |
Implemented but unreachable (see below) |
| Data Warehouse |
Redshift |
(missing) |
| In-memory DB |
MemoryDB |
(missing) |
| Savings Plans |
SavingsPlans |
(missing) |
Gaps: Azure Behind AWS
| Feature |
AWS |
Azure |
| Multi-account (Organizations) |
Yes — enumerates org accounts automatically |
No — GetAccounts discovers subscriptions but GetServiceClient only operates on one at a time |
| Savings Plans |
Yes |
No |
| Data Warehouse (Redshift) |
Yes |
No Azure Synapse equivalent |
| MemoryDB |
Yes |
No |
| Convertible RI exchange |
Yes (EC2 only) — ListConvertibleReservedInstances, FindConvertibleOfferings |
No |
| RI Utilization reporting |
Yes — GetRIUtilization via Cost Explorer |
No |
Bug: Azure Search Client is Dead Code
providers/azure/services/search/ is fully implemented (GetRecommendations, GetExistingCommitments, PurchaseCommitment, ValidateOffering, GetOfferingDetails, GetValidResourceTypes) but is never reachable — GetSupportedServices() and GetServiceClient() in providers/azure/provider.go have no reference to it.
It needs to be wired up:
- Add
common.ServiceSearch to the GetSupportedServices() return slice
- Add a
case common.ServiceSearch: branch in GetServiceClient() returning NewSearchClient(...)
Azure-Only (AWS gaps)
- CosmosDB — no AWS NoSQL equivalent in CUDly
- Azure Search — once wired up, AWS OpenSearch is the counterpart
Notes
- All service clients that are implemented (both providers) share the full
ServiceClient interface: GetRecommendations, GetExistingCommitments, PurchaseCommitment, ValidateOffering, GetOfferingDetails, GetValidResourceTypes
- Azure tags reservations inline at purchase time (embedded in the PUT body); AWS EC2/OpenSearch/Redshift make a separate tagging call post-purchase — this is parity via different mechanisms, not a gap
GetRIUtilization is an AWS-specific extension explicitly outside the provider.RecommendationsClient interface
Summary
This issue tracks the feature parity gaps between the AWS and Azure provider implementations, identified via static analysis of the codebase.
Services Covered
Gaps: Azure Behind AWS
GetAccountsdiscovers subscriptions butGetServiceClientonly operates on one at a timeListConvertibleReservedInstances,FindConvertibleOfferingsGetRIUtilizationvia Cost ExplorerBug: Azure Search Client is Dead Code
providers/azure/services/search/is fully implemented (GetRecommendations,GetExistingCommitments,PurchaseCommitment,ValidateOffering,GetOfferingDetails,GetValidResourceTypes) but is never reachable —GetSupportedServices()andGetServiceClient()inproviders/azure/provider.gohave no reference to it.It needs to be wired up:
common.ServiceSearchto theGetSupportedServices()return slicecase common.ServiceSearch:branch inGetServiceClient()returningNewSearchClient(...)Azure-Only (AWS gaps)
Notes
ServiceClientinterface:GetRecommendations,GetExistingCommitments,PurchaseCommitment,ValidateOffering,GetOfferingDetails,GetValidResourceTypesGetRIUtilizationis an AWS-specific extension explicitly outside theprovider.RecommendationsClientinterface