Skip to main content
idle · azure

Function Apps on Premium or Dedicated plans with no executions for 30 days

resource types
1
rule IDs covered
1
severity
medium

What does ZopNight detect here?

Azure Function Apps on a Premium or Dedicated plan keep billing for their instances even when nothing runs. ZopNight flags an app when `FunctionExecutionCount` and `FunctionExecutionUnits` both stay below one per hour for 30 days with zero bytes in or out, and reports the full priced plan cost as the saving.

Signal and threshold

How ZopNight evaluates Function Apps on Premium or Dedicated plans with no executions for 30 days.
Field Value
Rule IDsRC-221
Categoryidle
Severitymedium
MetricFunctionExecutionCount
Thresholdaverage and peak below 1 execution per hour
Evaluation window30d
SourceZopNight
Permissions usedMicrosoft.Web/sites/Read · Microsoft.Web/serverfarms/Read · Microsoft.Insights/Metrics/Read

Why a Premium Function App costs money while doing nothing

The Consumption plan charges per execution, so an unused function there costs close to nothing. The Premium plan is different. Microsoft’s Premium plan page says you pay for core seconds and memory allocated across instances, that the plan has no execution charge, and that every Premium plan always has at least one active, billed instance. The result is a minimum monthly cost per plan whether the function runs or not. Apps on a Dedicated (App Service) plan carry the plan’s instance charge in the same way.

A function that was wired to a queue or timer for a project that ended keeps that standing charge alive indefinitely. This rule finds those apps.

Checking execution counts from the CLI

Find the Premium plans in the subscription (Premium shows up as the ElasticPremium tier), then pull the hourly execution count for each app on them:

Terminal window
az appservice plan list \
--query "[?sku.tier=='ElasticPremium'].{plan:name, sku:sku.name, group:resourceGroup}" -o table
az monitor metrics list \
--resource /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Web/sites/<app> \
--metric FunctionExecutionCount FunctionExecutionUnits BytesReceived BytesSent \
--aggregation Total --interval PT1H --offset 30d

An app whose hourly totals are all zero for a month is the pattern this rule reports.

The evidence ZopNight needs before it reports an idle app

  1. The app’s hosting plan is Premium or Dedicated. Consumption apps and apps whose plan cannot be classified are skipped, since there is no standing charge to reclaim.
  2. At least one of the two execution series is present, and every series that is present covers a full 30 days with both its hourly average and its hourly peak below 1.
  3. Traffic corroborates the silence: if bytes sent or bytes received averaged above zero, the app is treated as in use.
  4. ZopNight has a positive monthly price for the app.

Apps that stay out of the report

A brand-new app with less than 30 days of execution history is left alone, however quiet it looks. An app with no execution metrics at all gets no finding, because missing data is not proof of idleness. Apps on a Dedicated plan usually have no price of their own (the bill sits on the App Service plan), so they rarely surface here; the plan itself is covered by Idle Azure App Service Plan. For Premium apps that still run a trickle of work, see Azure Function Premium Plan with Low Executions.

How the saving is priced

Terminal window
saving = full monthly cost of the Premium or Dedicated plan attributed to the app
cost after fix = 0

The figure assumes the app is deleted or moved off the standing-cost plan. Stopping the app halts triggers but leaves the plan’s instances billing, so a stop alone realizes none of it. That is why this finding is advisory and has no one-click action.

Removing or downgrading the idle app

  1. Confirm in Azure Monitor that FunctionExecutionCount and FunctionExecutionUnits show no activity for the month, and that no caller expects the app’s HTTP endpoint.
  2. If nothing needs it, delete the Function App, then delete the Premium plan once no other app uses it.
  3. If you want to keep the code deployed, move it to a pay-per-execution plan. Microsoft supports in-place migration between Consumption and Premium on Windows only; for Linux, create a new app on the Flex Consumption plan, as described under plan migration.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

472 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

472 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·