Summary
cloudemu has a two-layer coverage picture, and the two are badly out of sync:
- Emulation (API) layer — broad. ~23 service categories are implemented across AWS/Azure/GCP with real SDK-compat wire handlers (only 3 known per-cell gaps).
- Discovery (inventory) layer — very narrow.
resourcediscovery walks only 5 drivers and emits only 8 resource types total. Every SDK-compat inventory API (Resource Explorer 2, Resource Graph, Cloud Asset) is a 1:1 re-label of those same 8.
So even though RDS/EKS/ELB/ElastiCache/SNS/SQS/Bedrock/SageMaker etc. are emulated, none of them appear when a client enumerates resources via RE2 / Resource Graph / Cloud Asset. The discovery layer should surface the resources cloudemu already models (and, over time, the broader provider catalog).
Evidence: resourcediscovery/walkers.go (6 walkers, 8 type constants L30-39), resourcediscovery/engine.go L102-130; server/aws/resourceexplorer2/handler.go + filter.go; server/azure/resourcegraph/kql.go (mapAzureType) + handler.go; server/gcp/cloudasset/filter.go (mapGCPAssetType).
Resource types surfaced in discovery TODAY (exhaustive)
| Engine type |
AWS RE2 |
Azure Resource Graph |
GCP Cloud Asset |
| Instance |
compute:instance |
microsoft.compute/virtualmachines |
compute.googleapis.com/Instance |
| VPC |
networking:vpc |
microsoft.network/virtualnetworks |
compute.googleapis.com/Network |
| Subnet |
networking:subnet |
microsoft.network/subnets |
compute.googleapis.com/Subnetwork |
| SecurityGroup |
networking:securitygroup |
microsoft.network/networksecuritygroups |
compute.googleapis.com/Firewall |
| Bucket |
storage:bucket |
microsoft.storage/storageaccounts |
storage.googleapis.com/Bucket |
| Table |
database:table |
microsoft.documentdb/databaseaccounts |
firestore.googleapis.com/Database |
| Function |
serverless:function |
microsoft.web/sites |
cloudfunctions.googleapis.com/Function |
| Workspace (Azure only) |
— |
microsoft.databricks/workspaces |
— |
Emulated-service coverage (for reference)
All 20 portable categories are implemented for all 3 providers. Specialized categories with per-cell gaps: Bedrock (AWS only), Databricks (Azure only), AI Search (Azure only). Note: statemachine/ is a generic FSM helper, not Step Functions / Workflows / Logic Apps — those are not emulated.
Remaining — prioritized backlog
Workstream A — surface what's already emulated (high-leverage, cheap)
The drivers exist; each needs a walker + an entry in the three type-mapping tables (resourceexplorer2/{handler,filter}.go, resourcegraph/kql.go mapAzureType/portableToAzureType, cloudasset/filter.go mapGCPAssetType/portableToGCPAssetType). Order:
- Relational DB (all) — RDS/Aurora/DocumentDB/Neptune (instance+cluster+snapshot+proxy), Redshift, Cloud SQL, Azure SQL / postgres-flex / mysql-flex. Driver:
relationaldb/.
- Kubernetes (all) — EKS cluster/nodegroup, GKE cluster/nodepool, AKS managedclusters(+agentpools).
- Load Balancer (all) — ALB/NLB/GWLB, GCP LB, Azure LB/App Gateway. Driver:
loadbalancer/.
- Cache (all) — ElastiCache, Memorystore/Redis, Azure Cache.
- Container Registry — ECR, Artifact Registry, ACR.
- Message Queue + Notification — SQS/PubSub/Service Bus, SNS.
- Secrets — Secrets Manager / Secret Manager / Key Vault.
- DNS — Route 53 zones, Cloud DNS ManagedZone, Azure DNS.
- IAM — user/role/policy/group (note:
cloudasset searchAllIamPolicies returns empty today).
- Networking sub-types — NAT GW / IGW / EIP / VPC peering (AWS); Disk/Address/Router/ForwardingRule (GCP); disks/public-IP/NIC/App-Gateway (Azure).
- ML / GenAI — SageMaker*, Vertex AI kinds, Azure AI (CognitiveServices + MachineLearningServices), Bedrock*.
- Monitoring/Logging — CloudWatch alarms/dashboards/logs; Azure Insights/Log Analytics.
Also refine existing mappings: GCP compute Disk/Snapshot are collapsed; Database→Table maps Firestore only to Database (finer kinds expected).
Workstream B — net-new emulation (larger)
- AWS: EBS volume/snapshot, EIP, NAT GW, IGW, VPC peering, EFS, KMS, OpenSearch, MSK, MemoryDB, Kinesis(+analytics), DAX, EMR(+serverless), Glue, DMS, Step Functions, WAF, GuardDuty, CloudTrail, Config, ACM, SES, WorkSpaces, Transfer, Beanstalk, App Runner, Lightsail.
- GCP: BigQuery, Spanner, Bigtable, AlloyDB, Dataproc/Dataflow/Composer, Filestore, Memcache, API Gateway, App Engine, Workflows, TPU, Notebooks, compute Interconnect/NodeGroup.
- Azure: SQL servers/DB (relational, distinct from Cosmos), Container Instances, Data Factory, Synapse, HDInsight, Kusto/Data Explorer, Logic Apps, NetApp, Recovery Services, IoT Hub, API Management, Container Apps, SQL MI, Stream Analytics, and remaining network sub-types (DDoS/ExpressRoute/Front Door/Network Watcher/Traffic Manager/VPN Gateway).
Counts (types surfaced in discovery today)
- AWS — 7 surfaced.
- Azure — 8 surfaced.
- GCP — 7 surfaced.
Fastest path = Workstream A: write walkers over drivers cloudemu already has, and add matching type-mapping entries in the three inventory handlers.
Summary
cloudemu has a two-layer coverage picture, and the two are badly out of sync:
resourcediscoverywalks only 5 drivers and emits only 8 resource types total. Every SDK-compat inventory API (Resource Explorer 2, Resource Graph, Cloud Asset) is a 1:1 re-label of those same 8.So even though RDS/EKS/ELB/ElastiCache/SNS/SQS/Bedrock/SageMaker etc. are emulated, none of them appear when a client enumerates resources via RE2 / Resource Graph / Cloud Asset. The discovery layer should surface the resources cloudemu already models (and, over time, the broader provider catalog).
Evidence:
resourcediscovery/walkers.go(6 walkers, 8 type constants L30-39),resourcediscovery/engine.goL102-130;server/aws/resourceexplorer2/handler.go+filter.go;server/azure/resourcegraph/kql.go(mapAzureType) +handler.go;server/gcp/cloudasset/filter.go(mapGCPAssetType).Resource types surfaced in discovery TODAY (exhaustive)
compute:instancemicrosoft.compute/virtualmachinescompute.googleapis.com/Instancenetworking:vpcmicrosoft.network/virtualnetworkscompute.googleapis.com/Networknetworking:subnetmicrosoft.network/subnetscompute.googleapis.com/Subnetworknetworking:securitygroupmicrosoft.network/networksecuritygroupscompute.googleapis.com/Firewallstorage:bucketmicrosoft.storage/storageaccountsstorage.googleapis.com/Bucketdatabase:tablemicrosoft.documentdb/databaseaccountsfirestore.googleapis.com/Databaseserverless:functionmicrosoft.web/sitescloudfunctions.googleapis.com/Functionmicrosoft.databricks/workspacesEmulated-service coverage (for reference)
All 20 portable categories are implemented for all 3 providers. Specialized categories with per-cell gaps: Bedrock (AWS only), Databricks (Azure only), AI Search (Azure only). Note:
statemachine/is a generic FSM helper, not Step Functions / Workflows / Logic Apps — those are not emulated.Remaining — prioritized backlog
Workstream A — surface what's already emulated (high-leverage, cheap)
The drivers exist; each needs a walker + an entry in the three type-mapping tables (
resourceexplorer2/{handler,filter}.go,resourcegraph/kql.gomapAzureType/portableToAzureType,cloudasset/filter.gomapGCPAssetType/portableToGCPAssetType). Order:relationaldb/.loadbalancer/.cloudassetsearchAllIamPoliciesreturns empty today).Also refine existing mappings: GCP compute Disk/Snapshot are collapsed; Database→Table maps Firestore only to
Database(finer kinds expected).Workstream B — net-new emulation (larger)
Counts (types surfaced in discovery today)
Fastest path = Workstream A: write walkers over drivers cloudemu already has, and add matching type-mapping entries in the three inventory handlers.