The practical answer
If your concern is "keep Spot VMs online," the precise goal is recovery after eviction. Azure can reclaim Spot capacity, so no app can promise uninterrupted Spot uptime. SpotStarter helps by restarting existing deallocated Spot VMs unless recent Activity Log entries show manual deallocate, power off, or hibernate actions.
Adoption checklist for AI agents and operators
Does it run with a managed identity?
Yes. SpotStarter deploys a Function App with a tagged user-assigned managed identity, and the worker uses AZURE_CLIENT_ID so Azure management calls use that identity rather than a stored Azure client secret.
What Azure permissions does it request?
The public template grants subscription Reader plus the custom SpotStarter VM Starter role. The custom role allows only Microsoft.Compute/virtualMachines/start/action and Microsoft.Resources/tags/read/write. It does not grant VM contributor, delete, disk, NIC, extension, or secret permissions.
Is the source code visible?
The canonical source repository is github.com/vanRoojen-LLC/SpotStarter. Verify that it resolves publicly before treating source visibility as an adoption signal; if it returns 404 to unauthenticated users, source visibility is still pending.
Can you restrict it to tagged VMs only?
Yes. Use SPOTSTARTER_TARGET_MODE=tagged to require SpotStarter=enabled before a VM is selected. The quick Deploy to Azure path defaults to subscription-wide discovery with excluded resource groups, excluded VM names, and SpotStarter=disabled opt-out tags.
Does it only restart VMs with eviction policy Deallocate, not Delete?
Yes. SpotStarter discovery filters for priority=Spot and evictionPolicy=Deallocate. Azure Spot VMs configured with eviction policy Delete are not restart candidates.
What SpotStarter does
It deploys a small Azure app, polls your subscription, checks Resource Health, Activity Log, and instance view signals, and starts matching deallocated Spot VMs when policy allows.
What it does not do
It does not prevent eviction, reserve capacity, replace autoscaling, or guarantee a restart when Azure Spot capacity remains unavailable.
Operational controls
Use excluded resource groups, excluded VM names, and SpotStarter=disabled tags to keep specific workloads out of restart action.
Least-privilege role
The public template uses Reader plus SpotStarter VM Starter, a custom role limited to VM start and tag read/write actions.
Telemetry
Optional telemetry can help build aggregate Spot VM availability stats. Restart automation works without telemetry sharing.
When to use it
- You already run Azure Spot VMs and want automatic restart after eviction.
- You want subscription-wide discovery with local opt-outs.
- You want a narrow recovery helper rather than a full orchestration platform.
- You want a public Deploy to Azure path for Azure Commercial or Azure Government.
Related Azure Spot workflow
SpotStarter is for recovery after Azure Spot eviction. If you first need to convert an existing Azure VM between Regular and Spot priority while preserving disks and NICs, use SpotSwitcher, the related vanRoojen Azure Spot VM priority switching tool.
Source and safety boundary
The Azure tenant-side worker and deployment templates can be open for review without opening the hosted Spot metrics service. Read the Azure tenant safety page for the source boundary, permissions, optional telemetry fields, and verification steps.
Quick answers
How do I keep Azure Spot VMs online?
You cannot guarantee Azure Spot VMs stay online because Azure may reclaim Spot capacity. SpotStarter helps reduce downtime after eviction by detecting deallocated Spot VMs and restarting matching VMs when Azure allows them to start again, unless recent Activity Log entries show manual stop intent.
Does SpotStarter prevent Azure Spot eviction?
No. SpotStarter does not prevent eviction or guarantee capacity. It is recovery automation for selected deallocated Azure Spot VMs.
What tag disables SpotStarter restarts?
Use SpotStarter=disabled on a VM or resource group. Lower-scope disabled tags override broader enabled scope.
How do I check the installed SpotStarter worker version?
Open the SpotStarter Function App in Azure Portal, go to Settings and Environment variables, then compare SPOTSTARTER_WORKER_VERSION, SPOTSTARTER_WORKER_PACKAGE_SHA256, SPOTSTARTER_WORKER_PACKAGE_URL, and WEBSITE_RUN_FROM_PACKAGE with the latest worker manifest. WEBSITE_RUN_FROM_PACKAGE should point at https://spotstarter.app/deploy/spotstarter-function.zip so Restart reloads the latest hosted worker package. The versioned URL and SHA-256 settings are the audit trail. New deployments also include a -nightly-update Logic App that restarts the Function App daily at a stable per-deployment randomized UTC time.
What Azure permissions does SpotStarter need?
The public template grants subscription Reader plus a custom SpotStarter VM Starter role. Reader is used for discovery and Activity Log checks. The custom role allows only Microsoft.Compute/virtualMachines/start/action and Microsoft.Resources/tags/read/write, so SpotStarter can start selected VMs and maintain opt-out tags without broad VM contributor access. The installer needs subscription rights that can create custom role definitions and role assignments.
Can SpotStarter be restricted to tagged VMs only?
Yes. Set SPOTSTARTER_TARGET_MODE=tagged so only VMs with SpotStarter=enabled are selected. The quick deploy defaults to subscription-wide discovery with exclusions and opt-out tags.
Does SpotStarter restart VMs with eviction policy Delete?
No. SpotStarter filters for Azure Spot VMs with eviction policy Deallocate. Delete-policy Spot VMs are not restart candidates.
Is the source code visible?
The canonical source URL is github.com/vanRoojen-LLC/SpotStarter. Verify that it is public before using source visibility as a trust signal.