Setting the file. One moment.
Schema Discover Heroku · Heroku To AWS · aws/agent-toolkit-for-aws · Skills Docs
Schema for heroku-resource-inventory.json, produced by the Discover phase orchestrator (discover.md).
Convention : Values shown as X|Y in examples indicate allowed alternatives — use exactly one value per field, not the literal pipe character.
ContentsBack to the top of the page 28.3
Clarify
81
Creating Amazon Aurora Db Cluster With Instances
104
Routing Traffic With Route53 And CloudFront
Resilience Program Design
Creating API Gateway Stage
Complete inventory of discovered Heroku resources. Uses a flat resource model — no clustering, no dependency graphs, no topological sorting. Resources are grouped by the heroku_app field only.
Report-level information about the discovery run.
Per-app metadata entries. One entry per discovered Heroku app.
Flat array of all discovered resources. No nesting, no clustering.
Deterministic ID format per resource type:
Additional fields by addon type:
heroku-postgresql : connection_pooling (boolean)
heroku-redis : ha_enabled (boolean), encryption_in_transit (boolean), redis_version (string)
heroku-kafka : topic_count (integer), partitions_per_topic (integer), replication_factor (integer)
Other add-ons : No additional required fields
Optional live-enrichment fields (present only when live discovery ran):
Any addon: monthly_price_usd (number — from the add-on’s plan price)
heroku-postgresql : pg_version (string), data_size_gb (number — feeds database migration tool selection), table_count (integer)
heroku-redis : maxmemory_policy (string)
The following fields MUST NOT appear anywhere in heroku-resource-inventory.json. Their presence indicates accidental use of the GCP clustering model:
cluster_id
creation_order_depth
edges
dependencies
must_migrate_together
All resources in resources[] are grouped by the heroku_app field value.
Resources belonging to the same Heroku app share an identical heroku_app value.
Resources that cannot be associated with exactly one app use heroku_app: "unassociated".
Typical “unassociated” resources: spaces (shared across apps), pipelines (span multiple apps).
The resources[] array is flat — no nesting under app-level containers.
✅ heroku-resource-inventory.json exists with at least one resource entry
✅ metadata.discovery_timestamp is set (ISO 8601)
✅ metadata.total_apps_discovered is set (integer ≥ 0)
✅ metadata.discovery_sources is a non-empty array
✅ metadata.confidence is "full" or "reduced"
✅ Every entry in resources[] has: resource_id, resource_type, heroku_app, config
✅ Every entry in apps[] has: app_name, heroku_generation, generation_action, discovery_status
✅ No forbidden clustering fields present anywhere in the document
✅ If Terraform discovery ran → resources include Terraform-sourced entries
✅ If Terraform had parse errors → metadata.confidence is "reduced"
✅ If billing discovery ran → billing_profile section present with available: true
✅ If live discovery ran → resources include live-sourced entries, live_metadata present, and "live" in metadata.discovery_sources
✅ No config var VALUES anywhere in the document — config entries carry key names only
"generation_action" : "detect_only" ,
"generation_diagnostics" : [],
"space" : null ,
"discovery_status" : "success" ,
"failure_reason" : null ,
"procfile_parse_warning" : null ,
"app_json_parse_warning" : null
},
{
"app_name" : "my-worker-app" ,
"app_id" : "fedcba98-7654-3210-fedc-ba9876543210" ,
"heroku_generation" : "fir" ,
"generation_action" : "detect_only" ,
"generation_diagnostics" : [],
"space" : "my-private-space" ,
"discovery_status" : "success" ,
"failure_reason" : null ,
"procfile_parse_warning" : null ,
"app_json_parse_warning" : null
}
],
"resources" : [
{
"resource_id" : "formation:my-web-app:web" ,
"resource_type" : "formation" ,
"heroku_app" : "my-web-app" ,
"config" : {
"process_type" : "web" ,
"command" : "npm start" ,
"dyno_type" : "standard-2x" ,
"quantity" : 2
}
},
{
"resource_id" : "formation:my-web-app:worker" ,
"resource_type" : "formation" ,
"heroku_app" : "my-web-app" ,
"config" : {
"process_type" : "worker" ,
"command" : "node worker.js" ,
"dyno_type" : "standard-1x" ,
"quantity" : 1
}
},
{
"resource_id" : "addon:my-web-app:heroku-postgresql:standard-0" ,
"resource_type" : "addon" ,
"heroku_app" : "my-web-app" ,
"config" : {
"addon_service" : "heroku-postgresql" ,
"plan" : "standard-0" ,
"provider" : "heroku" ,
"connection_pooling" : true
}
},
{
"resource_id" : "addon:my-web-app:heroku-redis:premium-0" ,
"resource_type" : "addon" ,
"heroku_app" : "my-web-app" ,
"config" : {
"addon_service" : "heroku-redis" ,
"plan" : "premium-0" ,
"provider" : "heroku" ,
"ha_enabled" : true ,
"encryption_in_transit" : true ,
"redis_version" : "7.0"
}
},
{
"resource_id" : "addon:my-web-app:papertrail:choklad" ,
"resource_type" : "addon" ,
"heroku_app" : "my-web-app" ,
"config" : {
"addon_service" : "papertrail" ,
"plan" : "choklad" ,
"provider" : "papertrail"
}
},
{
"resource_id" : "space:my-private-space" ,
"resource_type" : "space" ,
"heroku_app" : "unassociated" ,
"config" : {
"space_name" : "my-private-space" ,
"region" : "virginia" ,
"shield" : false ,
"peering" : {
"detected" : true ,
"vpc_id" : "vpc-0123456789abcdef0" ,
"peer_cidr" : "10.0.0.0/16"
}
}
},
{
"resource_id" : "pipeline:my-pipeline" ,
"resource_type" : "pipeline" ,
"heroku_app" : "unassociated" ,
"config" : {
"pipeline_name" : "my-pipeline" ,
"stages" : [
{ "stage" : "development" , "app" : "my-web-app-dev" },
{ "stage" : "staging" , "app" : "my-web-app-staging" },
{ "stage" : "production" , "app" : "my-web-app" }
],
"review_apps_enabled" : true ,
"detection_status" : "detect-only"
}
}
],
"billing_profile" : {
"available" : true ,
"total_monthly_cost" : 450.00 ,
"currency" : "USD" ,
"billing_period" : "2026-02" ,
"line_items" : [
{ "resource_name" : "my-web-app" , "category" : "dyno" , "cost" : 100.00 },
{ "resource_name" : "my-web-app" , "category" : "addon" , "cost" : 200.00 },
{ "resource_name" : "my-web-app" , "category" : "platform" , "cost" : 50.00 },
{ "resource_name" : "my-worker-app" , "category" : "dyno" , "cost" : 50.00 },
{ "resource_name" : "my-worker-app" , "category" : "addon" , "cost" : 50.00 }
]
},
"terraform_metadata" : {
"found" : true ,
"tf_files_scanned" : 5 ,
"resource_types_extracted" : [ "heroku_app" , "heroku_addon" , "heroku_formation" ],
"parse_warnings" : []
}
}