Submit feedback on
Orphaned Azure Function Apps with No Active Functions or Triggers
We've received your feedback.
Thanks for reaching out!
Oops! Something went wrong while submitting the form.
Close
Orphaned Azure Function Apps with No Active Functions or Triggers
Aaran Bhambra
CER:

CER-0315

Service Category
Compute
Cloud Provider
Azure
Service Name
Azure Functions
Inefficiency Type
Unused Resource
Explanation

Azure Function apps can persist long after the applications or workflows they supported have been retired — particularly in development, testing, and experimentation environments where cleanup is often overlooked. Even when no functions are deployed or no triggers are active, the underlying infrastructure dependencies continue to generate charges. The nature and severity of this waste depends heavily on the hosting plan type: function apps on Premium or Dedicated (App Service) plans incur continuous compute charges for allocated instances regardless of activity, while even Consumption plan function apps still require an associated storage account that accrues transaction and capacity costs from internal runtime operations.

Each function app is provisioned with a required Azure Storage account used for storing function code, managing triggers, and maintaining execution state. This storage account generates costs through read/write transactions and capacity usage even when the function app is completely idle — driven by the Functions runtime's internal health checks and state management. Additionally, if Application Insights was enabled for monitoring, telemetry data ingestion charges can accumulate silently in the background. Across an organization with dozens of abandoned function apps spanning multiple subscriptions, these individually modest charges compound into meaningful and entirely avoidable waste.

Relevant Billing Model

Azure Functions billing varies by hosting plan, but orphaned function apps generate waste across all plan types:

  • Consumption plan: Compute charges are based on per-execution and per-second resource consumption (GB-seconds), with a monthly free grant of 1 million executions and 400,000 GB-seconds. While compute scales to zero when idle, the required storage account continues to incur charges from runtime operations.
  • Premium plan: Billed based on vCPU-seconds and memory across instances, with at least one instance always allocated. This results in a minimum monthly cost per active plan, whether the function is active or idle.
  • Dedicated (App Service) plan: Billed continuously at the selected App Service plan tier rate, regardless of whether any functions are deployed or executing.
  • Storage account: Required for every function app and not included in the free grant. Charges include storage capacity, transactions, and data transfer — and persist even when the function app has no activity.
  • Application Insights (if enabled): Incurs separate data ingestion charges from automatic telemetry collection, even for idle function apps.
Detection
  • Identify function apps with no deployed functions or with all functions in a disabled state
  • Review function app execution history to find those with no invocations over a representative period
  • Assess the hosting plan type for each inactive function app to determine the relative cost urgency — Premium and Dedicated plans incur continuous compute charges, while Consumption plan apps primarily generate storage costs
  • Evaluate associated storage accounts for function apps flagged as inactive, confirming whether transaction activity is limited to internal runtime operations rather than legitimate workload use
  • Confirm whether Application Insights is enabled on inactive function apps, as telemetry ingestion may be generating additional charges
  • Review application dependencies and consult with development teams to determine whether orphaned function apps are still needed for future use or can be safely removed
Remediation
  • Delete function apps confirmed to have no active functions, no recent executions, and no planned future use — prioritize those on Premium or Dedicated plans where continuous compute charges are highest
  • Remove or repurpose the associated storage accounts after deleting orphaned function apps, verifying that the storage account is not shared with other services before deletion
  • Disable or remove Application Insights integration on any function apps that are retained but idle, to stop unnecessary telemetry ingestion charges
  • Consolidate remaining low-activity function apps onto shared Premium or Dedicated plans where possible, rather than maintaining separate plans for each app
  • Establish a periodic review process to flag function apps with no executions over an extended period, ensuring newly orphaned apps are caught before costs accumulate
  • Implement tagging or naming conventions that identify the owning team and intended lifecycle for each function app, making it easier to identify candidates for cleanup
Submit Feedback